summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Narayan Kamath <narayan@google.com> 2016-11-04 14:41:19 +0000
committer Narayan Kamath <narayan@google.com> 2016-11-09 10:30:19 +0000
commit8677d0b30ea9d04d22ef12bef8b8787935d803f5 (patch)
treee7fd68d1984395f1fa094f91e09a3053f02792f0
parent0864c98b10cb8ca306671cabaa9be2a4068a2711 (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.java39
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();