diff options
| author | 2016-11-04 14:41:19 +0000 | |
|---|---|---|
| committer | 2016-11-09 10:30:19 +0000 | |
| commit | 8677d0b30ea9d04d22ef12bef8b8787935d803f5 (patch) | |
| tree | e7fd68d1984395f1fa094f91e09a3053f02792f0 | |
| parent | 0864c98b10cb8ca306671cabaa9be2a4068a2711 (diff) | |
MethodHandles: Add tests for MethodHandle.bindTo.
Test: make test-art-host
Bug: 30550796
Change-Id: I7e8bd8c8cae5f874f7743fd1a0a361875fcb997e
| -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(); |