| 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; |
| |