diff options
Diffstat (limited to 'Examples/test-suite/python/director_classic_runme.py')
| -rw-r--r-- | Examples/test-suite/python/director_classic_runme.py | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/Examples/test-suite/python/director_classic_runme.py b/Examples/test-suite/python/director_classic_runme.py new file mode 100644 index 0000000..7e18a9a --- /dev/null +++ b/Examples/test-suite/python/director_classic_runme.py @@ -0,0 +1,142 @@ +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 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 + |
