blob: 4364d81a8d0b5ccbd13308e2e871a6af74cd90ab [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Development Tooling"-Software
*
* Copyright 2010 Stephan Herrmann
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* $Id$
*
* 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.rolesandteams;
import org.eclipse.objectteams.otdt.tests.otjld.AbstractOTJLDTest;
import junit.framework.Test;
public class TeamNesting extends AbstractOTJLDTest {
public TeamNesting(String name) {
super(name);
}
// Static initializer to specify tests subset using TESTS_* static variables
// All specified tests which does not belong to the class are skipped...
static {
// TESTS_NAMES = new String[] { "test1115_nestedTeamExtendsRegularTeam1", "test1122_layeredTeams1"};
// TESTS_NUMBERS = new int[] { 1459 };
// TESTS_RANGE = new int[] { 1097, -1 };
}
public static Test suite() {
return buildComparableTestSuite(testClass());
}
public static Class testClass() {
return TeamNesting.class;
}
// a role inherits features from all possible super roles within nested teams - one level only
// 1.1.10-otjld-full-inheritance-structure-1
public void test1110_fullInheritanceStructure1() {
runConformTest(
new String[] {
"T1110fis1.java",
"\n" +
"public class T1110fis1 {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis1_1 t = new Team1110fis1_1();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis1_1.java",
"\n" +
"public team class Team1110fis1_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" public void m8() {\n" +
" System.out.print(\"11\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"12\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"12\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"12\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"12\");\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" System.out.print(\"R1:\");\n" +
" dotests(new R1());\n" +
" System.out.print(\"R2:\");\n" +
" dotests(new R2());\n" +
" }\n" +
" void dotests(R1 r) {\n" +
" r.m1();\n" +
" r.m2();\n" +
" r.m3();\n" +
" r.m4();\n" +
" r.m5();\n" +
" r.m6();\n" +
" r.m7();\n" +
" r.m8();\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"21\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"21\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"21\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"21\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"22\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"22\");\n" +
" }\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid1 m = new Mid1();\n" +
" System.out.print(\"-M1\");\n" +
" m.test();\n" +
" m = new Mid2();\n" +
" System.out.print(\"-M2\");\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"-M1R1:1111111111111111R2:1212121211111111-M2R1:2121111121211111R2:2222121221211111");
}
// a role inherits features from all possible super roles within nested teams - one compilation
// 1.1.10-otjld-full-inheritance-structure-2
public void test1110_fullInheritanceStructure2() {
runConformTest(
new String[] {
"T1110fis2.java",
"\n" +
"public class T1110fis2 {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis2_2 t = new Team1110fis2_2();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis2_2.java",
"\n" +
"public team class Team1110fis2_2 extends Team1110fis2_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" }\n" +
" public class R2 {\n" +
" public void m1() {\n" +
" System.out.print(\"212\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"212\");\n" +
" } \n" +
" }\n" +
" }\n" +
" public team class Mid2 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"222\");\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis2_1.java",
"\n" +
"public team class Team1110fis2_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m8() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" System.out.print(\"R1:\");\n" +
" dotests(new R1());\n" +
" System.out.print(\"R2:\");\n" +
" dotests(new R2());\n" +
" }\n" +
" void dotests(R1 r) {\n" +
" r.m1();System.out.print(\".\");\n" +
" r.m2();System.out.print(\".\");\n" +
" r.m3();System.out.print(\".\");\n" +
" r.m4();System.out.print(\".\");\n" +
" r.m5();System.out.print(\".\");\n" +
" r.m6();System.out.print(\".\");\n" +
" r.m7();System.out.print(\".\");\n" +
" r.m8();System.out.print(\".\");\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid1 m = new Mid1();\n" +
" System.out.print(\"-M1\");\n" +
" m.test();\n" +
" m = new Mid2();\n" +
" System.out.print(\"-M2\");\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"-M1R1:211.111.211.111.211.111.211.111.R2:212.112.212.112.211.111.211.111.-M2R1:221.121.211.111.221.121.211.111.R2:222.122.212.112.221.121.211.111.");
}
// a role inherits features from all possible super roles within nested teams - separate compilation
// 1.1.10-otjld-full-inheritance-structure-3
public void test1110_fullInheritanceStructure3() {
runConformTest(
new String[] {
"T1110fis3.java",
"\n" +
"public class T1110fis3 {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis3_2 t = new Team1110fis3_2();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis3_1.java",
"\n" +
"public team class Team1110fis3_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m8() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" System.out.print(\"R1:\");\n" +
" dotests(new R1());\n" +
" System.out.print(\"R2:\");\n" +
" dotests(new R2());\n" +
" }\n" +
" void dotests(R1 r) {\n" +
" r.m1();System.out.print(\".\");\n" +
" r.m2();System.out.print(\".\");\n" +
" r.m3();System.out.print(\".\");\n" +
" r.m4();System.out.print(\".\");\n" +
" r.m5();System.out.print(\".\");\n" +
" r.m6();System.out.print(\".\");\n" +
" r.m7();System.out.print(\".\");\n" +
" r.m8();System.out.print(\".\");\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid1 m = new Mid1();\n" +
" System.out.print(\"-M1\");\n" +
" m.test();\n" +
" m = new Mid2();\n" +
" System.out.print(\"-M2\");\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis3_2.java",
"\n" +
"public team class Team1110fis3_2 extends Team1110fis3_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" }\n" +
" public class R2 {\n" +
" public void m1() {\n" +
" System.out.print(\"212\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"212\");\n" +
" } \n" +
" }\n" +
" }\n" +
" public team class Mid2 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"222\");\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"-M1R1:211.111.211.111.211.111.211.111.R2:212.112.212.112.211.111.211.111.-M2R1:221.121.211.111.221.121.211.111.R2:222.122.212.112.221.121.211.111.");
}
// a role inherits features from all possible super roles within nested teams - more combinations - separate compilation
// 1.1.10-otjld-full-inheritance-structure-4
public void test1110_fullInheritanceStructure4() {
runConformTest(
new String[] {
"T1110fis4.java",
"\n" +
"public class T1110fis4 {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis4_2 t = new Team1110fis4_2();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis4_1.java",
"\n" +
"public team class Team1110fis4_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m5() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" public void m8() {\n" +
" System.out.print(\"111\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m4() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" public void m8() {\n" +
" System.out.print(\"112\");\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m3() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"121\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m2() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" public void m6() {\n" +
" System.out.print(\"122\");\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis4_2.java",
"\n" +
"public team class Team1110fis4_2 extends Team1110fis4_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m6() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" public void m7() {\n" +
" System.out.print(\"211\");\n" +
" }\n" +
" }\n" +
" public class R2 {\n" +
" public void m1() {\n" +
" System.out.print(\"212\");\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 {\n" +
" public class R1 {\n" +
" public void m1() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m2() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m3() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m4() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" public void m5() {\n" +
" System.out.print(\"221\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" }\n" +
" void dotests(R1 r) {\n" +
" r.m1();System.out.print(\".\");\n" +
" r.m2();System.out.print(\".\");\n" +
" r.m3();System.out.print(\".\");\n" +
" r.m4();System.out.print(\".\");\n" +
" r.m5();System.out.print(\".\");\n" +
" r.m6();System.out.print(\".\");\n" +
" r.m7();System.out.print(\".\");\n" +
" r.m8();System.out.print(\".\");\n" +
" }\n" +
" protected void test() {\n" +
" System.out.print(\"R1:\");\n" +
" dotests(new R1());\n" +
" System.out.print(\"R2:\");\n" +
" dotests(new R2());\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid2 m = new Mid2();\n" +
" System.out.print(\"-M2\");\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"-M2R1:221.221.221.221.221.211.121.111.R2:212.122.221.112.221.122.121.112.");
}
// a role inherits features from all possible super roles within nested teams - super and tsuper tree (note, that some of these are re-bound, so full tree is not possible.
// 1.1.10-otjld-full-inheritance-structure-5
public void test1110_fullInheritanceStructure5() {
runConformTest(
new String[] {
"T1110fis5.java",
"\n" +
"public class T1110fis5 {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis5_2 t = new Team1110fis5_2();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis5_1.java",
"\n" +
"public team class Team1110fis5_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"111.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"112.\");\n" +
" super.m();\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"121.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"122.\");\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis5_2.java",
"\n" +
"public team class Team1110fis5_2 extends Team1110fis5_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"211.\");\n" +
" }\n" +
" }\n" +
" public class R2 {\n" +
" public void m() {\n" +
" System.out.print(\"212.\");\n" +
" tsuper.m();\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"221.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"222.\");\n" +
" tsuper.m();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" R2 r = new R2();\n" +
" r.m();\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid2 m = new Mid2();\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"222.122.");
}
// a role inherits features from all possible super roles within nested teams - super and tsuper tree (note, that some of these are re-bound, so full tree is not possible.
// use qualified tsuper to achieve order of old tsuper-precedence (pre 0.8M3)
// 1.1.10-otjld-full-inheritance-structure-5
public void test1110_fullInheritanceStructure5a() {
runConformTest(
new String[] {
"T1110fis5a.java",
"\n" +
"public class T1110fis5a {\n" +
" public static void main(String[] args) {\n" +
" Team1110fis5a_2 t = new Team1110fis5a_2();\n" +
" t.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis5a_1.java",
"\n" +
"public team class Team1110fis5a_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"111.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"112.\");\n" +
" super.m();\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 extends Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"121.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"122.\");\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1110fis5a_2.java",
"\n" +
"public team class Team1110fis5a_2 extends Team1110fis5a_1 {\n" +
" public team class Mid1 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"211.\");\n" +
" }\n" +
" }\n" +
" public class R2 {\n" +
" public void m() {\n" +
" System.out.print(\"212.\");\n" +
" tsuper.m();\n" +
" }\n" +
" }\n" +
" }\n" +
" public team class Mid2 {\n" +
" public class R1 {\n" +
" public void m() {\n" +
" System.out.print(\"221.\");\n" +
" }\n" +
" }\n" +
" public class R2 extends R1 {\n" +
" public void m() {\n" +
" System.out.print(\"222.\");\n" +
" Mid2.tsuper.m();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" R2 r = new R2();\n" +
" r.m();\n" +
" }\n" +
" }\n" +
" public void test () {\n" +
" Mid2 m = new Mid2();\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"222.212.112.221.");
}
// A role inherits callin bindings from several tsuper classes
// 1.1.11-otjld-role-inherits-callin-from-tsupers-1
public void test1111_roleInheritsCallinFromTsupers1() {
runConformTest(
new String[] {
"Team1111ricft1_2.java",
"\n" +
"public team class Team1111ricft1_2 extends Team1111ricft1_1 {\n" +
" protected abstract team class Mid1 {\n" +
" protected abstract class R {\n" +
" void print3() { System.out.print(\"!\"); }\n" +
" print3 <- after test3;\n" +
" }\n" +
" }\n" +
" protected team class Mid2 { // not abstract\n" +
" protected class R {} // not abstract\n" +
" }\n" +
" Team1111ricft1_2() {\n" +
" Mid2 m = new Mid2();\n" +
" m.activate();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1111ricft1_2();\n" +
" T1111ricft1 b = new T1111ricft1();\n" +
" b.test1();\n" +
" b.test2();\n" +
" b.test3();\n" +
" }\n" +
"}\n" +
" \n",
"T1111ricft1.java",
"\n" +
"public class T1111ricft1 {\n" +
" public void test1() {}\n" +
" public void test2() {}\n" +
" public void test3() {}\n" +
"}\n" +
" \n",
"Team1111ricft1_1.java",
"\n" +
"public team class Team1111ricft1_1 {\n" +
" protected abstract team class Mid1 {\n" +
" protected abstract class R playedBy T1111ricft1 {\n" +
" abstract void print1();\n" +
" print1 <- before test1;\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void print1() { System.out.print(\"O\"); }\n" +
" void print2() { System.out.print(\"K\"); }\n" +
" print2 <- after test2;\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK!");
}
// A role inherits named callin bindings from several tsuper classes
// 1.1.11-otjld-role-inherits-callin-from-tsupers-2
public void test1111_roleInheritsCallinFromTsupers2() {
runConformTest(
new String[] {
"Team1111ricft2_2.java",
"\n" +
"public team class Team1111ricft2_2 extends Team1111ricft2_1 {\n" +
" protected abstract team class Mid1 {\n" +
" protected abstract class R {\n" +
" void print3() { System.out.print(\"!\"); }\n" +
" c3: print3 <- after test3;\n" +
" }\n" +
" }\n" +
" protected team class Mid2 { // not abstract\n" +
" protected class R {} // not abstract\n" +
" }\n" +
" Team1111ricft2_2() {\n" +
" Mid2 m = new Mid2();\n" +
" m.activate();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1111ricft2_2();\n" +
" T1111ricft2 b = new T1111ricft2();\n" +
" b.test1();\n" +
" b.test2();\n" +
" b.test3();\n" +
" }\n" +
"}\n" +
" \n",
"T1111ricft2.java",
"\n" +
"public class T1111ricft2 {\n" +
" public void test1() {}\n" +
" public void test2() {}\n" +
" public void test3() {}\n" +
"}\n" +
" \n",
"Team1111ricft2_1.java",
"\n" +
"public team class Team1111ricft2_1 {\n" +
" protected abstract team class Mid1 {\n" +
" protected abstract class R playedBy T1111ricft2 {\n" +
" abstract void print1();\n" +
" c1: print1 <- before test1;\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void print1() { System.out.print(\"O\"); }\n" +
" void print2() { System.out.print(\"K\"); }\n" +
" c2: print2 <- after test2;\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK!");
}
// a nested team overrides a regular role
// 1.1.12-otjld-team-overrides-regular-1
public void test1112_teamOverridesRegular1() {
runConformTest(
new String[] {
"Team1112tor1_2.java",
"\n" +
"public team class Team1112tor1_2 extends Team1112tor1_1 {\n" +
" protected team class R {\n" +
" protected class InnerR {\n" +
" protected void test() {\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" tsuper.test();\n" +
" InnerR ir = new InnerR();\n" +
" ir.test();\n" +
" }\n" +
" }\n" +
" Team1112tor1_2() {\n" +
" test();\n" +
" }\n" +
" public static void main (String[] args) {\n" +
" new Team1112tor1_2();\n" +
" }\n" +
"}\n" +
" \n",
"Team1112tor1_1.java",
"\n" +
"public team class Team1112tor1_1 {\n" +
" protected class R {\n" +
" protected void test() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
" }\n" +
" void test() {\n" +
" R r = new R();\n" +
" r.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a regular role tries to override a team role
// 1.1.13-otjld-regular-overrides-team
public void test1113_regularOverridesTeam() {
runNegativeTestMatching(
new String[] {
"Team1113rot_2.java",
"\n" +
"public team class Team1113rot_2 extends Team1113rot_1 {\n" +
" protected class R {}\n" +
"}\n" +
" \n",
"Team1113rot_1.java",
"\n" +
"public team class Team1113rot_1 {\n" +
" protected team class R {}\n" +
"}\n" +
" \n"
},
"1.5(a)");
}
// simple tsuper is used to select the closest version among different tsupers in a nested team
// 1.1.14-otjld-tsuper-in-nested-1
public void test1114_tsuperInNested1() {
runConformTest(
new String[] {
"Team1114tin1_2.java",
"\n" +
"public team class Team1114tin1_2 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" protected void test() {\n" +
" tsuper.test();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" R r = new R();\n" +
" r.test();\n" +
" }\n" +
" }\n" +
" public Team1114tin1_2() {\n" +
" Mid2 m = new Mid2();\n" +
" m.test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1114tin1_2();\n" +
" }\n" +
"} \n" +
" \n",
"Team1114tin1_1.java",
"\n" +
"public team class Team1114tin1_1 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK1\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK2\");\n" +
" }\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"OK");
}
// qualified tsuper is used to select the closest version among different tsupers in a nested team
// 1.1.14-otjld-tsuper-in-nested-1a
public void test1114_tsuperInNested1a() {
runConformTest(
new String[] {
"Team1114tin1a_2.java",
"\n" +
"public team class Team1114tin1a_2 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" protected void test() {\n" +
" Mid2.tsuper.test();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" R r = new R();\n" +
" r.test();\n" +
" }\n" +
" }\n" +
" public Team1114tin1a_2() {\n" +
" Mid2 m = new Mid2();\n" +
" m.test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1114tin1a_2();\n" +
" }\n" +
"} \n" +
" \n",
"Team1114tin1a_1.java",
"\n" +
"public team class Team1114tin1a_1 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK1\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK2\");\n" +
" }\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"OK");
}
// qualified tsuper is used to select a version among different tsupers in a nested team
// 1.1.14-otjld-tsuper-in-nested-2
public void test1114_tsuperInNested2() {
runConformTest(
new String[] {
"Team1114tin2_2.java",
"\n" +
"public team class Team1114tin2_2 extends Team1114tin2_1 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK2\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" Team1114tin2_2.tsuper.test();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" R r = new R();\n" +
" r.test();\n" +
" }\n" +
" }\n" +
" public Team1114tin2_2() {\n" +
" Mid2 m = new Mid2();\n" +
" m.test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1114tin2_2();\n" +
" }\n" +
"} \n" +
" \n",
"Team1114tin2_1.java",
"\n" +
"public team class Team1114tin2_1 {\n" +
" protected team class Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"NOTOK1\");\n" +
" }\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 {\n" +
" protected class R {\n" +
" void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"OK");
}
// a nested team extends a toplevel team, role signature contains role
// 1.1.15-otjld-nested-team-extends-regular-team-1
public void test1115_nestedTeamExtendsRegularTeam1() {
runConformTest(
new String[] {
"Team1115ntert1.java",
"\n" +
"public team class Team1115ntert1 {\n" +
" public team class Team1115ntert1_2 extends Team1115ntert1_1 {\n" +
" protected void test() {\n" +
" R r1 = new R(\"O\");\n" +
" R r2 = new R(\"K\");\n" +
" r1.test(r2);\n" +
" } \n" +
" }\n" +
" public Team1115ntert1 () {\n" +
" Team1115ntert1_2 t = new Team1115ntert1_2();\n" +
" t.test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1115ntert1();\n" +
" }\n" +
"}\n" +
" \n",
"Team1115ntert1_1.java",
"\n" +
"public abstract team class Team1115ntert1_1 {\n" +
" protected class R {\n" +
" protected String val;\n" +
" protected R(String v) {\n" +
" val = v;\n" +
" }\n" +
" protected void test(R other) {\n" +
" System.out.print(val+other.val);\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"OK");
}
// a nested team extends a toplevel team, role signature contains role, constructor not visible
// 1.1.15-otjld-nested-team-extends-regular-team-1
public void test1115_nestedTeamExtendsRegularTeam1f() {
runNegativeTest(
new String[] {
"Team1115ntert1f.java",
"\n" +
"public team class Team1115ntert1f {\n" +
" public team class Team1115ntert1f_2 extends Team1115ntert1f_1 {\n" +
" protected void test() {\n" +
" R r1 = new R(\"O\");\n" +
" R r2 = new R(\"K\");\n" +
" r1.test(r2);\n" +
" } \n" +
" }\n" +
"}\n",
"Team1115ntert1f_1.java",
"\n" +
"public abstract team class Team1115ntert1f_1 {\n" +
" protected class R {\n" +
" protected String val;\n" +
" R(String v) {\n" +
" val = v;\n" +
" }\n" +
" protected void test(R other) {\n" +
" System.out.print(val+other.val);\n" +
" }\n" +
" }\n" +
"}\n"
},
"----------\n" +
"1. ERROR in Team1115ntert1f.java (at line 5)\n" +
" R r1 = new R(\"O\");\n" +
" ^^^^^^^^^^\n" +
"The role constructor Team1115ntert1f.Team1115ntert1f_2.R(String) is not visible (OTJLD 1.2.1(e)).\n" +
"----------\n" +
"2. ERROR in Team1115ntert1f.java (at line 6)\n" +
" R r2 = new R(\"K\");\n" +
" ^^^^^^^^^^\n" +
"The role constructor Team1115ntert1f.Team1115ntert1f_2.R(String) is not visible (OTJLD 1.2.1(e)).\n" +
"----------\n");
}
// A role has incompatible tsuper and ttsuper
// 1.1.16-otjld_testbug-incompatible-tsupers-1
public void _testbug_test1116_incompatibleTsupers1() {
runNegativeTestMatching(
new String[] {
"Team1116it1_1.java",
"\n" +
"public team class Team1116it1_1 {\n" +
" protected team class Mid1 {\n" +
" //protected class R1 {}\n" +
" //protected class R2 extends R1 {}\n" +
" }\n" +
"}\n" +
" \n",
"Team1116it1_2.java",
"\n" +
"public team class Team1116it1_2 extends Team1116it1_1 {\n" +
" protected team class Mid0 {\n" +
" protected class R0 {}\n" +
" //protected class R2 /*extends R0*/ {}\n" +
" }\n" +
" protected team class Mid1 extends Mid0 {\n" +
" protected class R1 extends R0 {}\n" +
" //protected class R2 extends R1 {}\n" +
" }\n" +
"} \n" +
" \n"
},
"1.5(a)");
}
// a nested team has three levels of sub-teams
// 1.1.17-otjld-multilevel-inner-inheritance-1
public void test1117_multilevelInnerInheritance1() {
runConformTest(
new String[] {
"n1117/Team1117mii1.java",
"\n" +
"package n1117;\n" +
"public team class Team1117mii1 {\n" +
" public team class T0 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
" @SuppressWarnings(\"override\")\n" +
" public team class T1 extends T0 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
" @SuppressWarnings(\"override\")\n" +
" public team class T2 extends T1 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
" @SuppressWarnings(\"override\")\n" +
" public team class T3 extends T2 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
"}\n" +
" \n"
});
}
// a nested team has two levels of sub-teams
// 1.1.17-otjld-multilevel-inner-inheritance-2
public void test1117_multilevelInnerInheritance2() {
runConformTest(
new String[] {
"n1117/Team1117mii2.java",
"\n" +
"package n1117;\n" +
"public team class Team1117mii2 {\n" +
" public team class T0 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
" public team class T1 extends T0 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
" public team class T2 extends T1 \n" +
" { \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" } \n" +
"}\n" +
" \n"
});
}
// a nested team has two levels of sub-teams - roles are in role files
// 1.1.17-otjld-multilevel-inner-inheritance-3
public void test1117_multilevelInnerInheritance3() {
myWriteFiles(new String[]{
"n1117/Team1117mii3.java",
"\n" +
"package n1117;\n" +
"public team class Team1117mii3 {\n" +
"}\n"
});
runConformTest(
new String[] {
"n1117/T1117mii3Main.java",
"package n1117;\n" +
"public class T1117mii3Main {\n" +
" public static void main(String... args) {\n" +
" final Team1117mii3 outer = new Team1117mii3();\n" +
" final T1117mii3_2<@outer> inner = new T1117mii3_2<@outer>();\n" +
" System.out.print(inner.new R3());\n" +
" }\n" +
"}\n",
"n1117/Team1117mii3/T1117mii3_2.java",
"\n" +
"team package n1117.Team1117mii3;\n" +
"public team class T1117mii3_2 extends T1117mii3_1 \n" +
"{ \n" +
" @Override\n" +
" public class R1 {} \n" +
" @Override\n" +
" public class R2 {} \n" +
" @Override\n" +
" public class R3 {} \n" +
"} \n" +
" \n",
"n1117/Team1117mii3/T1117mii3_0.java",
"\n" +
"team package n1117.Team1117mii3;\n" +
"public team class T1117mii3_0 \n" +
"{ \n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
"} \n" +
" \n",
"n1117/Team1117mii3/T1117mii3_1.java",
"\n" +
"team package n1117.Team1117mii3;\n" +
"public team class T1117mii3_1 extends T1117mii3_0 \n" +
"{ \n" +
" @Override\n" +
" public class R1 {} \n" +
" @Override\n" +
" public class R2 {} \n" +
" @Override\n" +
" public class R3 {} \n" +
"} \n" +
" \n"
},
null, /*expectedOutput*/
null,/*class libraries*/
false,/*flushOutputDirectory*/
null/*vmarguments*/);
}
// roles introduce extends
// 1.1.18-otjld-role-overrides-extends-1
public void test1118_roleOverridesExtends1() {
runConformTest(
new String[] {
"n1118/Team1118roe1_2.java",
"\n" +
"package n1118;\n" +
"public team class Team1118roe1_2 extends Team1118roe1_1\n" +
"{ \n" +
" public team class T1 {\n" +
" public class R1 {} \n" +
" public class R2 extends R1{} \n" +
" public class R3 {} \n" +
" }\n" +
" public team class T2 extends T1 {\n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" }\n" +
"} \n" +
" \n",
"n1118/Team1118roe1_1.java",
"\n" +
"package n1118;\n" +
"public team class Team1118roe1_1\n" +
"{ \n" +
" public team class T1 {\n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 extends R2 {} \n" +
" }\n" +
" public team class T2 extends T1 {\n" +
" public class R1 {} \n" +
" public class R2 {} \n" +
" public class R3 {} \n" +
" }\n" +
"} \n" +
" \n"
});
}
// roles inherits incompatible "extends"
// was org.eclipse.objectteams.otdt.tests.superhierarchy.OTSuperTypeHierarchyTest013.testGetAllSuperclasses_TA2TB2TC2R1()
public void test1118_roleOverridesExtends2() {
runNegativeTest(
new String[] {
"n1118/Team1118roe2_2.java",
"package n1118;\n" +
"public team class Team1118roe2_2 extends Team1118roe2_1 {\n" +
" @Override\n"+
" public team class TB1 {\n" +
" @Override\n"+
" public team class TC1 {\n" +
" @Override\n"+
" public class R1 {}\n" +
" }\n" +
" @Override\n"+
" public team class TC2 extends TC1 {\n" +
" @Override\n"+
" public class R1 extends C2 {}\n" +
" }\n" +
" }\n" +
" @Override\n"+
" public team class TB2 extends TB1 {\n" +
" @Override\n"+
" public team class TC1 {\n" +
" @Override\n"+
" public class R1 extends C1 {}\n" +
" }\n" +
" @Override\n"+
" public team class TC2 {\n" +
" @Override\n"+
" public class R1 {}\n" +
" }\n" +
" }\n" +
"}",
"n1118/Team1118roe2_1.java",
"package n1118;\n" +
"public team class Team1118roe2_1 {\n" +
" public team class TB1 {\n" +
" public team class TC1 {\n" +
" public class R1 {}\n" +
" }\n" +
" public team class TC2 extends TC1 {\n" +
" @Override\n"+
" public class R1 {}\n" +
" }\n" +
" }\n" +
" public team class TB2 extends TB1 {\n" +
" @Override\n"+
" public team class TC1 {\n" +
" @Override\n"+
" public class R1 {}\n" +
" }\n" +
" @Override\n"+
" public team class TC2 {\n" +
" @Override\n"+
" public class R1 extends C3 {}\n" +
" }\n" +
" }\n" +
"}",
"n1118/C0.java",
"package n1118;\n" +
"public class C0 {}\n",
"n1118/C1.java",
"package n1118;\n" +
"public class C1 extends C0 {}\n",
"n1118/C2.java",
"package n1118;\n" +
"public class C2 extends C0 {}\n",
"n1118/C3.java",
"package n1118;\n" +
"public class C3 extends C0 {}\n",
},
"----------\n" +
"1. ERROR in n1118\\Team1118roe2_2.java (at line 26)\n" +
" public class R1 {}\n" +
" ^^\n" +
"Role inherits incompatible \'extends\' declarations: C1 is not a sub-type of C2 (\'extends C2\' is inherited is from n1118.Team1118roe2_2.TB1.TC2.R1) (OTJLD 1.3.2(b)).\n" +
"----------\n" +
"2. ERROR in n1118\\Team1118roe2_2.java (at line 26)\n" +
" public class R1 {}\n" +
" ^^\n" +
"Role inherits incompatible \'extends\' declarations: C1 is not a sub-type of C3 (\'extends C3\' is inherited is from n1118.Team1118roe2_1.TB2.TC2.R1) (OTJLD 1.3.2(b)).\n" +
"----------\n");
}
// some roles are missing in the lattice of tsuper types
// 1.1.19-otjld-incomplete-tsuper-structure-1
public void test1119_incompleteTsuperStructure1() {
runConformTest(
new String[] {
"Team1119its1_2.java",
"\n" +
"public team class Team1119its1_2 extends Team1119its1_1 {\n" +
" public team class M1 {\n" +
" protected class R2 { \n" +
" void m() { System.out.print(\"R2.m;\"); } \n" +
" }\n" +
" }\n" +
" public team class M2 extends M1 {\n" +
" protected class R3 {\n" +
" protected void m() { System.out.print(\"R3.m;\"); }\n" +
" }\n" +
" protected void run() {\n" +
" (new R1()).m();\n" +
" (new R2()).m();\n" +
" (new R3()).m(); \n" +
" }\n" +
" }\n" +
" public Team1119its1_2() {\n" +
" (new M2()).run();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1119its1_2();\n" +
" }\n" +
"} \n" +
" \n",
"Team1119its1_1.java",
"\n" +
"public team class Team1119its1_1 {\n" +
" public team class M1 {\n" +
" protected class R1 { void m() {} }\n" +
" protected class R2 { void m() {} }\n" +
" protected class R3 { void m() {} }\n" +
" }\n" +
" public team class M2 extends M1 {\n" +
" protected class R1 {\n" +
" void m() { System.out.print(\"R1.m;\"); }\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"R1.m;R2.m;R3.m;");
}
// some roles are missing in the lattice of tsuper types
// 1.1.19-otjld-incomplete-tsuper-structure-2
public void test1119_incompleteTsuperStructure2() {
runConformTest(
new String[] {
"Team1119its2_2.java",
"\n" +
"public team class Team1119its2_2 extends Team1119its2_1 {\n" +
" public team class M1 {\n" +
" protected class R2 { \n" +
" protected void m() { System.out.print(\"R2.m;\"); } \n" +
" }\n" +
" }\n" +
" public team class M2 extends M1 {\n" +
" protected class R3 {\n" +
" protected void m() { System.out.print(\"R3.m;\"); }\n" +
" }\n" +
" protected void run() {\n" +
" (new R1()).m();\n" +
" (new R2()).m();\n" +
" (new R3()).m(); \n" +
" }\n" +
" }\n" +
" public Team1119its2_2() {\n" +
" (new M2()).run();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1119its2_2();\n" +
" }\n" +
"} \n" +
" \n",
"Team1119its2_1.java",
"\n" +
"public team class Team1119its2_1 {\n" +
" public team class M1 {\n" +
" }\n" +
" public team class M2 extends M1 {\n" +
" protected class R1 {\n" +
" protected void m() { System.out.print(\"R1.m;\"); }\n" +
" }\n" +
" }\n" +
"} \n" +
" \n"
},
"R1.m;R2.m;R3.m;");
}
// A team inherits two incomparable roles of the same name
// 1.1.20-otjld-illegal-name-clash-1
public void test1120_illegalNameClash1() {
runNegativeTestMatching(
new String[] {
"Team1120inc1_2.java",
"\n" +
"public team class Team1120inc1_2 extends Team1120inc1_1 {\n" +
" public team class T0 {\n" +
" public class R0 {}\n" +
" public class R1 extends R0 {}\n" +
" }\n" +
" public team class T1 extends T0 {\n" +
" public class R1 {}\n" +
" }\n" +
"} \n" +
" \n",
"Team1120inc1_1.java",
"\n" +
"public team class Team1120inc1_1 {\n" +
" public team class T0 {\n" +
" public class R1 {}\n" +
" }\n" +
" public team class T1 extends T0 {\n" +
" public class R0 {}\n" +
" }\n" +
"}\n" +
" \n"
},
"1.5(d)");
}
// using tsuper in a setting of diamond inheritance
// 1.1.21-otjld-diamond-inheritance-1
public void test1121_diamondInheritance1() {
runConformTest(
new String[] {
"Team1121di1_2.java",
"\n" +
"public team class Team1121di1_2 extends Team1121di1_1 {\n" +
" public class R2 {\n" +
" public void test() {\n" +
" tsuper.test();\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" }\n" +
" public static void main (String[] args) {\n" +
" final Team1121di1_2 t = new Team1121di1_2();\n" +
" R2<@t> r2 = t.new R2();\n" +
" r2.test(); \n" +
" }\n" +
"} \n" +
" \n",
"Team1121di1_1.java",
"\n" +
"public team class Team1121di1_1 {\n" +
" protected class R1 {\n" +
" protected void test() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
" }\n" +
" protected class R2 extends R1 {}\n" +
"} \n" +
" \n"
},
"OK");
}
// using tsuper in a setting of diamond inheritance - indirectly, invible
// 1.1.21-otjld-diamond-inheritance-1f
public void test1121_diamondInheritance1f() {
runNegativeTest(
new String[] {
"Team1121di1f_2.java",
"\n" +
"public team class Team1121di1f_2 extends Team1121di1f_1 {\n" +
" @Override\n" +
" public class R2 {\n" +
" @Override\n" +
" public void test() {\n" +
" tsuper.test();\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1121di1f_1.java",
"\n" +
"public team class Team1121di1f_1 {\n" +
" protected class R1 {\n" +
" void test() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
" }\n" +
" protected class R2 extends R1 {}\n" +
"}\n" +
" \n"
},
"----------\n" +
"1. ERROR in Team1121di1f_2.java (at line 7)\n" +
" tsuper.test();\n" +
" ^^^^\n" +
"Indirect tsuper method inherited from Team1121di1f_1.R1 is not visible (OTJLD 1.2.1(e)).\n" +
"----------\n");
}
// using tsuper in a setting of diamond inheritance - role R1 reused from byte code
// 1.1.21-otjld-diamond-inheritance-2
public void test1121_diamondInheritance2() {
runConformTest(
new String[] {
"Team1121di2_2.java",
"\n" +
"public team class Team1121di2_2 extends Team1121di2_1 {\n" +
" public class R2 {\n" +
" public void test() {\n" +
" tsuper.test();\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" }\n" +
" public static void main (String[] args) {\n" +
" final Team1121di2_2 t = new Team1121di2_2();\n" +
" R2<@t> r2 = t.new R2();\n" +
" r2.test(); \n" +
" }\n" +
"} \n" +
" \n",
"Team1121di2_1.java",
"\n" +
"public team class Team1121di2_1 {\n" +
" protected class R1 {\n" +
" protected void test() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
" }\n" +
" protected class R2 extends R1 {}\n" +
"} \n" +
" \n"
},
"OK");
}
// callin arg anchored to "base", problem(s) observed in ordertesting.OrderCustomerSC
// 1.1.22-otjld-layered-teams-1
public void test1122_layeredTeams1() {
runConformTest(
new String[] {
"Team1122lt1_3.java",
"\n" +
"public team class Team1122lt1_3 {\n" +
" protected team class TI playedBy Team1122lt1_2 {\n" +
" protected class R1 playedBy R0<@base> {\n" +
" // base.R0 getOther1() -> base.R0 getOther();\n" +
" abstract R0<@TI.base> getOther1(R0<@TI.base> o);\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" getOther1 -> getOther;\n" +
" void dummy2(R0<@TI.base> thut) {\n" +
" System.out.print(\"!\");\n" +
" }\n" +
" dummy2 <- after dummy;\n" +
" }\n" +
" }\n" +
" Team1122lt1_3() {\n" +
" new TI(new Team1122lt1_2()).activate();\n" +
" this.activate();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1122lt1_3();\n" +
" new T1122lt1().test(null);\n" +
" }\n" +
"}\n" +
" \n",
"T1122lt1.java",
"\n" +
"public class T1122lt1 {\n" +
" T1122lt1 getOther (T1122lt1 o) {\n" +
" return this;\n" +
" }\n" +
" void test(T1122lt1 that) {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt1_1.java",
"\n" +
"public team class Team1122lt1_1 {\n" +
" public class R0 playedBy T1122lt1 {\n" +
" R0 getOther(R0 r) -> T1122lt1 getOther(T1122lt1 o);\n" +
" void dummy(R0 thot) {\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" dummy <- after test;\n" +
" }\n" +
" Team1122lt1_1() {\n" +
" this.activate();\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt1_2.java",
"\n" +
"public team class Team1122lt1_2 extends Team1122lt1_1 {}\n" +
" \n"
},
"OK!");
}
// a role references a role which the lower team inherits from its super
// 1.1.22-otjld-layered-teams-2
public void test1122_layeredTeams2() {
runConformTest(
new String[] {
"Team1122lt2_3.java",
"\n" +
"public team class Team1122lt2_3 {\n" +
" protected class R2 playedBy Team1122lt2_2 {\n" +
" @SuppressWarnings(\"decapsulation\") // as per result.test()!\n" +
" String getMsg() -> R<@base> getR()\n" +
" with { result <- result.test() }\n" +
" }\n" +
" Team1122lt2_3() {\n" +
" R2 r = new R2(new Team1122lt2_2());\n" +
" System.out.print(r.getMsg());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1122lt2_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt2_1.java",
"\n" +
"public team class Team1122lt2_1 {\n" +
" public class R {\n" +
" String test() {\n" +
" return \"OK\";\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt2_2.java",
"\n" +
"public team class Team1122lt2_2 extends Team1122lt2_1 {\n" +
" public R getR() {\n" +
" return new R();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a role references a role which the lower team inherits from its super - signature defined in super team
// 1.1.22-otjld-layered-teams-3
public void test1122_layeredTeams3() {
runConformTest(
new String[] {
"Team1122lt3_3.java",
"\n" +
"public team class Team1122lt3_3 {\n" +
" protected class R2 playedBy Team1122lt3_2 {\n" +
" @SuppressWarnings(\"decapsulation\") // as per result.test()!\n" +
" String getMsg() -> R<@base> getR()\n" +
" with { result <- result.test() }\n" +
" }\n" +
" Team1122lt3_3() {\n" +
" R2 r = new R2(new Team1122lt3_2());\n" +
" System.out.print(r.getMsg());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1122lt3_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt3_1.java",
"\n" +
"public team class Team1122lt3_1 {\n" +
" public class R {\n" +
" String test() {\n" +
" return \"OK\";\n" +
" }\n" +
" }\n" +
" public R getR() {\n" +
" return new R();\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt3_2.java",
"\n" +
"public team class Team1122lt3_2 extends Team1122lt3_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// callin requires lifting of non-public role to role-of-role
// 1.1.22-otjld-layered-teams-4
public void test1122_layeredTeams4() {
runConformTest(
new String[] {
"Team1122lt4_2.java",
"\n" +
"public team class Team1122lt4_2 {\n" +
" protected team class Mid playedBy Team1122lt4_1 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class RInner playedBy R<@base> {\n" +
" protected void test() { System.out.print(\"OK\"); }\n" +
" }\n" +
" void testMid(RInner r) {\n" +
" r.test();\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testMid(RInner r) <- after void test(R<@base> r);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" Team1122lt4_2 t = new Team1122lt4_2();\n" +
" t.activate();\n" +
" new Team1122lt4_1().run();\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt4_1.java",
"\n" +
"public team class Team1122lt4_1 {\n" +
" protected class R {\n" +
" }\n" +
" protected void test(R r) {\n" +
" }\n" +
" public void run() {\n" +
" R r = new R();\n" +
" test(r);\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// callin requires lifting of non-public role to role-of-role - declared lifting at base
// 1.1.22-otjld-layered-teams-5
public void test1122_layeredTeams5() {
runConformTest(
new String[] {
"l2/Team1122lt5_3.java",
"\n" +
"package l2;\n" +
"import base l1.Team1122lt5_1;\n" +
"import base l1.Team1122lt5_2;\n" +
"public team class Team1122lt5_3 {\n" +
" protected team class Unbound {\n" +
" }\n" +
" protected team class Mid0 extends Unbound playedBy Team1122lt5_1 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class RInner playedBy R<@base> {\n" +
" protected void test() { System.out.print(\"OK\"); }\n" +
" }\n" +
" void testMid(RInner r) {}\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testMid(RInner r) <- before void test(R<@base> r);\n" +
" }\n" +
" protected team class Mid1 extends Mid0 playedBy Team1122lt5_2 {\n" +
" void testMid(RInner r) {\n" +
" r.test();\n" +
" }\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" Team1122lt5_3 t = new Team1122lt5_3();\n" +
" t.activate();\n" +
" new l1.Team1122lt5_2().run();\n" +
" }\n" +
"}\n" +
" \n",
"l0/T1122lt5.java",
"\n" +
"package l0;\n" +
"public class T1122lt5 {}\n" +
" \n",
"l1/Team1122lt5_1.java",
"\n" +
"package l1;\n" +
"public team class Team1122lt5_1 {\n" +
" protected class R {\n" +
" }\n" +
" protected void test(R r) {\n" +
" System.out.print(\"!\");\n" +
" }\n" +
"}\n" +
" \n",
"l1/Team1122lt5_2.java",
"\n" +
"package l1;\n" +
"import l0.T1122lt5;\n" +
"public team class Team1122lt5_2 extends Team1122lt5_1 {\n" +
" @SuppressWarnings(\"bindingconventions\")\n" +
" protected class R playedBy T1122lt5 {}\n" +
" protected void test(T1122lt5 as R r) {\n" +
" super.test(r);\n" +
" }\n" +
" public void run() {\n" +
" T1122lt5 b = new T1122lt5();\n" +
" test(b);\n" +
" }\n" +
"}\n" +
" \n"
},
"OK!");
}
// callin requires lifting of non-public role to role-of-role - base method spec requires role strengthening for parameter
// 1.1.22-otjld-layered-teams-6
public void test1122_layeredTeams6() {
runConformTest(
new String[] {
"Team1122lt6_3.java",
"\n" +
"public team class Team1122lt6_3 {\n" +
" protected team class Mid playedBy Team1122lt6_2 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class RInner playedBy R<@base> {\n" +
" protected void test() { System.out.print(\"OK\"); }\n" +
" }\n" +
" void testMid(RInner r) {\n" +
" r.test();\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testMid(RInner r) <- before void test(R<@base> r);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" Team1122lt6_3 t = new Team1122lt6_3();\n" +
" t.activate();\n" +
" new Team1122lt6_2().run(new T1122lt6());\n" +
" }\n" +
"}\n" +
" \n",
"T1122lt6.java",
"\n" +
"public class T1122lt6 {}\n" +
" \n",
"Team1122lt6_1.java",
"\n" +
"public team class Team1122lt6_1 {\n" +
" protected class R {\n" +
" }\n" +
" protected void test(R r) {\n" +
" System.out.print(\"!\");\n" +
" }\n" +
" protected void test(T1122lt6 b) {\n" +
" System.out.print(\"??\");\n" +
" }\n" +
"}\n" +
" \n",
"Team1122lt6_2.java",
"\n" +
"public team class Team1122lt6_2 extends Team1122lt6_1 {\n" +
" protected class R playedBy T1122lt6 {}\n" +
" public void run(T1122lt6 as R r) {\n" +
" test(r);\n" +
" }\n" +
"}\n" +
" \n"
},
"OK!");
}
// callin requires lifting of non-public role to role-of-role - matching the base method spec requires lowering
// 1.1.22-otjld-layered-teams-7
public void test1122_layeredTeams7() {
runNegativeTestMatching(
new String[] {
"Team1122lt7_2.java",
"\n" +
"public team class Team1122lt7_2 {\n" +
" protected team class Mid playedBy Team1122lt7_1 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class RInner playedBy R<@base> {\n" +
" protected void test() { System.out.print(\"OK\"); }\n" +
" }\n" +
" void testMid(RInner r) {\n" +
" r.test();\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" + // decapsulating R
" void testMid(RInner r) <- before void test(R<@base> r);\n" +
" }\n" +
"}\n" +
" \n",
"T1122lt7.java",
"\n" +
"public class T1122lt7 {}\n" +
" \n",
"Team1122lt7_1.java",
"\n" +
"public team class Team1122lt7_1 {\n" +
" protected class R playedBy T1122lt7 {\n" +
" }\n" +
" protected void test(T1122lt7 b) {\n" +
" System.out.print(\"??\");\n" +
" }\n" +
"}\n" +
" \n"
},
"----------\n" +
"1. ERROR in Team1122lt7_2.java (at line 12)\n" +
" void testMid(RInner r) <- before void test(R<@base> r);\n" +
" ^\n" +
"Method specifier finds no direct match, argument of closest match is T1122lt7 instead of R<@base> (OTJLD 4.1(c)).\n" +
"----------\n");
}
// callout to private method of lower role caused "Cannot externalize non-public role R1 (OTJLD 1.2.2(a))"
// plus 2 follow-up errors.
public void test1122_layeredTeams8() {
runConformTest(
new String[] {
"T1122lt8Main.java",
"public class T1122lt8Main {\n" +
" public static void main(String... args) {\n" +
" Team1122lt8_1 t1 = new Team1122lt8_1();\n" +
" new Team1122lt8_2(t1).activate();\n" +
" t1.test();\n" +
" }\n" +
"}\n",
"Team1122lt8_2.java",
"public team class Team1122lt8_2 {\n" +
" final Team1122lt8_1 theTeam;\n" +
" public Team1122lt8_2(Team1122lt8_1 other) {\n" +
" theTeam = other;\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class R2 playedBy R1<@theTeam> {\n" +
" void k() <- after void test();\n" +
" void k() -> void k();\n" +
" }\n" +
"}\n",
"Team1122lt8_1.java",
"public team class Team1122lt8_1 {\n" +
" protected class R1 {\n" +
" private void test() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
" private void k() {\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" protected void callTest() { test(); }\n" +
" }\n" +
" public void test() {\n" +
" new R1().callTest();\n" +
" }\n" +
"}\n"
},
"OK");
}
// a nested team is played by a regular class, its (inner) role by an inner of the base - (we had a problem with splitting creation methods in conjunction with base class decapsulation )
// 1.1.23-otjld-team-layered-on-regular-nested-1
public void test1123_teamLayeredOnRegularNested1() {
runConformTest(
new String[] {
"Team1123tlorn1.java",
"\n" +
"public team class Team1123tlorn1 {\n" +
" protected team class Mid playedBy T1123tlorn1 {\n" +
" Mid(T1123tlorn1 aBase) {\n" +
" this.activate();\n" +
" }\n" +
" void go() {\n" +
" System.out.print(\"Mid.setup()\");\n" +
" }\n" +
" go <- before testInner;\n" +
"\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class R playedBy T1123tlorn1.Inner {\n" +
" callin void test(String m) {\n" +
" base.test(null);\n" +
" System.out.print(m);\n" +
" }\n" +
" void test(String m) <- replace void test() \n" +
" with {m <- \"R.test()\" };\n" +
" }\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" org.objectteams.Team t = new Team1123tlorn1();\n" +
" t.activate();\n" +
" new T1123tlorn1().testInner(\"-OK-\");\n" +
" }\n" +
"}\n" +
" \n",
"T1123tlorn1.java",
"\n" +
"public class T1123tlorn1 {\n" +
" void testInner (String msg) {\n" +
" new Inner(msg).test();\n" +
" }\n" +
" private class Inner {\n" +
" String msg;\n" +
" Inner(String msg) {\n" +
" this.msg = msg;\n" +
" }\n" +
" void test() {\n" +
" System.out.print(msg);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"Mid.setup()-OK-R.test()");
}
// a nested team is played by a regular class, its (inner) role by an inner of the base, illegal base.Inner syntax
// 1.1.23-otjld-team-layered-on-regular-nested-2
public void test1123_teamLayeredOnRegularNested2() {
runNegativeTestMatching(
new String[] {
"Team1123tlorn2.java",
"\n" +
"public team class Team1123tlorn2 {\n" +
" protected team class Mid playedBy T1123tlorn2 {\n" +
" callin void setup(String msg) {\n" +
" System.out.print(\"Mid.setup()\");\n" +
" this.activate();\n" +
" base.setup(msg);\n" +
" }\n" +
" setup <- replace getInner;\n" +
"\n" +
" protected class R playedBy base.Inner {\n" +
" callin void test(String m) {\n" +
" base.test(null);\n" +
" System.out.print(m);\n" +
" }\n" +
" void test(String m) <- replace void test() \n" +
" with {m <- \"R.test()\" };\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"T1123tlorn2.java",
"\n" +
"public class T1123tlorn2 {\n" +
" Inner getInner (String msg) {\n" +
" return new Inner(msg);\n" +
" }\n" +
" protected class Inner {\n" +
" String msg;\n" +
" Inner(String msg) {\n" +
" this.msg = msg;\n" +
" }\n" +
" void test() {\n" +
" System.out.print(msg);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"2.6(a)");
}
// a nested team is played by a regular class, its (inner) role by an inner of the base - base constructor needs explicit enclosing instance
// 1.1.23-otjld-team-layered-on-regular-nested-3
public void test1123_teamLayeredOnRegularNested3() {
runConformTest(
new String[] {
"Team1123tlorn3.java",
"\n" +
"public team class Team1123tlorn3 {\n" +
" protected team class Mid playedBy T1123tlorn3 {\n" +
" protected void midTest() {\n" +
" R r= new R(this, \"OK\");\n" +
" r.test();\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class R playedBy T1123tlorn3.Inner {\n" +
" protected R(Mid encl, String msg) {\n" +
" encl.base(msg);\n" +
" }\n" +
" public void test() -> void test();\n" +
" }\n" +
" }\n" +
" void doTest() {\n" +
" Mid m= new Mid(new T1123tlorn3());\n" +
" m.midTest();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" Team1123tlorn3 t = new Team1123tlorn3();\n" +
" t.doTest();\n" +
" }\n" +
"}\n" +
" \n",
"T1123tlorn3.java",
"\n" +
"public class T1123tlorn3 {\n" +
" void testInner (String msg) {\n" +
" new Inner(msg).test();\n" +
" }\n" +
" private class Inner {\n" +
" String msg;\n" +
" Inner(String msg) {\n" +
" this.msg = msg;\n" +
" }\n" +
" void test() {\n" +
" System.out.print(msg);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a reflective method is used on a nested team
// 1.1.24-otjld-generated-method-of-nested-team-1
public void test1124_generatedMethodOfNestedTeam1() {
runConformTest(
new String[] {
"p2/T1124gmont1Main.java",
"\n" +
"package p2;\n" +
"import p1.Team1124gmont1;\n" +
"public class T1124gmont1Main {\n" +
" public static void main(String[] args) {\n" +
" final Team1124gmont1 t = new Team1124gmont1();\n" +
" Mid<@t> mid = t.new Mid();\n" +
" if (!mid.isExecutingCallin())\n" +
" System.out.print(\"OK\");\n" +
" else\n" +
" System.out.print(\"NOK\");\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1124gmont1.java",
"\n" +
"package p1;\n" +
"public team class Team1124gmont1 {\n" +
" public team class Mid {\n" +
" protected class R {}\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a creator method is invoked on an externalized nested team
// 1.1.24-otjld-generated-method-of-nested-team-2
public void test1124_generatedMethodOfNestedTeam2() {
runConformTest(
new String[] {
"p2/T1124gmont2Main.java",
"\n" +
"package p2;\n" +
"import p1.Team1124gmont2;\n" +
"public class T1124gmont2Main {\n" +
" public static void main(String[] args) {\n" +
" final Team1124gmont2 t = new Team1124gmont2();\n" +
" t.new Mid();\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1124gmont2.java",
"\n" +
"package p1;\n" +
"public team class Team1124gmont2 {\n" +
" public team class Mid {\n" +
" public Mid() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a cast method is used for a nested role
// 1.1.24-otjld-generated-method-of-nested-team-3
public void test1124_generatedMethodOfNestedTeam3() {
runConformTest(
new String[] {
"Team1124gmont3.java",
"\n" +
"public team class Team1124gmont3 {\n" +
" final Mid m = new Mid();\n" +
" public team class Mid {\n" +
" public class Inner {\n" +
" public void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" public Object getInner() { return new Inner(); }\n" +
" }\n" +
" void test(Object o) {\n" +
" Inner<@m> i = (Inner<@m>)o;\n" +
" i.test();\n" +
" }\n" +
" public Team1124gmont3() {\n" +
" test(m.getInner());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1124gmont3();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a nested role accesses its outer-outer team
// 1.1.25-otjld-outer-access-in-nested-team-1
public void test1125_outerAccessInNestedTeam1() {
runConformTest(
new String[] {
"Team1125oaint1.java",
"\n" +
"public team class Team1125oaint1 {\n" +
" String val = \"OK\";\n" +
" public team class Mid {\n" +
" public class R {\n" +
" public void test() {\n" +
" System.out.print(Team1125oaint1.this.val);\n" +
" }\n" +
" }\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" final Team1125oaint1 t = new Team1125oaint1();\n" +
" final Mid<@t> m = t.new Mid();\n" +
" R<@m> r = m.new R();\n" +
" r.test();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a nested role accesses its outer-outer team - team inheritance
// 1.1.25-otjld-outer-access-in-nested-team-2
public void test1125_outerAccessInNestedTeam2() {
runConformTest(
new String[] {
"Team1125oaint2_2.java",
"\n" +
"public team class Team1125oaint2_2 extends Team1125oaint2_1 {\n" +
" public static void main(String[] args) {\n" +
" final Team1125oaint2_1 t = new Team1125oaint2_2();\n" +
" final Mid<@t> m = t.new Mid();\n" +
" R<@m> r = new R<@m>();\n" +
" r.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1125oaint2_1.java",
"\n" +
"public team class Team1125oaint2_1 {\n" +
" String val = \"OK\";\n" +
" public team class Mid {\n" +
" public class R {\n" +
" public void test() {\n" +
" System.out.print(Team1125oaint2_1.this.val);\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a nested role accesses its outer-outer team - team inheritance
// 1.1.25-otjld-outer-access-in-nested-team-3
public void test1125_outerAccessInNestedTeam3() {
runConformTest(
new String[] {
"Team1125oaint3_2.java",
"\n" +
"public team class Team1125oaint3_2 extends Team1125oaint3_1 {\n" +
" public static void main(String[] args) {\n" +
" final Team1125oaint3_1 t = new Team1125oaint3_2();\n" +
" final Mid<@t> m = new Mid<@t>();\n" +
" m.test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1125oaint3_1.java",
"\n" +
"public team class Team1125oaint3_1 {\n" +
" String val = \"OK\";\n" +
" public team class Mid {\n" +
" public class R {\n" +
" static protected void test() {\n" +
" System.out.print(Team1125oaint3_1.this.val);\n" +
" }\n" +
" }\n" +
" public void test() {\n" +
" R.test();\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a nested role accesses a static method of the intermediate enclosing team/role
// 1.1.25-otjld-outer-access-in-nested-team-4
public void test1125_outerAccessInNestedTeam4() {
runConformTest(
new String[] {
"Team1125oaint4.java",
"\n" +
"public team class Team1125oaint4 {\n" +
" protected team class Mid {\n" +
" private static void print() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" protected class Inner {\n" +
" protected void test() {\n" +
" Mid.print();\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" new Inner().test();\n" +
" }\n" +
" }\n" +
" void test() {\n" +
" new Mid().test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1125oaint4().test();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams adapt a lower team - with method decapsulation
// 1.1.26-otjld-nesting-and-layering-1
public void test1126_nestingAndLayering1() {
runConformTest(
new String[] {
"Team1126nal1_2.java",
"\n" +
"public team class Team1126nal1_2 {\n" +
" protected team class Mid1 playedBy Team1126nal1_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" public void testRU() -> void test();\n" +
" }\n" +
" RU getR() -> R<@base> getR();\n" +
" protected void testMid1() {\n" +
" getR().testRU();\n" +
" }\n" +
" }\n" +
" Team1126nal1_2() {\n" +
" Mid1 m = new Mid1(new Team1126nal1_1());\n" +
" m.testMid1();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal1_2();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal1_1.java",
"\n" +
"public team class Team1126nal1_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" private void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - with method decapsulation
// 1.1.26-otjld-nesting-and-layering-2
public void test1126_nestingAndLayering2() {
runConformTest(
new String[] {
"Team1126nal2_3.java",
"\n" +
"public team class Team1126nal2_3 {\n" +
" protected team class Mid1 playedBy Team1126nal2_1 {\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal2_2 {\n" +
" public class RU playedBy R<@base> {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testRU() -> void test();\n" +
" }\n" +
" RU getR() -> R<@base> getR();\n" +
" public void testMid2() {\n" +
" getR().testRU();\n" +
" }\n" +
" }\n" +
" Team1126nal2_3() {\n" +
" Mid2 m = new Mid2(new Team1126nal2_2());\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal2_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal2_1.java",
"\n" +
"public team class Team1126nal2_1 {\n" +
" public R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" protected void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal2_2.java",
"\n" +
"public team class Team1126nal2_2 extends Team1126nal2_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - with private method decapsulation
// 1.1.26-otjld-nesting-and-layering-3p
public void test1126_nestingAndLayering3p() {
runConformTest(
new String[] {
"Team1126nal3p_3.java",
"\n" +
"public team class Team1126nal3p_3 {\n" +
" protected team class Mid1 playedBy Team1126nal3p_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" }\n" +
" RU getR() -> R<@base> getR();\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal3p_2 {\n" +
" protected class RU {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected void testRU(char c) -> void test(char c);\n" +
" }\n" +
" protected void testMid2() {\n" +
" getR().testRU('K');\n" +
" }\n" +
" }\n" +
" Team1126nal3p_3() {\n" +
" Mid2 m = new Mid2(new Team1126nal3p_2());\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal3p_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p_1.java",
"\n" +
"public team class Team1126nal3p_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" private void test(char c) {\n" +
" System.out.print(\"O\"+c);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p_2.java",
"\n" +
"public team class Team1126nal3p_2 extends Team1126nal3p_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - with private method decapsulation - double compile re-using binary role
// 1.1.26-otjld-nesting-and-layering-3p2
public void test1126_nestingAndLayering3p2() {
runConformTest(
new String[] {
"Team1126nal3p2_3.java",
"\n" +
"public team class Team1126nal3p2_3 {\n" +
" protected team class Mid1 playedBy Team1126nal3p2_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" }\n" +
" RU getR() -> R<@base> getR();\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal3p2_2 {\n" +
" protected class RU {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected void testRU(char c) -> void test(char c);\n" +
" }\n" +
" protected void testMid2() {\n" +
" getR().testRU('K');\n" +
" }\n" +
" }\n" +
" Team1126nal3p2_3() {\n" +
" Mid2 m = new Mid2(new Team1126nal3p2_2());\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal3p2_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p2_1.java",
"\n" +
"public team class Team1126nal3p2_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" private void test(char c) {\n" +
" System.out.print(\"O\"+c);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p2_2.java",
"\n" +
"public team class Team1126nal3p2_2 extends Team1126nal3p2_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - with private method decapsulation
// three step compilation: access lower team from binary
public void test1126_nestingAndLayering3p3() {
compileOrder = new String[][]{{"Team1126nal3p_1.java"}, {"Team1126nal3p_2.java"}, {"Team1126nal3p_3.java"}};
runConformTest(
new String[] {
"Team1126nal3p_3.java",
"\n" +
"public team class Team1126nal3p_3 {\n" +
" protected team class Mid1 playedBy Team1126nal3p_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" }\n" +
" RU getR() -> R<@base> getR();\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal3p_2 {\n" +
" protected class RU {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected void testRU(char c) -> void test(char c);\n" +
" }\n" +
" protected void testMid2() {\n" +
" getR().testRU('K');\n" +
" }\n" +
" }\n" +
" Team1126nal3p_3() {\n" +
" Mid2 m = new Mid2(new Team1126nal3p_2());\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal3p_3();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p_1.java",
"\n" +
"public team class Team1126nal3p_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" private void test(char c) {\n" +
" System.out.print(\"O\"+c);\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal3p_2.java",
"\n" +
"public team class Team1126nal3p_2 extends Team1126nal3p_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - method is protected
// 1.1.26-otjld-nesting-and-layering-3
public void test1126_nestingAndLayering3() {
runConformTest(
new String[] {
"p2/Team1126nal3_3.java",
"\n" +
"package p2;\n" +
"import base p1.Team1126nal3_1;\n" +
"import base p1.Team1126nal3_2;\n" +
"\n" +
"public team class Team1126nal3_3 {\n" +
" protected team class Mid1 playedBy Team1126nal3_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\") // getR() is in a different team and package but not public\n" +
" RU getR() -> R<@base> getR();\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal3_2 {\n" +
" protected class RU {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testRU() -> void test();\n" +
" }\n" +
" protected void testMid2() {\n" +
" getR().testRU();\n" +
" }\n" +
" protected Mid2() {\n" +
" base();\n" +
" }\n" +
" }\n" +
" Team1126nal3_3() {\n" +
" Mid2 m = new Mid2();\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal3_3();\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1126nal3_1.java",
"\n" +
"package p1;\n" +
"public team class Team1126nal3_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" protected void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1126nal3_2.java",
"\n" +
"package p1;\n" +
"public team class Team1126nal3_2 extends Team1126nal3_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - method is protected - incremenatl (i.e., double) build
// 1.1.26-otjld-nesting-and-layering-3i
public void test1126_nestingAndLayering3i() {
runConformTest(
new String[] {
"p2/Team1126nal3i_3.java",
"\n" +
"package p2;\n" +
"import base p1.Team1126nal3i_1;\n" +
"import base p1.Team1126nal3i_2;\n" +
"\n" +
"public team class Team1126nal3i_3 {\n" +
" protected team class Mid1 playedBy Team1126nal3i_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" RU getR() -> R<@base> getR();\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal3i_2 {\n" +
" protected class RU {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void testRU() -> void test();\n" +
" }\n" +
" protected void testMid2() {\n" +
" getR().testRU();\n" +
" }\n" +
" protected Mid2() {\n" +
" base();\n" +
" }\n" +
" }\n" +
" Team1126nal3i_3() {\n" +
" Mid2 m = new Mid2();\n" +
" m.testMid2();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal3i_3();\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1126nal3i_1.java",
"\n" +
"package p1;\n" +
"public team class Team1126nal3i_1 {\n" +
" protected R getR() {\n" +
" return new R();\n" +
" }\n" +
" public class R {\n" +
" protected void test() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
"}\n" +
" \n",
"p1/Team1126nal3i_2.java",
"\n" +
"package p1;\n" +
"public team class Team1126nal3i_2 extends Team1126nal3i_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams
// 1.1.26-otjld-nesting-and-layering-4
public void test1126_nestingAndLayering4() {
runConformTest(
new String[] {
"Team1126nal4_3.java",
"\n" +
"public team class Team1126nal4_3 {\n" +
" @SuppressWarnings(\"roletypesyntax\")\n" +
" protected team class Mid1 playedBy Team1126nal4_1 {\n" +
" protected class RU playedBy base.R { }\n" +
" void receiveR(RU ru) { System.out.print(\"Mid1.\"); }\n" +
" void receiveR(RU ru) <- after void receiveR(base.R r);\n" +
" Mid1(Team1126nal4_1 b) {\n" +
" b.test('o');\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal4_2 {\n" +
" void receiveR(RU ru) { System.out.print(\"Mid2.\"); }\n" +
" }\n" +
" Team1126nal4_3() {\n" +
" activate();\n" +
" new Mid2(new Team1126nal4_2());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal4_3();\n" +
" Team1126nal4_1 t = new Team1126nal4_1();\n" +
" t.test('p');\n" +
" t.test('q');\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4_1.java",
"\n" +
"public team class Team1126nal4_1 {\n" +
" public class R {\n" +
" char c;\n" +
" protected R(char c) { this.c = c; }\n" +
" protected void print() { System.out.print(\"R\"+c+\".\"); }\n" +
" }\n" +
" public void receiveR(R r) {\n" +
" r.print();\n" +
" }\n" +
" void test(char c) {\n" +
" receiveR(new R(c));\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4_2.java",
"\n" +
"public team class Team1126nal4_2 extends Team1126nal4_1 {\n" +
"}\n" +
" \n"
},
"Ro.Mid2.Rp.Ro.Mid1.Mid1.Rq.Mid1.");
}
// nested teams with implicit inheritance adapt a hierarchy of lower team -- callout to role field
// 1.1.26-otjld_nesting-and-layering-4f
public void _nesting_test1126_andLayering4f() {
runConformTest(
new String[] {
"Team1126nal4f_3.java",
"\n" +
"public team class Team1126nal4f_3 {\n" +
" protected team class Mid1 playedBy Team1126nal4f_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" int getI() -> get int i;\n" +
" }\n" +
" void receiveR(RU ru) { System.out.print(\"Mid1(RU\"+ru.getI()+\").\"); }\n" +
" void receiveR(RU ru) <- after void receiveR(R<@base> r);\n" +
" Mid1(Team1126nal4f_1 b) {\n" +
" b.test(1);\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal4f_2 {\n" +
" void receiveR(RU ru) { System.out.print(\"Mid2(RU\"+ru.getI()+\").\"); }\n" +
" }\n" +
" Team1126nal4f_3() {\n" +
" activate();\n" +
" new Mid2(new Team1126nal4f_2());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal4f_3();\n" +
" new Team1126nal4f_1().test(2);\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4f_1.java",
"\n" +
"public team class Team1126nal4f_1 {\n" +
" public class R {\n" +
" int i;\n" +
" protected R(int i) { this.i = i; }\n" +
" protected void print() { System.out.print(\"R\"+i+\".\"); }\n" +
" }\n" +
" public void receiveR(R r) {\n" +
" r.print();\n" +
" }\n" +
" void test(int i) {\n" +
" receiveR(new R(i));\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4f_2.java",
"\n" +
"public team class Team1126nal4f_2 extends Team1126nal4f_1 {\n" +
"}\n" +
" \n"
},
"OK");
}
// nested teams with implicit inheritance adapt a hierarchy of lower teams - callout to private role field
// 1.1.26-otjld-nesting-and-layering-4pf
public void test1126_nestingAndLayering4pf() {
runConformTest(
new String[] {
"Team1126nal4pf_3.java",
"\n" +
"public team class Team1126nal4pf_3 {\n" +
" protected team class Mid1 playedBy Team1126nal4pf_1 {\n" +
" protected class RU playedBy R<@base> {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected String getI() -> get String i;\n" +
" // TODO(SH): check field with role type!\n" +
" }\n" +
" void receiveR(RU ru) { System.out.print(\"Mid1(RU\"+ru.getI()+\")!\"); }\n" +
" void receiveR(RU ru) <- after void receiveR(R<@base> r);\n" +
" Mid1(Team1126nal4pf_1 b) {\n" +
" System.out.print(\"LMid1-\");\n" +
" b.test(\"a\");\n" +
" }\n" +
" }\n" +
" protected team class Mid2 extends Mid1 playedBy Team1126nal4pf_2 {\n" +
" void receiveR(RU ru) { System.out.print(\"Mid2(RU\"+ru.getI()+\")!\"); }\n" +
" }\n" +
" Team1126nal4pf_3() {\n" +
" activate();\n" +
" new Mid2(new Team1126nal4pf_2());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal4pf_3();\n" +
" new Team1126nal4pf_1().test(\"b\");\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4pf_1.java",
"\n" +
"public team class Team1126nal4pf_1 {\n" +
" public class R {\n" +
" private String i;\n" +
" protected R(String i) { this.i = i; }\n" +
" protected void print() { System.out.print(\"R\"+i+\".\"); }\n" +
" }\n" +
" public void receiveR(R r) {\n" +
" r.print();\n" +
" }\n" +
" void test(String i) {\n" +
" receiveR(new R(i));\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal4pf_2.java",
"\n" +
"public team class Team1126nal4pf_2 extends Team1126nal4pf_1 {\n" +
"}\n" +
" \n"
},
"LMid1-Ra.Mid2(RUa)!Rb.LMid1-Ra.Mid1(RUa)!Mid1(RUb)!");
}
// two-level base anchored types
// 1.1.26-otjld-nesting-and-layering-5
public void test1126_nestingAndLayering5() {
runConformTest(
new String[] {
"Team1126nal5_2.java",
"\n" +
"public team class Team1126nal5_2 {\n" +
" protected team class TopTeam playedBy Team1126nal5_1 {\n" +
" public class TopRole playedBy BaseMid<@base> {\n" +
" BaseRole<@base> r; // <= here @base refers to base-anchored type BaseMid<@base>!\n" +
" TopRole(BaseMid<@TopTeam.base> m) {\n" +
" r= getR();\n" +
" }\n" +
" BaseRole<@base> getR() -> BaseRole<@base> getR();\n" +
" protected void test2() {\n" +
" r.test3();\n" +
" }\n" +
" }\n" +
" protected void test1() {\n" +
" TopRole tr= getMid();\n" +
" tr.test2();\n" +
" }\n" +
" TopRole getMid() -> BaseMid<@base> getMid();\n" +
" }\n" +
" void test0() {\n" +
" new TopTeam(new Team1126nal5_1()).test1();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1126nal5_2().test0();\n" +
" }\n" +
"}\n" +
" \n",
"Team1126nal5_1.java",
"\n" +
"public team class Team1126nal5_1 {\n" +
" public team class BaseMid {\n" +
" public class BaseRole {\n" +
" public void test3() {\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" public BaseRole getR() {\n" +
" return new BaseRole();\n" +
" }\n" +
" }\n" +
" public BaseMid getMid() {\n" +
" return new BaseMid();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// the ctor of a nested team assigns a final field - reported by kmeier on 06/10/21
// 1.1.27-otjld-constructor-of-nested-team-1
public void test1127_constructorOfNestedTeam1() {
runConformTest(
new String[] {
"Team1127cont1.java",
"\n" +
"public team class Team1127cont1 {\n" +
" public team class CA {\n" +
" public class X {\n" +
" protected void test(){\n" +
" System.out.print(\"OK\");\n" +
" }\n" +
" }\n" +
" protected void test() {\n" +
" new X().test();\n" +
" }\n" +
" }\n" +
" \n" +
" public team class CB {\n" +
" private final CA ca;\n" +
" protected CB(CA ca) {\n" +
" this.ca = ca;\n" +
" }\n" +
" protected void test() {\n" +
" ca.test();\n" +
" }\n" +
" }\n" +
" Team1127cont1() {\n" +
" CB cb = new CB(new CA());\n" +
" cb.test();\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1127cont1();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// the ctor of a role in a nested team is duplicated during implicit inheritance (phantom type) - reported by Robin Sedlaczek
// 1.1.27-otjld-constructor-of-nested-team-2
public void test1127_constructorOfNestedTeam2() {
runConformTest(
new String[] {
"Team1127cont2_2.java",
"\n" +
"public team class Team1127cont2_2 extends Team1127cont2_1 {\n" +
" public class OuterRole playedBy T1127cont2 { \n" +
" String getRStr() => String getBStr()\n" +
" with { result <- tsuper.getRStr() + \"!\" }\n" +
" }\n" +
" void test() {\n" +
" OuterRole or= new OuterRole(new T1127cont2());\n" +
" System.out.print(or.getRStr());\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1127cont2_2().test();\n" +
" }\n" +
"}\n" +
" \n",
"T1127cont2.java",
"\n" +
"public class T1127cont2 {\n" +
" String getBStr() { return \"OK\"; }\n" +
"}\n" +
" \n",
"Team1127cont2_1.java",
"\n" +
"@SuppressWarnings(\"unused\")\n" +
"public team class Team1127cont2_1 {\n" +
" private int teamVal;\n" +
" public class OuterRole playedBy T1127cont2 { \n" +
" private int outerVal;\n" +
" protected String getRStr() -> String getBStr();\n" +
" }\n" +
" public team class Mid { \n" +
" public class InnerRole playedBy OuterRole { \n" +
" private int innerVal;\n" +
" }\n" +
" }\n" +
"}\n" +
" \n"
},
"OK!");
}
// a role tries to hide another role from an outer team scope
// 1.1.28-otjld-role-hides-outer-role-1
public void test1128_roleHidesOuterRole1() {
runNegativeTestMatching(
new String[] {
"Team1128rhor1.java",
"\n" +
"public team class Team1128rhor1 {\n" +
" protected class Role {}\n" +
" protected team class NestedTeam {\n" +
" protected class Role {}\n" +
" }\n" +
"}\n" +
" \n"
},
"1.4(a)");
}
// a callin in a nested role mentions the base class of another toplevel role
// 1.1.29-otjld-nested-callin-1
public void test1129_nestedCallin1() {
runConformTest(
new String[] {
"T1129nc1Main.java",
"\n" +
"import p.T1129nc1_1;\n" +
"import p.T1129nc1_2;\n" +
"public class T1129nc1Main {\n" +
" public static void main(String[] args) {\n" +
" new Team1129nc1();\n" +
" new T1129nc1_2().test(new T1129nc1_1());\n" +
" }\n" +
"}\n" +
" \n",
"p/T1129nc1_1.java",
"\n" +
"package p;\n" +
"public class T1129nc1_1 {\n" +
" public void print() { System.out.print(\"OK\"); }\n" +
"}\n" +
" \n",
"p/T1129nc1_2.java",
"\n" +
"package p;\n" +
"public class T1129nc1_2 {\n" +
" public void test(T1129nc1_1 other) {\n" +
" // nop\n" +
" }\n" +
"}\n" +
" \n",
"Team1129nc1.java",
"\n" +
"import base p.T1129nc1_1;\n" +
"import base p.T1129nc1_2;\n" +
"public team class Team1129nc1 {\n" +
" protected class R1 playedBy T1129nc1_1 {\n" +
" void print() -> void print();\n" +
" }\n" +
" protected team class InnerTeam {\n" +
" protected class R2 playedBy T1129nc1_2 {\n" +
" @SuppressWarnings(\"basecall\")\n" +
" callin void t(R1 other) {\n" +
" other.print();\n" +
" }\n" +
" void t(R1 other) <- replace void test(T1129nc1_1 other);\n" +
" }\n" +
" }\n" +
" Team1129nc1() {\n" +
" new InnerTeam().activate();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a callin in a nested role mentions the base class of another toplevel role - array type - witness for NPE in CallinImplementor
// 1.1.29-otjld-nested-callin-2
public void test1129_nestedCallin2() {
runConformTest(
new String[] {
"T1129nc2Main.java",
"\n" +
"import p.T1129nc2_2;\n" +
"public class T1129nc2Main {\n" +
" public static void main(String[] args) {\n" +
" new Team1129nc2();\n" +
" new T1129nc2_2().getOther()[0].print();\n" +
" }\n" +
"}\n" +
" \n",
"p/T1129nc2_1.java",
"\n" +
"package p;\n" +
"public class T1129nc2_1 {\n" +
" public void print() { System.out.print(\"OK\"); }\n" +
"}\n" +
" \n",
"p/T1129nc2_2.java",
"\n" +
"package p;\n" +
"public class T1129nc2_2 {\n" +
" public T1129nc2_1[] getOther() {\n" +
" return null;\n" +
" }\n" +
"}\n" +
" \n",
"Team1129nc2.java",
"\n" +
"import base p.T1129nc2_1;\n" +
"import base p.T1129nc2_2;\n" +
"public team class Team1129nc2 {\n" +
" protected class R1 playedBy T1129nc2_1 {\n" +
" protected R1() {\n" +
" base();\n" +
" }\n" +
" }\n" +
" protected team class InnerTeam {\n" +
" protected class R2 playedBy T1129nc2_2 {\n" +
" @SuppressWarnings(\"basecall\")\n" +
" callin R1[] getOther() {\n" +
" return new R1[]{new R1()};\n" +
" }\n" +
" R1[] getOther() <- replace T1129nc2_1[] getOther();\n" +
" }\n" +
" }\n" +
" Team1129nc2() {\n" +
" new InnerTeam().activate();\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a callin mentions a nested role in its signature - binding without signatures
// 1.1.29-otjld-nested-callin-3
public void test1129_nestedCallin3() {
runConformTest(
new String[] {
"Team1129nc3.java",
"\n" +
"public team class Team1129nc3 {\n" +
" protected team class Mid playedBy T1129nc3 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class InnerRole playedBy T1129nc3.InnerBase {\n" +
" protected void test() -> void test();\n" +
" }\n" +
" callin void intercept(InnerRole ir) {\n" +
" base.intercept(ir);\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" intercept <- replace joinpoint;\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1129nc3().activate();\n" +
" new T1129nc3().start();\n" +
" }\n" +
"}\n" +
" \n",
"T1129nc3.java",
"\n" +
"public class T1129nc3 {\n" +
" void joinpoint(InnerBase ib) {\n" +
" ib.test();\n" +
" }\n" +
" private static class InnerBase { \n" +
" void test() { System.out.print(\"O\"); }\n" +
" }\n" +
" void start() {\n" +
" joinpoint(new InnerBase());\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a callin mentions a nested role in its signature - binding with signatures
// 1.1.29-otjld-nested-callin-4
public void test1129_nestedCallin4() {
runConformTest(
new String[] {
"Team1129nc4.java",
"\n" +
"public team class Team1129nc4 {\n" +
" protected team class Mid playedBy T1129nc4 {\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" protected class InnerRole playedBy T1129nc4.InnerBase {\n" +
" protected void test() -> void test();\n" +
" }\n" +
" callin void intercept(InnerRole ir) {\n" +
" base.intercept(ir);\n" +
" System.out.print(\"K\");\n" +
" }\n" +
" @SuppressWarnings(\"decapsulation\")\n" +
" void intercept(InnerRole ir) <- replace void joinpoint(T1129nc4.InnerBase ib);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1129nc4().activate();\n" +
" new T1129nc4().start();\n" +
" }\n" +
"}\n" +
" \n",
"T1129nc4.java",
"\n" +
"public class T1129nc4 {\n" +
" void joinpoint(InnerBase ib) {\n" +
" ib.test();\n" +
" }\n" +
" private static class InnerBase { \n" +
" void test() { System.out.print(\"O\"); }\n" +
" }\n" +
" void start() {\n" +
" joinpoint(new InnerBase());\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// a third-level role has a callin
// 1.1.30-otjld-deeply-nested-team-1
public void test1130_deeplyNestedTeam1() {
runConformTest(
new String[] {
"Team1130dnt1.java",
"\n" +
"public team class Team1130dnt1 {\n" +
" protected team class Level1 playedBy T1130dnt1 {\n" +
" @SuppressWarnings(\"roleinstantiation\")\n" +
" public Level1(T1130dnt1 b) {\n" +
" new Level2(b);\n" +
" }\n" +
" protected team class Level2 playedBy T1130dnt1 {\n" +
" protected Level2 (T1130dnt1 b) {\n" +
" this.activate();\n" +
" }\n" +
" Level3 innermost;\n" +
" protected class Level3 playedBy T1130dnt1 {\n" +
" k <- after wurgs;\n" +
" void k() {\n" +
" System.out.print(\"K\");\n" +
" } \n" +
" }\n" +
" }\n" +
" }\n" +
" @SuppressWarnings(\"roleinstantiation\")\n" +
" Team1130dnt1(T1130dnt1 b) {\n" +
" new Level1(b);\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" T1130dnt1 b = new T1130dnt1();\n" +
" new Team1130dnt1(b);\n" +
" b.wurgs();\n" +
" }\n" +
"}\n" +
" \n",
"T1130dnt1.java",
"\n" +
"public class T1130dnt1 {\n" +
" void wurgs() {\n" +
" System.out.print(\"O\");\n" +
" }\n" +
"}\n" +
" \n"
},
"OK");
}
// role refers to base of sibling role - witness for NPE in TeamAnchor.getStrengthenedRole() resp. AssertionError in RTB.<init>
// 1.1.31-otjld-stacked-teams-1
public void test1131_stackedTeams1() {
runConformTest(
new String[] {
"Team1131lt1_2.java",
"\n" +
"public team class Team1131lt1_2 {\n" +
" protected class R2 playedBy Team1131lt1_1 {\n" +
" getData <- replace getR1\n" +
" base when (!isExecutingCallin());\n" +
" @SuppressWarnings(\"basecall\")\n" +
" callin R1<@base> getData() {\n" +
" R3 r3 = new R3();\n" +
" return r3.calculate(this);\n" +
" }\n" +
" }\n" +
" protected class R3 {\n" +
" protected R1<@lowerTeam> calculate(final Team1131lt1_1 lowerTeam) {\n" +
" return lowerTeam.getR1(\"OK\");\n" +
" }\n" +
" }\n" +
" void test() {\n" +
" this.activate();\n" +
" final Team1131lt1_1 t1 = new Team1131lt1_1();\n" +
" System.out.print(t1.getR1(\"NOTOK\"));\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1131lt1_2().test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1131lt1_1.java",
"\n" +
"public team class Team1131lt1_1 {\n" +
" public class R1 {\n" +
" String val;\n" +
" public R1(String v) { this.val = v; }\n" +
" public String toString() { return val; }\n" +
" }\n" +
" public R1 getR1(String v) { return new R1(v); }\n" +
"}\n" +
" \n"
},
"OK");
}
// role refers to base of sibling role - witness for NPE in TeamAnchor.getStrengthenedRole() resp. AssertionError in RTB.<init> - error case
// 1.1.31-otjld-stacked-teams-2
public void test1131_stackedTeams2() {
runNegativeTestMatching(
new String[] {
"Team1131lt2_2.java",
"\n" +
"public team class Team1131lt2_2 {\n" +
" protected class R2 playedBy Team1131lt2_1 {\n" +
" getData <- replace getR1\n" +
" base when (!isExecutingCallin());\n" +
" @SuppressWarnings(\"basecall\")\n" +
" callin R1<@base> getData() {\n" +
" R3 r3 = new R3();\n" +
" R2 r = this;\n" +
" return r3.calculate(r);\n" +
" }\n" +
" }\n" +
" protected class R3 {\n" +
" protected R1<@lowerTeam> calculate(final Team1131lt2_1 lowerTeam) {\n" +
" return lowerTeam.getR1(\"OK\");\n" +
" }\n" +
" }\n" +
" void test() {\n" +
" this.activate();\n" +
" final Team1131lt2_1 t1 = new Team1131lt2_1();\n" +
" System.out.print(t1.getR1(\"NOTOK\"));\n" +
" }\n" +
" public static void main(String[] args) {\n" +
" new Team1131lt2_2().test();\n" +
" }\n" +
"}\n" +
" \n",
"Team1131lt2_1.java",
"\n" +
"public team class Team1131lt2_1 {\n" +
" public class R1 {\n" +
" String val;\n" +
" public R1(String v) { this.val = v; }\n" +
" public String toString() { return val; }\n" +
" }\n" +
" public R1 getR1(String v) { return new R1(v); }\n" +
"}\n" +
" \n"
},
"1.2.2(e)");
}
}