| 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): | |
| OrphanChild.__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 RuntimeError( | |
| "Failed. Received: " + str(ret) + " Expected: " + expected) | |
| # Polymorphic call from C++ | |
| caller = Caller() | |
| caller.setCallback(person) | |
| ret = caller.call() | |
| if (debug): | |
| print(ret) | |
| if (ret != expected): | |
| raise RuntimeError( | |
| "Failed. Received: " + str(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 RuntimeError( | |
| "Failed. Received: " + str(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 |