aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Dubrov <idubrov@guidewire.com>2014-04-25 14:58:20 -0700
committerIvan Dubrov <idubrov@guidewire.com>2014-04-25 14:58:36 -0700
commitf03a441e45e867ffe84c99b01ccb16dbf9968c05 (patch)
treea2569faab2b7b3fef6a1f378c9b50855bb99d4f8
parent346ce86807322ceee5ca415bf13b26736ddb21c9 (diff)
downloaddcevm-f03a441e45e867ffe84c99b01ccb16dbf9968c05.tar.gz
dcevm-f03a441e45e867ffe84c99b01ccb16dbf9968c05.zip
Fixing line encoding
-rw-r--r--dcevm/src/test/java7/com/github/dcevm/test/fields/AccessDeletedFieldTest.java394
-rw-r--r--dcevm/src/test/java7/com/github/dcevm/test/methods/CallDeletedMethodTest.java234
-rw-r--r--dcevm/src/test/java7/com/github/dcevm/test/methods/DeleteActiveMethodTest.java338
-rw-r--r--dcevm/src/test/java7/com/github/dcevm/test/structural/HierarchySwapTest.java794
-rw-r--r--dcevm/src/test/java7/com/github/dcevm/test/structural/LargeHierarchyTest.java592
5 files changed, 1176 insertions, 1176 deletions
diff --git a/dcevm/src/test/java7/com/github/dcevm/test/fields/AccessDeletedFieldTest.java b/dcevm/src/test/java7/com/github/dcevm/test/fields/AccessDeletedFieldTest.java
index 84a76c92..dee249d5 100644
--- a/dcevm/src/test/java7/com/github/dcevm/test/fields/AccessDeletedFieldTest.java
+++ b/dcevm/src/test/java7/com/github/dcevm/test/fields/AccessDeletedFieldTest.java
@@ -1,197 +1,197 @@
-/*
- * 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.fields;
-
-import com.github.dcevm.test.TestUtil;
-import com.github.dcevm.test.category.Full;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-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 accessing a deleted field. In the first scenario, the field is deleted from the class.
- * In the second scenario, it is deleted because of a changed subtype relationship.
- *
- * @author Thomas Wuerthinger
- */
-public class AccessDeletedFieldTest {
-
- @Before
- public void setUp() throws Exception {
- __toVersion__(0);
- }
-
- // Version 0
- public static class A {
-
- public int x;
-
- int getFieldInOldCode() {
-
- __toVersion__(1);
-
- // This field does no longer exist
- return x;
- }
- }
-
- public static class B extends A {
- }
-
- // Version 1
- public static class A___1 {
- }
-
- // Version 2
- public static class B___2 {
- }
-
- // Method to enforce cast (otherwise bytecodes become invalid in version 2)
- public static A convertBtoA(Object b) {
- return (A) b;
- }
-
- @Test
- public void testOldCodeAccessesDeletedField() {
-
- assert __version__() == 0;
-
- final A a = new A();
- a.x = 1;
-
- TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
- @Override
- public void run() {
- assertEquals(0, a.getFieldInOldCode());
- }
- });
-
- assert __version__() == 1;
- __toVersion__(0);
- assertEquals(0, a.x);
- }
-
- @Test
- public void testAccessDeletedField() {
-
- assert __version__() == 0;
-
- final A a = new A();
- a.x = 1;
-
- assertEquals(1, a.x);
-
- __toVersion__(1);
-
- TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
- @Override
- public void run() {
- System.out.println(a.x);
- }
- });
-
- __toVersion__(0);
- assertEquals(0, a.x);
- }
-
- @Test
- @Category(Full.class)
- public void testAccessDeleteBaseClassFieldNormal() {
-
- __toVersion__(0);
- assert __version__() == 0;
- final B b = new B();
- b.x = 1;
- final A a = new A();
- a.x = 2;
-
- assertEquals(1, b.x);
- assertEquals(2, a.x);
-
- __toVersion__(2);
-
- TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
-
- @Override
- public void run() {
- System.out.println(b.x);
- }
- });
-
- assertEquals(2, a.x);
-
- __toVersion__(0);
- assertEquals(0, b.x);
- }
-
- @Test
- @Category(Full.class)
- public void testAccessDeleteBaseClassFieldInvalid() {
-
- __toVersion__(0);
- assert __version__() == 0;
- final B b = new B();
- final A a1 = new A();
- a1.x = 1;
- b.x = 1;
-
- __toVersion__(2);
-
- TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
-
- @Override
- public void run() {
- System.out.println(b.x);
- }
- });
-
- assertEquals(1, a1.x);
-
- __toVersion__(0);
- assertEquals(0, b.x);
- assertEquals(1, a1.x);
-
- A a = convertBtoA(b);
-
- assertEquals(0, b.x);
-
- // Must fail, because now an instance of B is in a local variable of type A!
- TestUtil.assertException(UnsupportedOperationException.class, new Runnable() {
-
- @Override
- public void run() {
- __toVersion__(2);
- }
- });
-
- assertEquals(0, a.x);
-
- // Still at version 0
- assert __version__() == 0;
- }
-}
+/*
+ * 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.fields;
+
+import com.github.dcevm.test.TestUtil;
+import com.github.dcevm.test.category.Full;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+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 accessing a deleted field. In the first scenario, the field is deleted from the class.
+ * In the second scenario, it is deleted because of a changed subtype relationship.
+ *
+ * @author Thomas Wuerthinger
+ */
+public class AccessDeletedFieldTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static class A {
+
+ public int x;
+
+ int getFieldInOldCode() {
+
+ __toVersion__(1);
+
+ // This field does no longer exist
+ return x;
+ }
+ }
+
+ public static class B extends A {
+ }
+
+ // Version 1
+ public static class A___1 {
+ }
+
+ // Version 2
+ public static class B___2 {
+ }
+
+ // Method to enforce cast (otherwise bytecodes become invalid in version 2)
+ public static A convertBtoA(Object b) {
+ return (A) b;
+ }
+
+ @Test
+ public void testOldCodeAccessesDeletedField() {
+
+ assert __version__() == 0;
+
+ final A a = new A();
+ a.x = 1;
+
+ TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
+ @Override
+ public void run() {
+ assertEquals(0, a.getFieldInOldCode());
+ }
+ });
+
+ assert __version__() == 1;
+ __toVersion__(0);
+ assertEquals(0, a.x);
+ }
+
+ @Test
+ public void testAccessDeletedField() {
+
+ assert __version__() == 0;
+
+ final A a = new A();
+ a.x = 1;
+
+ assertEquals(1, a.x);
+
+ __toVersion__(1);
+
+ TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
+ @Override
+ public void run() {
+ System.out.println(a.x);
+ }
+ });
+
+ __toVersion__(0);
+ assertEquals(0, a.x);
+ }
+
+ @Test
+ @Category(Full.class)
+ public void testAccessDeleteBaseClassFieldNormal() {
+
+ __toVersion__(0);
+ assert __version__() == 0;
+ final B b = new B();
+ b.x = 1;
+ final A a = new A();
+ a.x = 2;
+
+ assertEquals(1, b.x);
+ assertEquals(2, a.x);
+
+ __toVersion__(2);
+
+ TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
+
+ @Override
+ public void run() {
+ System.out.println(b.x);
+ }
+ });
+
+ assertEquals(2, a.x);
+
+ __toVersion__(0);
+ assertEquals(0, b.x);
+ }
+
+ @Test
+ @Category(Full.class)
+ public void testAccessDeleteBaseClassFieldInvalid() {
+
+ __toVersion__(0);
+ assert __version__() == 0;
+ final B b = new B();
+ final A a1 = new A();
+ a1.x = 1;
+ b.x = 1;
+
+ __toVersion__(2);
+
+ TestUtil.assertException(NoSuchFieldError.class, new Runnable() {
+
+ @Override
+ public void run() {
+ System.out.println(b.x);
+ }
+ });
+
+ assertEquals(1, a1.x);
+
+ __toVersion__(0);
+ assertEquals(0, b.x);
+ assertEquals(1, a1.x);
+
+ A a = convertBtoA(b);
+
+ assertEquals(0, b.x);
+
+ // Must fail, because now an instance of B is in a local variable of type A!
+ TestUtil.assertException(UnsupportedOperationException.class, new Runnable() {
+
+ @Override
+ public void run() {
+ __toVersion__(2);
+ }
+ });
+
+ assertEquals(0, a.x);
+
+ // Still at version 0
+ assert __version__() == 0;
+ }
+}
diff --git a/dcevm/src/test/java7/com/github/dcevm/test/methods/CallDeletedMethodTest.java b/dcevm/src/test/java7/com/github/dcevm/test/methods/CallDeletedMethodTest.java
index ec117033..08a70bdf 100644
--- a/dcevm/src/test/java7/com/github/dcevm/test/methods/CallDeletedMethodTest.java
+++ b/dcevm/src/test/java7/com/github/dcevm/test/methods/CallDeletedMethodTest.java
@@ -1,117 +1,117 @@
-/*
- * 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 com.github.dcevm.MethodRedefinitionPolicy;
-import com.github.dcevm.RedefinitionPolicy;
-import com.github.dcevm.test.category.Full;
-import junit.framework.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
-import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
-import static org.junit.Assert.assertEquals;
-
-/**
- * Test case that calls a virtual method that was deleted through class redefinition.
- *
- * @author Thomas Wuerthinger
- */
-@Category(Full.class)
-public class CallDeletedMethodTest {
-
- @Before
- public void setUp() throws Exception {
- __toVersion__(0);
- }
-
- // Version 0
- public static class A {
-
- public int value() {
- return 5;
- }
-
- public int oldMethod() {
- __toVersion__(1);
- return deletedMethod();
- }
-
- public int deletedMethod() {
- return 1;
- }
- }
-
- // Version 1
- @MethodRedefinitionPolicy(RedefinitionPolicy.AccessDeletedMembers)
- public static class A___1 {
-
- public int oldMethod() {
- return 2;
- }
- }
-
- @Test
- public void testOldCodeCallsDeletedMethod() {
-
- assert __version__() == 0;
- A a = new A();
-
- assertEquals(1, a.oldMethod());
- assert __version__() == 1;
- assertEquals(2, a.oldMethod());
-
- __toVersion__(0);
-
- assertEquals(1, a.oldMethod());
- assert __version__() == 1;
- assertEquals(2, a.oldMethod());
-
- __toVersion__(0);
- }
-
- @Test
- public void testNewCodeCallsDeletedMethod() {
-
- assert __version__() == 0;
-
- A a = new A();
- assertEquals(5, a.value());
-
- __toVersion__(1);
-
- try {
- a.value();
- Assert.fail("NoSuchMethodError exception must be thrown!");
- } catch (NoSuchMethodError e) {
- // Expected exception
- }
-
- __toVersion__(0);
- assertEquals(5, a.value());
- }
-}
+/*
+ * 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 com.github.dcevm.MethodRedefinitionPolicy;
+import com.github.dcevm.RedefinitionPolicy;
+import com.github.dcevm.test.category.Full;
+import junit.framework.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Test case that calls a virtual method that was deleted through class redefinition.
+ *
+ * @author Thomas Wuerthinger
+ */
+@Category(Full.class)
+public class CallDeletedMethodTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static class A {
+
+ public int value() {
+ return 5;
+ }
+
+ public int oldMethod() {
+ __toVersion__(1);
+ return deletedMethod();
+ }
+
+ public int deletedMethod() {
+ return 1;
+ }
+ }
+
+ // Version 1
+ @MethodRedefinitionPolicy(RedefinitionPolicy.AccessDeletedMembers)
+ public static class A___1 {
+
+ public int oldMethod() {
+ return 2;
+ }
+ }
+
+ @Test
+ public void testOldCodeCallsDeletedMethod() {
+
+ assert __version__() == 0;
+ A a = new A();
+
+ assertEquals(1, a.oldMethod());
+ assert __version__() == 1;
+ assertEquals(2, a.oldMethod());
+
+ __toVersion__(0);
+
+ assertEquals(1, a.oldMethod());
+ assert __version__() == 1;
+ assertEquals(2, a.oldMethod());
+
+ __toVersion__(0);
+ }
+
+ @Test
+ public void testNewCodeCallsDeletedMethod() {
+
+ assert __version__() == 0;
+
+ A a = new A();
+ assertEquals(5, a.value());
+
+ __toVersion__(1);
+
+ try {
+ a.value();
+ Assert.fail("NoSuchMethodError exception must be thrown!");
+ } catch (NoSuchMethodError e) {
+ // Expected exception
+ }
+
+ __toVersion__(0);
+ assertEquals(5, a.value());
+ }
+}
diff --git a/dcevm/src/test/java7/com/github/dcevm/test/methods/DeleteActiveMethodTest.java b/dcevm/src/test/java7/com/github/dcevm/test/methods/DeleteActiveMethodTest.java
index 3a6166f4..7d0c11e0 100644
--- a/dcevm/src/test/java7/com/github/dcevm/test/methods/DeleteActiveMethodTest.java
+++ b/dcevm/src/test/java7/com/github/dcevm/test/methods/DeleteActiveMethodTest.java
@@ -1,169 +1,169 @@
-/*
- * 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 static org.junit.Assert.assertEquals;
-
-import com.github.dcevm.MethodRedefinitionPolicy;
-import com.github.dcevm.RedefinitionPolicy;
-import com.github.dcevm.test.TestUtil;
-import junit.framework.Assert;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
-import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
-
-/**
- * Test cases that delete a method that is currently active on the stack.
- *
- * @author Thomas Wuerthinger
- */
-public class DeleteActiveMethodTest {
-
- @Before
- public void setUp() throws Exception {
- __toVersion__(0);
- }
-
- // Version 0
- public static class A {
-
- boolean firstCall;
-
- public int value() {
- firstCall = true;
- return helperValue();
- }
-
- public int helperValue() {
-
- if (!firstCall) {
- return -1;
- }
- firstCall = false;
-
- Thread t = new Thread(new Runnable() {
-
- @Override
- public void run() {
- __toVersion__(1);
- }
- });
- t.start();
-
- try {
- while (t.isAlive()) {
- try {
- this.helperValue();
- Thread.sleep(500);
- } catch (InterruptedException e) {
- }
- helperValue();
- }
- Assert.fail("Exception expected!");
- } catch (NoSuchMethodError e) {
- }
-
- try {
- t.join();
- } catch (InterruptedException e) {
- }
-
- return 1;
- }
- }
-
- public static class B {
-
- public int fac(int x) {
- if (x == 0) {
- __toVersion__(1);
- }
-
- return x * fac(x - 1);
- }
- }
-
- // Version 1
- @MethodRedefinitionPolicy(RedefinitionPolicy.DynamicCheck)
- public static class A___1 {
-
- boolean firstCall;
-
- public int value() {
- __toVersion__(0);
- return 2;
- }
- }
-
- @MethodRedefinitionPolicy(RedefinitionPolicy.DynamicCheck)
- public static class B___1 {
- }
-
- @Test
- public void testDeleteActiveMethodSimple() {
- assert __version__() == 0;
-
- final B b = new B();
- TestUtil.assertException(NoSuchMethodError.class, new Runnable() {
- @Override
- public void run() {
- b.fac(5);
- }
- });
-
- assert __version__() == 1;
-
- __toVersion__(0);
- assert __version__() == 0;
- }
-
- @Test
- public void testDeleteActiveMethod() {
- assert __version__() == 0;
-
- A a = new A();
-
- assertEquals(1, a.value());
- assert __version__() == 1;
-
- assertEquals(2, a.value());
- assert __version__() == 0;
-
- assertEquals(1, a.value());
- assert __version__() == 1;
-
- assertEquals(2, a.value());
- assert __version__() == 0;
-
- assertEquals(1, a.value());
- assert __version__() == 1;
-
- assertEquals(2, a.value());
- assert __version__() == 0;
- }
-}
+/*
+ * 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 static org.junit.Assert.assertEquals;
+
+import com.github.dcevm.MethodRedefinitionPolicy;
+import com.github.dcevm.RedefinitionPolicy;
+import com.github.dcevm.test.TestUtil;
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
+
+/**
+ * Test cases that delete a method that is currently active on the stack.
+ *
+ * @author Thomas Wuerthinger
+ */
+public class DeleteActiveMethodTest {
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static class A {
+
+ boolean firstCall;
+
+ public int value() {
+ firstCall = true;
+ return helperValue();
+ }
+
+ public int helperValue() {
+
+ if (!firstCall) {
+ return -1;
+ }
+ firstCall = false;
+
+ Thread t = new Thread(new Runnable() {
+
+ @Override
+ public void run() {
+ __toVersion__(1);
+ }
+ });
+ t.start();
+
+ try {
+ while (t.isAlive()) {
+ try {
+ this.helperValue();
+ Thread.sleep(500);
+ } catch (InterruptedException e) {
+ }
+ helperValue();
+ }
+ Assert.fail("Exception expected!");
+ } catch (NoSuchMethodError e) {
+ }
+
+ try {
+ t.join();
+ } catch (InterruptedException e) {
+ }
+
+ return 1;
+ }
+ }
+
+ public static class B {
+
+ public int fac(int x) {
+ if (x == 0) {
+ __toVersion__(1);
+ }
+
+ return x * fac(x - 1);
+ }
+ }
+
+ // Version 1
+ @MethodRedefinitionPolicy(RedefinitionPolicy.DynamicCheck)
+ public static class A___1 {
+
+ boolean firstCall;
+
+ public int value() {
+ __toVersion__(0);
+ return 2;
+ }
+ }
+
+ @MethodRedefinitionPolicy(RedefinitionPolicy.DynamicCheck)
+ public static class B___1 {
+ }
+
+ @Test
+ public void testDeleteActiveMethodSimple() {
+ assert __version__() == 0;
+
+ final B b = new B();
+ TestUtil.assertException(NoSuchMethodError.class, new Runnable() {
+ @Override
+ public void run() {
+ b.fac(5);
+ }
+ });
+
+ assert __version__() == 1;
+
+ __toVersion__(0);
+ assert __version__() == 0;
+ }
+
+ @Test
+ public void testDeleteActiveMethod() {
+ assert __version__() == 0;
+
+ A a = new A();
+
+ assertEquals(1, a.value());
+ assert __version__() == 1;
+
+ assertEquals(2, a.value());
+ assert __version__() == 0;
+
+ assertEquals(1, a.value());
+ assert __version__() == 1;
+
+ assertEquals(2, a.value());
+ assert __version__() == 0;
+
+ assertEquals(1, a.value());
+ assert __version__() == 1;
+
+ assertEquals(2, a.value());
+ assert __version__() == 0;
+ }
+}
diff --git a/dcevm/src/test/java7/com/github/dcevm/test/structural/HierarchySwapTest.java b/dcevm/src/test/java7/com/github/dcevm/test/structural/HierarchySwapTest.java
index e227ab47..bd606640 100644
--- a/dcevm/src/test/java7/com/github/dcevm/test/structural/HierarchySwapTest.java
+++ b/dcevm/src/test/java7/com/github/dcevm/test/structural/HierarchySwapTest.java
@@ -1,397 +1,397 @@
-/*
- * 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.structural;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
-import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
-import static org.junit.Assert.*;
-
-/**
- * Smallest test case for a hierarchy swap. A<B is changed to B<A.
- *
- * @author Thomas Wuerthinger
- */
-@Ignore
-public class HierarchySwapTest {
-
- // Version 0
- public static class A {
-
- public int value() {
- return 1;
- }
- }
-
- public static class B extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class C {
-
- public boolean doInstanceCheckA(Object o) {
- return o instanceof A;
- }
-
- public boolean doInstanceCheckB(Object o) {
- return o instanceof B;
- }
- }
-
- public static class Base {
-
- public String className() {
- return "Base";
- }
- }
-
- public static class D extends Base {
-
- @Override
- public String className() {
- return "D";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class E extends Base {
-
- @Override
- public String className() {
- return "E";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class F extends Base {
-
- @Override
- public String className() {
- return "F";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- // Version 1
- public static class A___1 extends B___1 {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class B___1 {
-
- public int value() {
- return 4;
- }
- }
-
- public static class C___1 {
-
- public boolean doInstanceCheckA(Object o) {
- return o instanceof A;
- }
-
- public boolean doInstanceCheckB(Object o) {
- return o instanceof B;
- }
- }
-
- // Version 2
- public static class D___2 extends Base {
-
- @Override
- public String className() {
- return "D";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class E___2 extends D {
-
- @Override
- public String className() {
- return "E";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class F___2 extends E {
-
- @Override
- public String className() {
- return "F";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- // Version 3
- public static class D___3 extends E {
-
- @Override
- public String className() {
- return "D";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class E___3 extends F {
-
- @Override
- public String className() {
- return "E";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class F___3 extends Base {
-
- @Override
- public String className() {
- return "F";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- // Version 4
- public static class D___4 extends E {
-
- @Override
- public String className() {
- return "D";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class E___4 extends Base {
-
- @Override
- public String className() {
- return "E";
- }
-
- public String superClassName() {
- return super.className();
- }
- }
-
- public static class F___4 extends E {
-
- @Override
- public String className() {
- return "F";
- }
-
- @Override
- public String superClassName() {
- return super.className();
- }
- }
-
- @Before
- public void setUp() throws Exception {
- __toVersion__(0);
- }
-
- @Test
- public void testHierarchySwap() {
-
- assert __version__() == 0;
-
- A a = new A();
- B b = new B();
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(b.getClass().getSuperclass().equals(A.class));
- assertFalse(a.getClass().getSuperclass().equals(B.class));
-
- __toVersion__(1);
-
- assertEquals(8, a.value());
- assertEquals(4, b.value());
- assertFalse(b.getClass().getSuperclass().equals(A.class));
- assertTrue(a.getClass().getSuperclass().equals(B.class));
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(b.getClass().getSuperclass().equals(A.class));
- assertFalse(a.getClass().getSuperclass().equals(B.class));
- }
-
- @Test
- public void testHierarchySwapWithInstanceOfTest() {
-
- assert __version__() == 0;
-
- A a = new A();
- B b = new B();
- C c = new C();
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(c.doInstanceCheckA(b));
- assertFalse(c.doInstanceCheckB(a));
-
- __toVersion__(1);
-
- assertEquals(8, a.value());
- assertEquals(4, b.value());
- assertFalse(c.doInstanceCheckA(b));
- assertTrue(c.doInstanceCheckB(a));
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(c.doInstanceCheckA(b));
- assertFalse(c.doInstanceCheckB(a));
- }
-
- @Test
- public void testHierarchySwapWithInstanceOf() {
-
- assert __version__() == 0;
-
- A a = new A();
- B b = new B();
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(b instanceof A);
- assertFalse(a instanceof B);
-
- __toVersion__(1);
-
- assertEquals(8, a.value());
- assertEquals(4, b.value());
- assertFalse(b instanceof A);
- assertTrue(a instanceof B);
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertTrue(b instanceof A);
- assertFalse(a instanceof B);
- }
-
- @Test
- public void testTripleSwap() {
-
-
- assert __version__() == 0;
-
- D d = new D();
- E e = new E();
- F f = new F();
-
- assertEquals(d.superClassName(), "Base");
- assertEquals(e.superClassName(), "Base");
- assertEquals(f.superClassName(), "Base");
-
- __toVersion__(2);
-
- assertEquals(d.superClassName(), "Base");
- assertEquals(e.superClassName(), "D");
- assertEquals(f.superClassName(), "E");
-
- __toVersion__(3);
-
- assertEquals(d.superClassName(), "E");
- assertEquals(e.superClassName(), "F");
- assertEquals(f.superClassName(), "Base");
-
- __toVersion__(4);
-
- assertEquals(d.superClassName(), "E");
- assertEquals(e.superClassName(), "Base");
- assertEquals(f.superClassName(), "E");
-
- __toVersion__(3);
-
- assertEquals(d.superClassName(), "E");
- assertEquals(e.superClassName(), "F");
- assertEquals(f.superClassName(), "Base");
-
- __toVersion__(2);
-
- assertEquals(d.superClassName(), "Base");
- assertEquals(e.superClassName(), "D");
- assertEquals(f.superClassName(), "E");
-
- __toVersion__(0);
-
- assertEquals(d.superClassName(), "Base");
- assertEquals(e.superClassName(), "Base");
- assertEquals(f.superClassName(), "Base");
- }
-}
+/*
+ * 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.structural;
+
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static com.github.dcevm.test.util.HotSwapTestHelper.__toVersion__;
+import static com.github.dcevm.test.util.HotSwapTestHelper.__version__;
+import static org.junit.Assert.*;
+
+/**
+ * Smallest test case for a hierarchy swap. A<B is changed to B<A.
+ *
+ * @author Thomas Wuerthinger
+ */
+@Ignore
+public class HierarchySwapTest {
+
+ // Version 0
+ public static class A {
+
+ public int value() {
+ return 1;
+ }
+ }
+
+ public static class B extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class C {
+
+ public boolean doInstanceCheckA(Object o) {
+ return o instanceof A;
+ }
+
+ public boolean doInstanceCheckB(Object o) {
+ return o instanceof B;
+ }
+ }
+
+ public static class Base {
+
+ public String className() {
+ return "Base";
+ }
+ }
+
+ public static class D extends Base {
+
+ @Override
+ public String className() {
+ return "D";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class E extends Base {
+
+ @Override
+ public String className() {
+ return "E";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class F extends Base {
+
+ @Override
+ public String className() {
+ return "F";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ // Version 1
+ public static class A___1 extends B___1 {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class B___1 {
+
+ public int value() {
+ return 4;
+ }
+ }
+
+ public static class C___1 {
+
+ public boolean doInstanceCheckA(Object o) {
+ return o instanceof A;
+ }
+
+ public boolean doInstanceCheckB(Object o) {
+ return o instanceof B;
+ }
+ }
+
+ // Version 2
+ public static class D___2 extends Base {
+
+ @Override
+ public String className() {
+ return "D";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class E___2 extends D {
+
+ @Override
+ public String className() {
+ return "E";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class F___2 extends E {
+
+ @Override
+ public String className() {
+ return "F";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ // Version 3
+ public static class D___3 extends E {
+
+ @Override
+ public String className() {
+ return "D";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class E___3 extends F {
+
+ @Override
+ public String className() {
+ return "E";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class F___3 extends Base {
+
+ @Override
+ public String className() {
+ return "F";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ // Version 4
+ public static class D___4 extends E {
+
+ @Override
+ public String className() {
+ return "D";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class E___4 extends Base {
+
+ @Override
+ public String className() {
+ return "E";
+ }
+
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ public static class F___4 extends E {
+
+ @Override
+ public String className() {
+ return "F";
+ }
+
+ @Override
+ public String superClassName() {
+ return super.className();
+ }
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ @Test
+ public void testHierarchySwap() {
+
+ assert __version__() == 0;
+
+ A a = new A();
+ B b = new B();
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(b.getClass().getSuperclass().equals(A.class));
+ assertFalse(a.getClass().getSuperclass().equals(B.class));
+
+ __toVersion__(1);
+
+ assertEquals(8, a.value());
+ assertEquals(4, b.value());
+ assertFalse(b.getClass().getSuperclass().equals(A.class));
+ assertTrue(a.getClass().getSuperclass().equals(B.class));
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(b.getClass().getSuperclass().equals(A.class));
+ assertFalse(a.getClass().getSuperclass().equals(B.class));
+ }
+
+ @Test
+ public void testHierarchySwapWithInstanceOfTest() {
+
+ assert __version__() == 0;
+
+ A a = new A();
+ B b = new B();
+ C c = new C();
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(c.doInstanceCheckA(b));
+ assertFalse(c.doInstanceCheckB(a));
+
+ __toVersion__(1);
+
+ assertEquals(8, a.value());
+ assertEquals(4, b.value());
+ assertFalse(c.doInstanceCheckA(b));
+ assertTrue(c.doInstanceCheckB(a));
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(c.doInstanceCheckA(b));
+ assertFalse(c.doInstanceCheckB(a));
+ }
+
+ @Test
+ public void testHierarchySwapWithInstanceOf() {
+
+ assert __version__() == 0;
+
+ A a = new A();
+ B b = new B();
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(b instanceof A);
+ assertFalse(a instanceof B);
+
+ __toVersion__(1);
+
+ assertEquals(8, a.value());
+ assertEquals(4, b.value());
+ assertFalse(b instanceof A);
+ assertTrue(a instanceof B);
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertTrue(b instanceof A);
+ assertFalse(a instanceof B);
+ }
+
+ @Test
+ public void testTripleSwap() {
+
+
+ assert __version__() == 0;
+
+ D d = new D();
+ E e = new E();
+ F f = new F();
+
+ assertEquals(d.superClassName(), "Base");
+ assertEquals(e.superClassName(), "Base");
+ assertEquals(f.superClassName(), "Base");
+
+ __toVersion__(2);
+
+ assertEquals(d.superClassName(), "Base");
+ assertEquals(e.superClassName(), "D");
+ assertEquals(f.superClassName(), "E");
+
+ __toVersion__(3);
+
+ assertEquals(d.superClassName(), "E");
+ assertEquals(e.superClassName(), "F");
+ assertEquals(f.superClassName(), "Base");
+
+ __toVersion__(4);
+
+ assertEquals(d.superClassName(), "E");
+ assertEquals(e.superClassName(), "Base");
+ assertEquals(f.superClassName(), "E");
+
+ __toVersion__(3);
+
+ assertEquals(d.superClassName(), "E");
+ assertEquals(e.superClassName(), "F");
+ assertEquals(f.superClassName(), "Base");
+
+ __toVersion__(2);
+
+ assertEquals(d.superClassName(), "Base");
+ assertEquals(e.superClassName(), "D");
+ assertEquals(f.superClassName(), "E");
+
+ __toVersion__(0);
+
+ assertEquals(d.superClassName(), "Base");
+ assertEquals(e.superClassName(), "Base");
+ assertEquals(f.superClassName(), "Base");
+ }
+}
diff --git a/dcevm/src/test/java7/com/github/dcevm/test/structural/LargeHierarchyTest.java b/dcevm/src/test/java7/com/github/dcevm/test/structural/LargeHierarchyTest.java
index 67905d31..5f1d1ef3 100644
--- a/dcevm/src/test/java7/com/github/dcevm/test/structural/LargeHierarchyTest.java
+++ b/dcevm/src/test/java7/com/github/dcevm/test/structural/LargeHierarchyTest.java
@@ -1,296 +1,296 @@
-/*
- * 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.structural;
-
-import com.github.dcevm.test.category.Full;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-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 that modify a large class hierarchy with the classes A, B, C, D, E, and F.
- *
- * @author Thomas Wuerthinger
- */
-@Category(Full.class)
-public class LargeHierarchyTest {
-
- private A a = new A();
- private B b = new B();
- private C c = new C();
- private D d = new D();
- private E e = new E();
- private F f = new F();
-
- @Before
- public void setUp() throws Exception {
- __toVersion__(0);
- }
-
- // Version 0
- public static class A {
-
- public int value() {
- return 1;
- }
- }
-
- public static class B extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class C extends B {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class D extends C {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class E extends D {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class F extends E {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- // Version 1
- public static class A___1 {
-
- public int value() {
- return 2;
- }
- }
-
- // Version 2
- // D - E - F
- // /
- // A - B - C
- public static class D___2 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- // Version 3
- // D
- // /
- // A - B - C - E - F
- public static class D___3 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class E___3 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- // Version 4
- // Completely flat
- public static class C___4 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class D___4 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class E___4 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- public static class F___4 extends A {
-
- @Override
- public int value() {
- return super.value() * 2;
- }
- }
-
- // Version 5
- public static class F___5 extends E {
-
- @Override
- public int value() {
- return 0;
- }
- }
-
- @Test
- public void testChangeBaseClass() {
-
- assert __version__() == 0;
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
-
- __toVersion__(1);
-
- assertEquals(2, a.value());
- assertEquals(4, b.value());
- assertEquals(8, c.value());
- assertEquals(16, d.value());
- assertEquals(32, e.value());
- assertEquals(64, f.value());
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
- }
-
- @Test
- public void testChangeSubClass() {
- assert __version__() == 0;
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
-
- __toVersion__(5);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(0, f.value());
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
- }
-
- @Test
- public void testChangeHierarchy() {
-
- assert __version__() == 0;
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
-
- __toVersion__(2);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(2, d.value());
- assertEquals(4, e.value());
- assertEquals(8, f.value());
-
- __toVersion__(3);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(2, d.value());
- assertEquals(2, e.value());
- assertEquals(4, f.value());
-
- __toVersion__(4);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(2, c.value());
- assertEquals(2, d.value());
- assertEquals(2, e.value());
- assertEquals(2, f.value());
-
- __toVersion__(0);
-
- assertEquals(1, a.value());
- assertEquals(2, b.value());
- assertEquals(4, c.value());
- assertEquals(8, d.value());
- assertEquals(16, e.value());
- assertEquals(32, f.value());
- }
-}
+/*
+ * 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.structural;
+
+import com.github.dcevm.test.category.Full;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+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 that modify a large class hierarchy with the classes A, B, C, D, E, and F.
+ *
+ * @author Thomas Wuerthinger
+ */
+@Category(Full.class)
+public class LargeHierarchyTest {
+
+ private A a = new A();
+ private B b = new B();
+ private C c = new C();
+ private D d = new D();
+ private E e = new E();
+ private F f = new F();
+
+ @Before
+ public void setUp() throws Exception {
+ __toVersion__(0);
+ }
+
+ // Version 0
+ public static class A {
+
+ public int value() {
+ return 1;
+ }
+ }
+
+ public static class B extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class C extends B {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class D extends C {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class E extends D {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class F extends E {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ // Version 1
+ public static class A___1 {
+
+ public int value() {
+ return 2;
+ }
+ }
+
+ // Version 2
+ // D - E - F
+ // /
+ // A - B - C
+ public static class D___2 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ // Version 3
+ // D
+ // /
+ // A - B - C - E - F
+ public static class D___3 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class E___3 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ // Version 4
+ // Completely flat
+ public static class C___4 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class D___4 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class E___4 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ public static class F___4 extends A {
+
+ @Override
+ public int value() {
+ return super.value() * 2;
+ }
+ }
+
+ // Version 5
+ public static class F___5 extends E {
+
+ @Override
+ public int value() {
+ return 0;
+ }
+ }
+
+ @Test
+ public void testChangeBaseClass() {
+
+ assert __version__() == 0;
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+
+ __toVersion__(1);
+
+ assertEquals(2, a.value());
+ assertEquals(4, b.value());
+ assertEquals(8, c.value());
+ assertEquals(16, d.value());
+ assertEquals(32, e.value());
+ assertEquals(64, f.value());
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+ }
+
+ @Test
+ public void testChangeSubClass() {
+ assert __version__() == 0;
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+
+ __toVersion__(5);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(0, f.value());
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+ }
+
+ @Test
+ public void testChangeHierarchy() {
+
+ assert __version__() == 0;
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+
+ __toVersion__(2);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(2, d.value());
+ assertEquals(4, e.value());
+ assertEquals(8, f.value());
+
+ __toVersion__(3);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(2, d.value());
+ assertEquals(2, e.value());
+ assertEquals(4, f.value());
+
+ __toVersion__(4);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(2, c.value());
+ assertEquals(2, d.value());
+ assertEquals(2, e.value());
+ assertEquals(2, f.value());
+
+ __toVersion__(0);
+
+ assertEquals(1, a.value());
+ assertEquals(2, b.value());
+ assertEquals(4, c.value());
+ assertEquals(8, d.value());
+ assertEquals(16, e.value());
+ assertEquals(32, f.value());
+ }
+}