aboutsummaryrefslogtreecommitdiffstats
path: root/dcevm
diff options
context:
space:
mode:
authorIvan Dubrov <idubrov@guidewire.com>2014-04-30 16:39:50 -0700
committerIvan Dubrov <idubrov@guidewire.com>2014-04-30 16:39:50 -0700
commit6f5ee94f40ac9e6a6a0931d8ce080ea0e0a4128f (patch)
tree702035fc3248d3e5c64ab3c3785d6eb0ceeba0ba /dcevm
parente28200350d4903986bb1b65c15d0c318dd7f1a29 (diff)
downloaddcevm-6f5ee94f40ac9e6a6a0931d8ce080ea0e0a4128f.tar.gz
dcevm-6f5ee94f40ac9e6a6a0931d8ce080ea0e0a4128f.zip
Implementing tests for interface methods and lambdas
Diffstat (limited to 'dcevm')
-rw-r--r--dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java85
-rw-r--r--dcevm/src/test/java8/com/github/dcevm/test/methods/InterfaceMethodsTest.java81
2 files changed, 166 insertions, 0 deletions
diff --git a/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java b/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java
new file mode 100644
index 00000000..211dfcf3
--- /dev/null
+++ b/dcevm/src/test/java8/com/github/dcevm/test/lambdas/LambdaTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package com.github.dcevm.test.lambdas;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.concurrent.Callable;
+
+import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for lambda expressions
+ *
+ * @author Ivan Dubrov
+ */
+public class LambdaTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static class A {
+ public static Callable<Integer> createLambda() {
+ return A::value;
+ }
+
+ public static int value() {
+ return 1;
+ }
+ }
+
+ // Version 1
+ public static class A___1 {
+ public static Callable<Integer> createLambda() {
+ return A::value;
+ }
+
+ public static int value() {
+ return 2;
+ }
+ }
+
+ @Test
+ public void testStaticMethodLambda() throws Exception {
+ assert __version__() == 0;
+
+ Callable<Integer> lambda = A.createLambda();
+
+ assertEquals(1, (int) lambda.call());
+
+ __toVersion__(1);
+
+ assertEquals(2, (int) lambda.call());
+
+ __toVersion__(0);
+ assert __version__() == 0;
+ }
+} \ No newline at end of file
diff --git a/dcevm/src/test/java8/com/github/dcevm/test/methods/InterfaceMethodsTest.java b/dcevm/src/test/java8/com/github/dcevm/test/methods/InterfaceMethodsTest.java
new file mode 100644
index 00000000..25967828
--- /dev/null
+++ b/dcevm/src/test/java8/com/github/dcevm/test/methods/InterfaceMethodsTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+
+package com.github.dcevm.test.methods;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
+
+import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for replacing static methods in interfaces.
+ *
+ * @author Ivan Dubrov
+ */
+public class InterfaceMethodsTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static interface A {
+ public static int staticMethod() {
+ return 1;
+ }
+ }
+
+ // Version 1
+ public static interface A___1 {
+ public static long staticMethod() {
+ return 2;
+ }
+ }
+
+ @Test
+ public void testStaticInterfaceMethods() throws Throwable {
+ assert __version__() == 0;
+
+ MethodHandle handle =
+ MethodHandles.publicLookup().findStatic(A.class, "staticMethod", MethodType.methodType(int.class));
+
+ assertEquals(1, A.staticMethod());
+ assertEquals(1, handle.invoke());
+
+ __toVersion__(1);
+
+ assertEquals(2, A.staticMethod());
+ assertEquals(2, handle.invoke());
+
+ __toVersion__(0);
+ }
+}