Add more unit tests for inheritance

dev-new-models
melex750 2016-08-07 10:01:10 -04:00
parent 6b8e240d26
commit 8b3c4302d2
1 changed files with 102 additions and 27 deletions

View File

@ -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(