diff options
author | Ivan Dubrov <idubrov@guidewire.com> | 2014-04-25 14:58:20 -0700 |
---|---|---|
committer | Ivan Dubrov <idubrov@guidewire.com> | 2014-04-25 14:58:36 -0700 |
commit | f03a441e45e867ffe84c99b01ccb16dbf9968c05 (patch) | |
tree | a2569faab2b7b3fef6a1f378c9b50855bb99d4f8 | |
parent | 346ce86807322ceee5ca415bf13b26736ddb21c9 (diff) | |
download | dcevm-f03a441e45e867ffe84c99b01ccb16dbf9968c05.tar.gz dcevm-f03a441e45e867ffe84c99b01ccb16dbf9968c05.zip |
Fixing line encoding
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()); + } +} |