diff options
Diffstat (limited to 'Examples/test-suite/octave/director_classic_runme.m')
-rw-r--r-- | Examples/test-suite/octave/director_classic_runme.m | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Examples/test-suite/octave/director_classic_runme.m b/Examples/test-suite/octave/director_classic_runme.m new file mode 100644 index 000000000..c1f8e95d4 --- /dev/null +++ b/Examples/test-suite/octave/director_classic_runme.m @@ -0,0 +1,98 @@ +director_classic + +TargetLangPerson=@() subclass(Person(),'id',@(self) "TargetLangPerson"); +TargetLangChild=@() subclass(Child(),'id',@(self) "TargetLangChild"); +TargetLangGrandChild=@() subclass(GrandChild(),'id',@(self) "TargetLangGrandChild"); + +# Semis - don't override id() in target language +TargetLangSemiPerson=@() subclass(Person()); +TargetLangSemiChild=@() subclass(Child()); +TargetLangSemiGrandChild=@() subclass(GrandChild()); + +# Orphans - don't override id() in C++ +TargetLangOrphanPerson=@() subclass(OrphanPerson(),'id',@(self) "TargetLangOrphanPerson"); +TargetLangOrphanChild=@() subclass(OrphanChild(),'id',@(self) "TargetLangOrphanChild"); + + +function check(person,expected) + global Caller; + + # Normal target language polymorphic call + ret = person.id(); + if (ret != expected) + raise ("Failed. Received: " + ret + " Expected: " + expected); + endif + + # Polymorphic call from C++ + caller = Caller(); + caller.setCallback(person); + ret = caller.call(); + if (ret != expected) + error ("Failed. Received: " + ret + " Expected: " + expected); + endif + + # Polymorphic call of object created in target language and passed to C++ and back again + baseclass = caller.baseClass(); + ret = baseclass.id(); + if (ret != expected) + error ("Failed. Received: " + ret + " Expected: " + expected); + endif + + caller.resetCallback(); +end + + +person = Person(); +check(person, "Person"); +clear person; + +person = Child(); +check(person, "Child"); +clear person; + +person = GrandChild(); +check(person, "GrandChild"); +clear person; + +person = TargetLangPerson(); +check(person, "TargetLangPerson"); +clear person; + +person = TargetLangChild(); +check(person, "TargetLangChild"); +clear person; + +person = TargetLangGrandChild(); +check(person, "TargetLangGrandChild"); +clear person; + +# Semis - don't override id() in target language +person = TargetLangSemiPerson(); +check(person, "Person"); +clear person; + +person = TargetLangSemiChild(); +check(person, "Child"); +clear person; + +person = TargetLangSemiGrandChild(); +check(person, "GrandChild"); +clear person; + +# Orphans - don't override id() in C++ +person = OrphanPerson(); +check(person, "Person"); +clear person; + +person = OrphanChild(); +check(person, "Child"); +clear person; + +person = TargetLangOrphanPerson(); +check(person, "TargetLangOrphanPerson"); +clear person; + +person = TargetLangOrphanChild(); +check(person, "TargetLangOrphanChild"); +clear person; + |