< prev index next >

test/jdk/java/lang/invoke/MethodHandlesTest.java

Print this page




 528                                      Throwable actual) {
 529         if (expected.isInstance(actual))  return;
 530         actual.printStackTrace();
 531         assertEquals(expected, actual.getClass());
 532     }
 533 
 534     static final boolean DEBUG_METHOD_HANDLE_NAMES = Boolean.getBoolean("java.lang.invoke.MethodHandle.DEBUG_NAMES");
 535 
 536     // rough check of name string
 537     static void assertNameStringContains(MethodHandle x, String s) {
 538         if (!DEBUG_METHOD_HANDLE_NAMES) {
 539             // ignore s
 540             assertEquals("MethodHandle"+x.type(), x.toString());
 541             return;
 542         }
 543         if (x.toString().contains(s))  return;
 544         assertEquals(s, x);
 545     }
 546 
 547     public static class HasFields {
 548         boolean fZ = false;
 549         byte fB = (byte)'B';
 550         short fS = (short)'S';
 551         char fC = 'C';
 552         int fI = 'I';
 553         long fJ = 'J';
 554         float fF = 'F';
 555         double fD = 'D';
 556         static boolean sZ = true;
 557         static byte sB = 1+(byte)'B';
 558         static short sS = 1+(short)'S';
 559         static char sC = 1+'C';
 560         static int sI = 1+'I';
 561         static long sJ = 1+'J';
 562         static float sF = 1+'F';
 563         static double sD = 1+'D';








 564 
 565         Object fL = 'L';
 566         String fR = "R";
 567         static Object sL = 'M';
 568         static String sR = "S";


 569 
 570         static final Object[][] CASES;
 571         static {
 572             ArrayList<Object[]> cases = new ArrayList<>();
 573             Object types[][] = {
 574                 {'L',Object.class}, {'R',String.class},
 575                 {'I',int.class}, {'J',long.class},
 576                 {'F',float.class}, {'D',double.class},
 577                 {'Z',boolean.class}, {'B',byte.class},
 578                 {'S',short.class}, {'C',char.class},
 579             };
 580             HasFields fields = new HasFields();
 581             for (Object[] t : types) {
 582                 for (int kind = 0; kind <= 1; kind++) {
 583                     boolean isStatic = (kind != 0);

 584                     char btc = (Character)t[0];
 585                     String name = (isStatic ? "s" : "f") + btc;

 586                     Class<?> type = (Class<?>) t[1];
 587                     Object value;
 588                     Field field;
 589                         try {
 590                         field = HasFields.class.getDeclaredField(name);
 591                     } catch (NoSuchFieldException | SecurityException ex) {
 592                         throw new InternalError("no field HasFields."+name);
 593                     }
 594                     try {
 595                         value = field.get(fields);
 596                     } catch (IllegalArgumentException | IllegalAccessException ex) {
 597                         throw new InternalError("cannot fetch field HasFields."+name);
 598                     }
 599                     if (type == float.class) {
 600                         float v = 'F';
 601                         if (isStatic)  v++;

 602                         assertTrue(value.equals(v));
 603                     }

 604                     assertTrue(name.equals(field.getName()));
 605                     assertTrue(type.equals(field.getType()));
 606                     assertTrue(isStatic == (Modifier.isStatic(field.getModifiers())));

 607                     cases.add(new Object[]{ field, value });
 608                 }
 609             }
 610             cases.add(new Object[]{ new Object[]{ false, HasFields.class, "bogus_fD", double.class }, Error.class });
 611             cases.add(new Object[]{ new Object[]{ true,  HasFields.class, "bogus_sL", Object.class }, Error.class });
 612             CASES = cases.toArray(new Object[0][]);
 613         }
 614     }
 615 
 616     static final int TEST_UNREFLECT = 1, TEST_FIND_FIELD = 2, TEST_FIND_STATIC = 3, TEST_SETTER = 0x10, TEST_BOUND = 0x20, TEST_NPE = 0x40;
 617 
 618     static boolean testModeMatches(int testMode, boolean isStatic) {
 619         switch (testMode) {
 620         case TEST_FIND_STATIC:          return isStatic;
 621         case TEST_FIND_FIELD:           return !isStatic;
 622         case TEST_UNREFLECT:            return true;  // unreflect matches both
 623         }
 624         throw new InternalError("testMode="+testMode);
 625     }
 626 




 528                                      Throwable actual) {
 529         if (expected.isInstance(actual))  return;
 530         actual.printStackTrace();
 531         assertEquals(expected, actual.getClass());
 532     }
 533 
 534     static final boolean DEBUG_METHOD_HANDLE_NAMES = Boolean.getBoolean("java.lang.invoke.MethodHandle.DEBUG_NAMES");
 535 
 536     // rough check of name string
 537     static void assertNameStringContains(MethodHandle x, String s) {
 538         if (!DEBUG_METHOD_HANDLE_NAMES) {
 539             // ignore s
 540             assertEquals("MethodHandle"+x.type(), x.toString());
 541             return;
 542         }
 543         if (x.toString().contains(s))  return;
 544         assertEquals(s, x);
 545     }
 546 
 547     public static class HasFields {
 548         boolean iZ = false;
 549         byte iB = (byte)'B';
 550         short iS = (short)'S';
 551         char iC = 'C';
 552         int iI = 'I';
 553         long iJ = 'J';
 554         float iF = 'F';
 555         double iD = 'D';
 556         static boolean sZ = true;
 557         static byte sB = 1+(byte)'B';
 558         static short sS = 1+(short)'S';
 559         static char sC = 1+'C';
 560         static int sI = 1+'I';
 561         static long sJ = 1+'J';
 562         static float sF = 1+'F';
 563         static double sD = 1+'D';
 564         final static boolean fsZ = false;
 565         final static byte fsB = 2+(byte)'B';
 566         final static short fsS = 2+(short)'S';
 567         final static char fsC = 2+'C';
 568         final static int fsI = 2+'I';
 569         final static long fsJ = 2+'J';
 570         final static float fsF = 2+'F';
 571         final static double fsD = 2+'D';
 572 
 573         Object iL = 'L';
 574         String iR = "R";
 575         static Object sL = 'M';
 576         static String sR = "S";
 577         final static Object fsL = 'N';
 578         final static String fsR = "T";
 579 
 580         static final Object[][] CASES;
 581         static {
 582             ArrayList<Object[]> cases = new ArrayList<>();
 583             Object types[][] = {
 584                 {'L',Object.class}, {'R',String.class},
 585                 {'I',int.class}, {'J',long.class},
 586                 {'F',float.class}, {'D',double.class},
 587                 {'Z',boolean.class}, {'B',byte.class},
 588                 {'S',short.class}, {'C',char.class},
 589             };
 590             HasFields fields = new HasFields();
 591             for (Object[] t : types) {
 592                 for (int kind = 0; kind <= 2; kind++) {
 593                     boolean isStatic = (kind != 0);
 594                     boolean isFinal  = (kind == 2);
 595                     char btc = (Character)t[0];
 596                     String name = (isStatic ? "s" : "i") + btc;
 597                     if (isFinal) name = "f" + name;
 598                     Class<?> type = (Class<?>) t[1];
 599                     Object value;
 600                     Field field;
 601                     try {
 602                         field = HasFields.class.getDeclaredField(name);
 603                     } catch (NoSuchFieldException | SecurityException ex) {
 604                         throw new InternalError("no field HasFields."+name);
 605                     }
 606                     try {
 607                         value = field.get(fields);
 608                     } catch (IllegalArgumentException | IllegalAccessException ex) {
 609                         throw new InternalError("cannot fetch field HasFields."+name);
 610                     }
 611                     if (type == float.class) {
 612                         float v = 'F';
 613                         if (isStatic)  v++;
 614                         if (isFinal)   v++;
 615                         assertTrue(value.equals(v));
 616                     }
 617                     if (isFinal && isStatic) field.setAccessible(true);
 618                     assertTrue(name.equals(field.getName()));
 619                     assertTrue(type.equals(field.getType()));
 620                     assertTrue(isStatic == (Modifier.isStatic(field.getModifiers())));
 621                     assertTrue(isFinal  == (Modifier.isFinal(field.getModifiers())));
 622                     cases.add(new Object[]{ field, value });
 623                 }
 624             }
 625             cases.add(new Object[]{ new Object[]{ false, HasFields.class, "bogus_fD", double.class }, Error.class });
 626             cases.add(new Object[]{ new Object[]{ true,  HasFields.class, "bogus_sL", Object.class }, Error.class });
 627             CASES = cases.toArray(new Object[0][]);
 628         }
 629     }
 630 
 631     static final int TEST_UNREFLECT = 1, TEST_FIND_FIELD = 2, TEST_FIND_STATIC = 3, TEST_SETTER = 0x10, TEST_BOUND = 0x20, TEST_NPE = 0x40;
 632 
 633     static boolean testModeMatches(int testMode, boolean isStatic) {
 634         switch (testMode) {
 635         case TEST_FIND_STATIC:          return isStatic;
 636         case TEST_FIND_FIELD:           return !isStatic;
 637         case TEST_UNREFLECT:            return true;  // unreflect matches both
 638         }
 639         throw new InternalError("testMode="+testMode);
 640     }
 641 


< prev index next >