This is an automated email from the git hooks/post-receive script. odyx pushed a commit to branch debian/master in repository colobot.
commit d411c5ebc0a56a28a707b897d545fdde1393b086 Merge: b9d4d57 71aa7e4 Author: krzys-h <krzy...@interia.pl> Date: Tue Aug 9 21:10:07 2016 +0200 Allow circular references from different classes (#814) Conflicts: test/unit/CBot/CBot_test.cpp src/CBot/CBotClass.cpp | 33 +++++++++++++++++++++++++++++++-- src/CBot/CBotClass.h | 10 ++++++++++ src/CBot/CBotProgram.cpp | 4 ++++ test/unit/CBot/CBot_test.cpp | 35 +++++++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 2 deletions(-) diff --cc test/unit/CBot/CBot_test.cpp index d7cc877,7158bf0..da9fd95 --- a/test/unit/CBot/CBot_test.cpp +++ b/test/unit/CBot/CBot_test.cpp @@@ -1006,283 -1006,41 +1006,318 @@@ TEST_F(CBotUT, ClassStringAdd_Issue535 ); } +TEST_F(CBotUT, ClassInheritanceAssignment) +{ + ExecuteTest( + "public class BaseClass {}\n" + "public class MidClass extends BaseClass {}\n" + "public class SubClass extends MidClass {}\n" + "extern void ClassInheritanceVars()\n" + "{\n" + " BaseClass bc = new MidClass();\n" + " MidClass mc = bc;\n" + " mc = new SubClass();\n" + " SubClass sc = mc;\n" + " bc = mc;\n" + " bc = new MidClass();\n" + " bc = new SubClass();\n" + " sc = bc;\n" + "}\n" + ); +} + +TEST_F(CBotUT, ClassInheritanceVars) +{ + ExecuteTest( + "public class BaseClass {\n" + " int a = 123;\n" + " int b = 456;\n" + " int c = 789;\n" + "}\n" + "public class MidClass extends BaseClass {\n" + " int b = 1011;\n" + " int c = 1213;\n" + " int d = 1415;\n" + "}\n" + "public class SubClass extends MidClass {\n" + " int c = 1617;\n" + " int d = 1819;\n" + " int e = 2021;\n" + "}\n" + "extern void ClassInheritanceVars()\n" + "{\n" + " BaseClass bc();\n" + " ASSERT(bc.a == 123);\n" + " ASSERT(bc.b == 456);\n" + " ASSERT(bc.c == 789);\n" + " MidClass mc();\n" + " ASSERT(mc.a == 123);\n" + " ASSERT(mc.b == 1011);\n" + " ASSERT(mc.c == 1213);\n" + " ASSERT(mc.d == 1415);\n" + " SubClass sc();\n" + " ASSERT(sc.a == 123);\n" + " ASSERT(sc.b == 1011);\n" + " ASSERT(sc.c == 1617);\n" + " ASSERT(sc.d == 1819);\n" + " ASSERT(sc.e == 2021);\n" + // Test polymorphism + " bc = mc;\n" + " ASSERT(bc.a == 123);\n" + " ASSERT(bc.b == 456);\n" + " ASSERT(bc.c == 789);\n" + " mc = sc;\n" + " ASSERT(mc.a == 123);\n" + " ASSERT(mc.b == 1011);\n" + " ASSERT(mc.c == 1213);\n" + " ASSERT(mc.d == 1415);\n" + "}\n" + ); +} + +TEST_F(CBotUT, ClassInheritanceMethods) +{ + ExecuteTest( + "public class BaseClass {\n" + " int a = 123;\n" + " int b = 456;\n" + " int c = 789;\n" + " int testOverride() { return 123; }\n" + " int testNoOverride() { return 456; }\n" + " int testInsideBaseClass() {\n" + " ASSERT(a == 123);\n" + " ASSERT(b == 456);\n" + " ASSERT(c == 789);\n" + " ASSERT(456 == testNoOverride());\n" + " return c;\n" + " }\n" + " int testInsideBaseOverride() { return testOverride(); }\n" + "}\n" + "public class MidClass extends BaseClass {\n" + " int b = 1011;\n" + " int c = 1213;\n" + " int d = 1415;\n" + " int testOverride() { return 1011; }\n" + " int testInsideMidClass() {\n" + " ASSERT(a == 123);\n" + " ASSERT(b == 1011);\n" + " ASSERT(c == 1213);\n" + " ASSERT(d == 1415);\n" + " ASSERT(456 == testNoOverride());\n" + " ASSERT(789 == testInsideBaseClass());\n" + " return c;\n" + " }\n" + " int testSuper() {\n" + " ASSERT(super.a == 123);\n" + " ASSERT(super.b == 456);\n" + " ASSERT(super.c == 789);\n" + " ASSERT(123 == super.testOverride());\n" + " ASSERT(789 == super.testInsideBaseClass());\n" + " return super.testInsideBaseOverride();\n" + " }\n" + " int testInsideMidOverride() { return testOverride(); }\n" + "}\n" + "public class SubClass extends MidClass {\n" + " int c = 1617;\n" + " int d = 1819;\n" + " int e = 2021;\n" + " int testOverride() { return 1617; }\n" + " int testInsideSubClass() {\n" + " ASSERT(a == 123);\n" + " ASSERT(b == 1011);\n" + " ASSERT(c == 1617);\n" + " ASSERT(d == 1819);\n" + " ASSERT(e == 2021);\n" + " ASSERT(456 == testNoOverride());\n" + " ASSERT(789 == testInsideBaseClass());\n" + " ASSERT(1213 == testInsideMidClass());\n" + " return c;\n" + " }\n" + " int testSuper() {\n" + " ASSERT(super.a == 123);\n" + " ASSERT(super.b == 1011);\n" + " ASSERT(super.c == 1213);\n" + " ASSERT(super.d == 1415);\n" + " ASSERT(1011 == super.testOverride());\n" + " ASSERT(789 == super.testInsideBaseClass());\n" + " ASSERT(1213 == super.testInsideMidClass());\n" + " return super.testSuper();\n" + " }\n" + " int testInsideSubOverride() { return testOverride(); }\n" + "}\n" + "extern void InheritanceMethods()\n" + "{\n" + " BaseClass bc();\n" + " ASSERT(123 == bc.testOverride());\n" + " ASSERT(456 == bc.testNoOverride());\n" + " ASSERT(789 == bc.testInsideBaseClass());\n" + " ASSERT(123 == bc.testInsideBaseOverride());\n" + " MidClass mc();\n" + " ASSERT(1011 == mc.testSuper());\n" + " ASSERT(1011 == mc.testOverride());\n" + " ASSERT(456 == mc.testNoOverride());\n" + " ASSERT(789 == mc.testInsideBaseClass());\n" + " ASSERT(1213 == mc.testInsideMidClass());\n" + " ASSERT(1011 == mc.testInsideBaseOverride());\n" + " ASSERT(1011 == mc.testInsideMidOverride());\n" + " SubClass sc();\n" + " ASSERT(1617 == sc.testSuper());\n" + " ASSERT(1617 == sc.testOverride());\n" + " ASSERT(456 == sc.testNoOverride());\n" + " ASSERT(789 == sc.testInsideBaseClass());\n" + " ASSERT(1213 == sc.testInsideMidClass());\n" + " ASSERT(1617 == sc.testInsideSubClass());\n" + " ASSERT(1617 == sc.testInsideBaseOverride());\n" + " ASSERT(1617 == sc.testInsideMidOverride());\n" + " ASSERT(1617 == sc.testInsideSubOverride());\n" + // Test polymorphism + " bc = mc;\n" + " ASSERT(1011 == bc.testOverride());\n" + " ASSERT(789 == bc.testInsideBaseClass());\n" + " ASSERT(1011 == bc.testInsideBaseOverride());\n" + " bc = sc;\n" + " ASSERT(1617 == bc.testOverride());\n" + " ASSERT(789 == bc.testInsideBaseClass());\n" + " ASSERT(1617 == bc.testInsideBaseOverride());\n" + " mc = sc;\n" + " ASSERT(1617 == mc.testSuper());\n" + " ASSERT(1617 == mc.testOverride());\n" + " ASSERT(789 == mc.testInsideBaseClass());\n" + " ASSERT(1213 == mc.testInsideMidClass());\n" + " ASSERT(1617 == mc.testInsideBaseOverride());\n" + " ASSERT(1617 == mc.testInsideMidOverride());\n" + "}\n" + ); +} + +TEST_F(CBotUT, ClassInheritanceTestThis) +{ + ExecuteTest( + "public class BaseClass {\n" + " int a = 123;\n" + " int b = 456;\n" + " int c = 789;\n" + " void testBaseMembersAndParams(int a, int b, int c) {\n" + " ASSERT(a != 123);\n" + " ASSERT(b != 456);\n" + " ASSERT(c != 789);\n" + " ASSERT(this.a == 123);\n" + " ASSERT(this.b == 456);\n" + " ASSERT(this.c == 789);\n" + " }\n" + " BaseClass testSuperReturnThis(){ return this; }\n" + " BaseClass testReturnThisFromBaseClass() { return this; }\n" + "}\n" + "public class MidClass extends BaseClass {\n" + " int b = 1011;\n" + " int c = 1213;\n" + " int d = 1415;\n" + " void testMidMembersAndParams(int a, int b, int c, int d) {\n" + " ASSERT(a != 123);\n" + " ASSERT(b != 1011);\n" + " ASSERT(c != 1213);\n" + " ASSERT(d != 1415);\n" + " ASSERT(this.a == 123);\n" + " ASSERT(this.b == 1011);\n" + " ASSERT(this.c == 1213);\n" + " ASSERT(this.d == 1415);\n" + " }\n" + " MidClass testSuperReturnThis(){ return super.testSuperReturnThis(); }\n" + " MidClass testReturnThisFromMidClass() { return this; }\n" + "}\n" + "public class SubClass extends MidClass {\n" + " int c = 1617;\n" + " int d = 1819;\n" + " int e = 2021;\n" + " void testSubMembersAndParams(int a, int b, int c, int d, int e) {\n" + " ASSERT(a != 123);\n" + " ASSERT(b != 1011);\n" + " ASSERT(c != 1617);\n" + " ASSERT(d != 1819);\n" + " ASSERT(e != 2021);\n" + " ASSERT(this.a == 123);\n" + " ASSERT(this.b == 1011);\n" + " ASSERT(this.c == 1617);\n" + " ASSERT(this.d == 1819);\n" + " ASSERT(this.e == 2021);\n" + " }\n" + " SubClass testSuperReturnThis(){ return super.testSuperReturnThis(); }\n" + " SubClass testReturnThisFromSubClass() { return this; }\n" + "}\n" + "extern void ClassInheritanceTestThis()\n" + "{\n" + " BaseClass bc();\n" + " MidClass mc();\n" + " SubClass sc();\n" + " ASSERT(bc == bc.testSuperReturnThis());\n" + " ASSERT(bc == bc.testReturnThisFromBaseClass());\n" + " bc.testBaseMembersAndParams(-1, -2, -3);\n" + " ASSERT(mc == mc.testSuperReturnThis());\n" + " ASSERT(mc == mc.testReturnThisFromBaseClass());\n" + " ASSERT(mc == mc.testReturnThisFromMidClass());\n" + " mc.testBaseMembersAndParams(-1, -2, -3);\n" + " mc.testMidMembersAndParams(-1, -2, -3, -4);\n" + " ASSERT(sc == sc.testSuperReturnThis());\n" + " ASSERT(sc == sc.testReturnThisFromBaseClass());\n" + " ASSERT(sc == sc.testReturnThisFromMidClass());\n" + " ASSERT(sc == sc.testReturnThisFromSubClass());\n" + " sc.testBaseMembersAndParams(-1, -2, -3);\n" + " sc.testMidMembersAndParams(-1, -2, -3, -4);\n" + " sc.testSubMembersAndParams(-1, -2, -3, -4, -5);\n" + // Test polymorphism + " bc = mc;\n" + " ASSERT(mc == bc.testSuperReturnThis());\n" + " ASSERT(mc == bc.testReturnThisFromBaseClass());\n" + " bc.testBaseMembersAndParams(-1, -2, -3);\n" + " bc = sc;\n" + " ASSERT(sc == bc.testSuperReturnThis());\n" + " ASSERT(sc == bc.testReturnThisFromBaseClass());\n" + " bc.testBaseMembersAndParams(-1, -2, -3);\n" + " mc = sc;\n" + " ASSERT(sc == mc.testSuperReturnThis());\n" + " ASSERT(sc == mc.testReturnThisFromBaseClass());\n" + " ASSERT(sc == mc.testReturnThisFromMidClass());\n" + " mc.testBaseMembersAndParams(-1, -2, -3);\n" + " mc.testMidMembersAndParams(-1, -2, -3, -4);\n" + "}\n" + ); +} + + TEST_F(CBotUT, ClassCompileCircularReference_Issue433) + { + ExecuteTest( + "public class OtherClass {\n" + " TestClass testclass;\n" + "}\n" + "public class TestClass {\n" + " int test;\n" + " OtherClass otherclass;\n" + "}\n" + "extern void TestCompileCircularReference()\n" + "{\n" + " TestClass t();\n" + "}\n" + ); + } + + TEST_F(CBotUT, ClassTestClassDefinedAfterReference) + { + ExecuteTest( + "public class OtherClass {\n" + " TestClass testclass = new TestClass();\n" + "}\n" + "public class TestClass {\n" + " int test = 246;\n" + "}\n" + "extern void TestDefinedAfterReference()\n" + "{\n" + " OtherClass o();\n" + " TestClass t = o.testclass;\n" + " ASSERT(t.test == 246);\n" + "}\n" + ); + } + TEST_F(CBotUT, String) { ExecuteTest( -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits