diff --git a/test/unit/CBot/CBot_test.cpp b/test/unit/CBot/CBot_test.cpp index de07c2ab..6d5954a6 100644 --- a/test/unit/CBot/CBot_test.cpp +++ b/test/unit/CBot/CBot_test.cpp @@ -1006,6 +1006,26 @@ 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( @@ -1041,7 +1061,16 @@ TEST_F(CBotUT, ClassInheritanceVars) " ASSERT(sc.c == 1617);\n" " ASSERT(sc.d == 1819);\n" " ASSERT(sc.e == 2021);\n" - // TODO Add tests for polymorphism here + // 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" ); } @@ -1078,6 +1107,14 @@ TEST_F(CBotUT, ClassInheritanceMethods) " 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" @@ -1096,6 +1133,16 @@ TEST_F(CBotUT, ClassInheritanceMethods) " 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" @@ -1106,6 +1153,7 @@ TEST_F(CBotUT, ClassInheritanceMethods) " 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" @@ -1113,6 +1161,7 @@ TEST_F(CBotUT, ClassInheritanceMethods) " 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" @@ -1121,7 +1170,22 @@ TEST_F(CBotUT, ClassInheritanceMethods) " ASSERT(1617 == sc.testInsideBaseOverride());\n" " ASSERT(1617 == sc.testInsideMidOverride());\n" " ASSERT(1617 == sc.testInsideSubOverride());\n" - // TODO Add tests for polymorphism here + // 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" ); } @@ -1141,6 +1205,7 @@ TEST_F(CBotUT, ClassInheritanceTestThis) " 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" @@ -1157,6 +1222,7 @@ TEST_F(CBotUT, ClassInheritanceTestThis) " 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" @@ -1175,39 +1241,48 @@ TEST_F(CBotUT, ClassInheritanceTestThis) " 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 b();\n" - " b.testBaseMembersAndParams(-1, -2, -3);\n" - " BaseClass bc = b.testReturnThisFromBaseClass();\n" - " ASSERT(bc == b);\n" - " MidClass m();\n" - " m.testBaseMembersAndParams(-1, -2, -3);\n" - " m.testMidMembersAndParams(-1, -2, -3, -4);\n" - " MidClass mc = m.testReturnThisFromMidClass();\n" - " ASSERT(mc == m);\n" - " mc = m.testReturnThisFromBaseClass();\n" - " ASSERT(mc == m);\n" - " SubClass s();\n" - " s.testBaseMembersAndParams(-1, -2, -3);\n" - " s.testMidMembersAndParams(-1, -2, -3, -4);\n" - " s.testSubMembersAndParams(-1, -2, -3, -4, -5);\n" - " SubClass sc = s.testReturnThisFromSubClass();\n" - " ASSERT(sc == s);\n" - " sc = s.testReturnThisFromBaseClass();\n" - " ASSERT(sc == s);\n" - " sc = s.testReturnThisFromMidClass();\n" - " ASSERT(sc == s);\n" - // TODO Add tests for polymorphism here + " 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" ); } -// TODO TEST_F(CBotUT, ClassInheritanceTestSuper) - - TEST_F(CBotUT, String) { ExecuteTest(