Skip to content

Commit caf4495

Browse files
committed
Add unit tests for inheritance with multiple layers
1 parent 6b0e0dc commit caf4495

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

src/test_module.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class TestBaseType
1111
virtual ~TestBaseType() {}
1212
virtual int func() { return 0; }
1313

14+
int base_only_func() { return -9; }
15+
1416
const TestBaseType &constMe() const { return *this; }
1517

1618
int val;
@@ -41,11 +43,22 @@ class TestDerivedType : public TestBaseType
4143
TestDerivedType &operator=(const TestDerivedType &);
4244
};
4345

46+
class TestMoreDerivedType : public TestDerivedType
47+
{
48+
public:
49+
virtual ~TestMoreDerivedType() {}
50+
};
51+
4452
boost::shared_ptr<TestBaseType> derived_type_factory()
4553
{
4654
return boost::shared_ptr<TestBaseType>(new TestDerivedType());
4755
}
4856

57+
boost::shared_ptr<TestBaseType> more_derived_type_factory()
58+
{
59+
return boost::shared_ptr<TestBaseType>(new TestMoreDerivedType());
60+
}
61+
4962
std::string hello_world()
5063
{
5164
return "Hello World";
@@ -76,6 +89,7 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo
7689

7790
m->add(chaiscript::user_type<TestBaseType>(), "TestBaseType");
7891
m->add(chaiscript::user_type<TestDerivedType>(), "TestDerivedType");
92+
m->add(chaiscript::user_type<TestMoreDerivedType>(), "TestMoreDerivedType");
7993

8094
m->add(chaiscript::constructor<TestBaseType ()>(), "TestBaseType");
8195
// m->add(chaiscript::constructor<TestBaseType (int)>(), "TestBaseType");
@@ -85,15 +99,23 @@ CHAISCRIPT_MODULE_EXPORT chaiscript::ModulePtr create_chaiscript_module_test_mo
8599
m->add(chaiscript::constructor<TestDerivedType ()>(), "TestDerivedType");
86100
m->add(chaiscript::constructor<TestDerivedType (const TestDerivedType &)>(), "TestDerivedType");
87101

102+
m->add(chaiscript::constructor<TestMoreDerivedType ()>(), "TestMoreDerivedType");
103+
m->add(chaiscript::constructor<TestMoreDerivedType (const TestMoreDerivedType &)>(), "TestMoreDerivedType");
104+
105+
/// \todo automatic chaining of base classes?
88106
m->add(chaiscript::base_class<TestBaseType, TestDerivedType>());
107+
m->add(chaiscript::base_class<TestBaseType, TestMoreDerivedType>());
108+
m->add(chaiscript::base_class<TestDerivedType, TestMoreDerivedType>());
89109

90110
m->add(chaiscript::fun(&TestDerivedType::derived_only_func), "derived_only_func");
91111

92112
m->add(chaiscript::fun(&derived_type_factory), "derived_type_factory");
113+
m->add(chaiscript::fun(&more_derived_type_factory), "more_derived_type_factory");
93114

94115
m->add(chaiscript::fun(&TestBaseType::func), "func");
95116
m->add(chaiscript::fun(&TestBaseType::val), "val");
96117
m->add(chaiscript::fun(&TestBaseType::const_val), "const_val");
118+
m->add(chaiscript::fun(&TestBaseType::base_only_func), "base_only_func");
97119

98120
m->add(chaiscript::fun(&get_new_int), "get_new_int");
99121

unittests/inheritance.chai

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,11 @@ assert_equal(t.derived_only_func(), 19);
2525
var d := derived_type_factory();
2626
assert_equal(d.derived_only_func(), 19);
2727

28+
var t2 = TestMoreDerivedType();
29+
assert_equal(t2.derived_only_func(), 19);
30+
assert_equal(t2.base_only_func(), -9);
31+
32+
var md := more_derived_type_factory();
33+
assert_equal(md.derived_only_func(), 19);
34+
assert_equal(md.base_only_func(), -9);
35+

0 commit comments

Comments
 (0)