diff options
| -rw-r--r-- | test/957-methodhandle-transforms/src/Main.java | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/957-methodhandle-transforms/src/Main.java b/test/957-methodhandle-transforms/src/Main.java index 6c977f4f34..3c6f119f4a 100644 --- a/test/957-methodhandle-transforms/src/Main.java +++ b/test/957-methodhandle-transforms/src/Main.java @@ -30,6 +30,7 @@ public class Main { testArrayElementSetter(); testIdentity(); testConstant(); + testBindTo(); } public static void testThrowException() throws Throwable { @@ -669,6 +670,44 @@ public class Main { } } + public static void testBindTo() throws Throwable { + MethodHandle stringCharAt = MethodHandles.lookup().findVirtual( + String.class, "charAt", MethodType.methodType(char.class, int.class)); + + char value = (char) stringCharAt.invoke("foo", 0); + if (value != 'f') { + System.out.println("Unexpected value: " + value); + } + + MethodHandle bound = stringCharAt.bindTo("foo"); + value = (char) bound.invoke(0); + if (value != 'f') { + System.out.println("Unexpected value: " + value); + } + + try { + stringCharAt.bindTo(new Object()); + fail(); + } catch (ClassCastException expected) { + } + + bound = stringCharAt.bindTo(null); + try { + bound.invoke(0); + fail(); + } catch (NullPointerException expected) { + } + + MethodHandle integerParseInt = MethodHandles.lookup().findStatic( + Integer.class, "parseInt", MethodType.methodType(int.class, String.class)); + + bound = integerParseInt.bindTo("78452"); + int intValue = (int) bound.invoke(); + if (intValue != 78452) { + System.out.println("Unexpected value: " + intValue); + } + } + public static void fail() { System.out.println("FAIL"); Thread.dumpStack(); |