from director_classic import * class TargetLangPerson(Person): def __init__(self): Person.__init__(self) def id(self): identifier = "TargetLangPerson" return identifier class TargetLangChild(Child): def __init__(self): Child.__init__(self) def id(self): identifier = "TargetLangChild" return identifier class TargetLangGrandChild(GrandChild): def __init__(self): GrandChild.__init__(self) def id(self): identifier = "TargetLangGrandChild" return identifier # Semis - don't override id() in target language class TargetLangSemiPerson(Person): def __init__(self): Person.__init__(self) # No id() override class TargetLangSemiChild(Child): def __init__(self): Child.__init__(self) # No id() override class TargetLangSemiGrandChild(GrandChild): def __init__(self): GrandChild.__init__(self) # No id() override # Orphans - don't override id() in C++ class TargetLangOrphanPerson(OrphanPerson): def __init__(self): OrphanPerson.__init__(self) def id(self): identifier = "TargetLangOrphanPerson" return identifier class TargetLangOrphanChild(OrphanChild): def __init__(self): Child.__init__(self) def id(self): identifier = "TargetLangOrphanChild" return identifier def check(person, expected): debug = 0 # Normal target language polymorphic call ret = person.id() if (debug): print(ret) if (ret != expected): raise ("Failed. Received: " + ret + " Expected: " + expected) # Polymorphic call from C++ caller = Caller() caller.setCallback(person) ret = caller.call() if (debug): print(ret) if (ret != expected): raise ("Failed. Received: " + ret + " Expected: " + expected) # Polymorphic call of object created in target language and passed to C++ and back again baseclass = caller.baseClass() ret = baseclass.id() if (debug): print(ret) if (ret != expected): raise ("Failed. Received: " + ret + " Expected: " + expected) caller.resetCallback() if (debug): print("----------------------------------------") person = Person(); check(person, "Person"); del person person = Child(); check(person, "Child"); del person person = GrandChild(); check(person, "GrandChild"); del person person = TargetLangPerson(); check(person, "TargetLangPerson"); del person person = TargetLangChild(); check(person, "TargetLangChild"); del person person = TargetLangGrandChild(); check(person, "TargetLangGrandChild"); del person # Semis - don't override id() in target language person = TargetLangSemiPerson(); check(person, "Person"); del person person = TargetLangSemiChild(); check(person, "Child"); del person person = TargetLangSemiGrandChild(); check(person, "GrandChild"); del person # Orphans - don't override id() in C++ person = OrphanPerson(); check(person, "Person"); del person person = OrphanChild(); check(person, "Child"); del person person = TargetLangOrphanPerson(); check(person, "TargetLangOrphanPerson"); del person person = TargetLangOrphanChild(); check(person, "TargetLangOrphanChild"); del person