blob: 84ff320e0852e6981fdab4fe472e4dbb7c302798 [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2013 GK Software AG.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Stephan Herrmann - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otdt.tests.otjld.regression;
import junit.framework.Test;
import org.eclipse.objectteams.otdt.tests.otjld.AbstractOTJLDTest;
public class ComplexStructures extends AbstractOTJLDTest {
public ComplexStructures(String name) {
super(name);
}
// Static initializer to specify tests subset using TESTS_* static variables
// All specified tests which do not belong to the class are skipped...
static {
// TESTS_NAMES = new String[] { "testBug391876"};
// TESTS_NUMBERS = new int[] { 1459 };
// TESTS_RANGE = new int[] { 1097, -1 };
}
public static Test suite() {
return buildComparableTestSuite(testClass());
}
public static Class testClass() {
return ComplexStructures.class;
}
public void testRoleCtor01() {
runConformTest(
new String[] {
"SomeTeam.java",
"public team class SomeTeam {\n" +
"\n" +
" public class BGraph {\n" +
" public BGraph() { }\n" +
" }\n" +
"\n" +
"\n" +
" public void test() {\n" +
" final Features f = new Features();\n" +
" BasicGraph<@f> g3 = f.newBasicGraphException();\n" +
" g3.print();\n" +
" }\n" +
"\n" +
" public team class Features {\n" +
" protected BasicGraph newBasicGraphException() {\n" +
" return new BasicGraph();\n" +
" }\n" +
"\n" +
" public team class BasicGraph playedBy BGraph {\n" +
" public BasicGraph() { base(); }\n" +
"\n" +
" public void print() {\n" +
" System.out.println(\"I am a basic graph ...\");\n" +
" }\n" +
" }\n" +
" }\n" +
"\n" +
" public static void main(String[] args) {\n" +
" new SomeTeam().test();\n" +
" }\n" +
"}\n"
},
"I am a basic graph ...");
}
public void testMultiLevelSuper1() {
runConformTest(
new String[] {
"t/M.java",
"package t;\n" +
"import p.*;\n" +
"public class M {\n" +
" public static void main(String... args) {\n" +
" new Team1().activate();\n" +
" new Base4().m(5);\n" +
" new Base4().m(0);\n" +
" }\n" +
"}\n",
"p/Base0.java",
"package p;\n" +
"public class Base0 {\n" +
" public void m(int i) {\n" +
" System.out.println(\"Base0.m()\");\n" +
" }\n" +
"}\n",
"p/Base1.java",
"package p;\n" +
"public class Base1 extends Base0 {\n" +
" public void m(int i) {\n" +
" if (i != 1)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"p/Base2.java",
"package p;\n" +
"public class Base2 extends Base1 {\n" +
" public void m(int i) {\n" +
" if (i != 2)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"p/Base3.java",
"package p;\n" +
"public class Base3 extends Base2 {\n" +
" public void m(int i) {\n" +
" if (i != 3)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"p/Base4.java",
"package p;\n" +
"public class Base4 extends Base3 {\n" +
" public void m(int i) {\n" +
" if (i != 4)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"t/Team0.java",
"package t;\n" +
"import base p.Base1;\n" +
"import base p.Base3;\n" +
"public team class Team0 {\n" +
" protected class R0 playedBy Base1 {\n" +
" }\n" +
" protected class R1 extends R0 playedBy Base3 { }\n" +
"}\n",
"t/Team1.java",
"package t;\n" +
"import base p.Base4;\n" +
"public team class Team1 extends Team0 {\n" +
" protected class R2 extends R1 playedBy Base4 {\n" +
" void q(int i) <- replace void m(int i) base when (i == 5);\n" +
" callin void q(int i) {\n" +
" System.out.println(\"Role\");\n" +
" }\n" +
" }\n" +
"}\n",
},
"Role\nBase0.m()");
}
public void testMultiLevelSuper2() {
myWriteFiles(new String[] {"weavable.txt", "weavable.\nt\n"});
runConformTest(
new String[] {
"t/M.java",
"package t;\n" +
"import weavable.*;\n" +
"public class M {\n" +
" public static void main(String... args) {\n" +
" new Team1().activate();\n" +
" new Base4().m(5);\n" +
" new Base4().m(0);\n" +
" }\n" +
"}\n",
"unweavable/Base0.java",
"package unweavable;\n" +
"public class Base0 {\n" +
" public void m(int i) {\n" +
" System.out.println(\"Base0.m()\");\n" +
" }\n" +
"}\n",
"weavable/Base1.java",
"package weavable;\n" +
"public class Base1 extends unweavable.Base0 {\n" +
" public void m(int i) {\n" +
" if (i != 1)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"unweavable/Base2.java",
"package unweavable;\n" +
"public class Base2 extends weavable.Base1 {\n" +
" public void m(int i) {\n" +
" if (i != 2)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"weavable/Base3.java",
"package weavable;\n" +
"public class Base3 extends unweavable.Base2 {\n" +
" public void m(int i) {\n" +
" if (i != 3)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"weavable/Base4.java",
"package weavable;\n" +
"public class Base4 extends Base3 {\n" +
" public void m(int i) {\n" +
" if (i != 4)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"t/Team0.java",
"package t;\n" +
"import base weavable.Base1;\n" +
"import base weavable.Base3;\n" +
"public team class Team0 {\n" +
" protected class R0 playedBy Base1 {\n" +
" }\n" +
" protected class R1 extends R0 playedBy Base3 { }\n" +
"}\n",
"t/Team1.java",
"package t;\n" +
"import base weavable.Base4;\n" +
"public team class Team1 extends Team0 {\n" +
" protected class R2 extends R1 playedBy Base4 {\n" +
" void q(int i) <- replace void m(int i) base when (i == 5);\n" +
" callin void q(int i) {\n" +
" System.out.println(\"Role\");\n" +
" }\n" +
" }\n" +
"}\n",
},
"Role\nBase0.m()",
null,
false,
new String[] { "-Dot.weavable="+this.outputTestDirectory+"/weavable.txt" });
}
public void testMultiLevelSuper3() {
myWriteFiles(new String[] {"weavable.txt", "weavable.\nt\n"});
runConformTest(
new String[] {
"t/M.java",
"package t;\n" +
"import weavable.*;\n" +
"public class M {\n" +
" public static void main(String... args) {\n" +
" new Team1().activate();\n" +
" new Base6().m(5);\n" +
" new Base6().m(0);\n" +
" }\n" +
"}\n",
"unweavable/Base0.java",
"package unweavable;\n" +
"public class Base0 {\n" +
" public void m(int i) {\n" +
" System.out.println(\"Base0.m()\");\n" +
" }\n" +
"}\n",
"weavable/Base1.java",
"package weavable;\n" +
"public class Base1 extends unweavable.Base0 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 1)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"weavable/Base2.java",
"package weavable;\n" +
"public class Base2 extends Base1 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 2)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"unweavable/Base3.java",
"package unweavable;\n" +
"public class Base3 extends weavable.Base2 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 3)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"unweavable/Base4.java",
"package unweavable;\n" +
"public class Base4 extends Base3 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 4)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"weavable/Base5.java",
"package weavable;\n" +
"public class Base5 extends unweavable.Base4 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 5)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"weavable/Base6.java",
"package weavable;\n" +
"public class Base6 extends Base5 {\n" +
" @Override\n" +
" public void m(int i) {\n" +
" if (i != 6)\n" +
" super.m(i);\n" +
" }\n" +
"}\n",
"t/Team0.java",
"package t;\n" +
"import base weavable.Base1;\n" +
"import base weavable.Base5;\n" +
"public team class Team0 {\n" +
" protected class R0 playedBy Base1 {\n" +
" }\n" +
" protected class R1 extends R0 playedBy Base5 { }\n" +
"}\n",
"t/Team1.java",
"package t;\n" +
"import base weavable.Base6;\n" +
"public team class Team1 extends Team0 {\n" +
" protected class R2 extends R1 playedBy Base6 {\n" +
" void q(int i) <- replace void m(int i) base when (i == 5);\n" +
" callin void q(int i) {\n" +
" System.out.println(\"Role\");\n" +
" }\n" +
" }\n" +
"}\n",
},
"Role\nBase0.m()",
null,
false,
new String[] { "-Dot.weavable="+this.outputTestDirectory+"/weavable.txt" });
}
}