aboutsummaryrefslogtreecommitdiffstats
path: root/dcevm/src/test/java8
diff options
context:
space:
mode:
authorIvan Dubrov <idubrov@guidewire.com>2014-04-24 19:22:17 -0700
committerIvan Dubrov <idubrov@guidewire.com>2014-04-24 19:22:17 -0700
commit070f0932b7f5f901551d42850b1c105a080cc40b (patch)
treecfa0d0be6e34ae108180d071b77c98b8994ebb8c /dcevm/src/test/java8
parentf3d1c500f2cb30e2203df86844b378ea1b6bc53d (diff)
downloaddcevm-070f0932b7f5f901551d42850b1c105a080cc40b.tar.gz
dcevm-070f0932b7f5f901551d42850b1c105a080cc40b.zip
Adding Java 7 patch, support running tests on Java 7
Diffstat (limited to 'dcevm/src/test/java8')
-rw-r--r--dcevm/src/test/java8/org/dcevm/test/methods/DefaultMethodsTest.java110
-rw-r--r--dcevm/src/test/java8/org/dcevm/test/util/HotSwapTestHelper.java81
2 files changed, 191 insertions, 0 deletions
diff --git a/dcevm/src/test/java8/org/dcevm/test/methods/DefaultMethodsTest.java b/dcevm/src/test/java8/org/dcevm/test/methods/DefaultMethodsTest.java
new file mode 100644
index 00000000..de6b3c64
--- /dev/null
+++ b/dcevm/src/test/java8/org/dcevm/test/methods/DefaultMethodsTest.java
@@ -0,0 +1,110 @@
+/*
+ * 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 org.dcevm.test.methods;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static org.dcevm.test.util.HotSwapTestHelper.__version__;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for the class relationship A<B<C with adding / removing methods.
+ *
+ * @author Thomas Wuerthinger
+ */
+public class DefaultMethodsTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static interface A {
+ default int value() {
+ __toVersion__(1);
+ return 1 + value();
+ }
+ }
+
+ public static class B implements A {
+ }
+
+ public static interface C {
+ int value();
+ }
+
+ public static class D implements C {
+ @Override
+ public int value() {
+ __toVersion__(2);
+ return 3 + value();
+ }
+ }
+
+ // Version 1
+ public static interface A___1 {
+ int value();
+ }
+
+
+ public static class B___1 implements A {
+ public int value() {
+ return 2;
+ }
+ }
+
+ // Version 2
+ public static interface C___2 {
+ default int value() {
+ return 5;
+ }
+ }
+
+ public static class D___2 implements C___2 {
+ }
+
+ @Test
+ public void testDefaultMethodReplacedWithInstance() {
+ assert __version__() == 0;
+
+ A a = new B();
+ assertEquals(3, a.value());
+
+ __toVersion__(0);
+ }
+
+ @Test
+ public void testInstanceMethodReplacedWithDefault() {
+ assert __version__() == 0;
+
+ C c = new D();
+ assertEquals(8, c.value());
+
+ __toVersion__(0);
+ }
+}
diff --git a/dcevm/src/test/java8/org/dcevm/test/util/HotSwapTestHelper.java b/dcevm/src/test/java8/org/dcevm/test/util/HotSwapTestHelper.java
new file mode 100644
index 00000000..5ecbd83e
--- /dev/null
+++ b/dcevm/src/test/java8/org/dcevm/test/util/HotSwapTestHelper.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 org.dcevm.test.util;
+
+import org.dcevm.HotSwapTool;
+
+/**
+ * Shortcut methods for testing. Methods are named this way to make them more visible in the test code.
+ * @author Ivan Dubrov
+ */
+public class HotSwapTestHelper {
+ /**
+ * Returns the current version of the inner classes of an outer class.
+ * <p/>
+ * Caller class is used as an outer class.
+ *
+ * @return the version of the inner classes of the outer class
+ */
+ public static int __version__() {
+ return HotSwapTool.getCurrentVersion(determineOuter(0));
+ }
+
+ /**
+ * Redefines all inner classes of a outer class to a specified version. Inner classes who do not have a particular
+ * representation for a version remain unchanged.
+ * <p/>
+ * Caller class is used as an outer class.
+ *
+ * @param versionNumber the target version number
+ */
+ public static void __toVersion__(int versionNumber) {
+ HotSwapTool.toVersion(determineOuter(0), versionNumber);
+ }
+
+ /**
+ * Helper method to determine caller outer class.
+ * <p/>
+ * Takes caller class and finds its top enclosing class (which is supposed to be test class).
+ *
+ * @param level on which level this call is being made. 0 - call is made immediately in the method of HotSwapTool.
+ * @return outer class reference
+ */
+ private static Class<?> determineOuter(int level) {
+ StackTraceElement[] stack = Thread.currentThread().getStackTrace();
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ // one for Thread#getStackTrace
+ // one for #determineOuter
+ // one for the caller
+ String callerName = stack[level + 3].getClassName();
+ try {
+ Class<?> clazz = cl.loadClass(callerName);
+ while (clazz.getEnclosingClass() != null) {
+ clazz = clazz.getEnclosingClass();
+ }
+ return clazz;
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("Cannot find caller class: " + callerName, e);
+ }
+ }
+}