summaryrefslogtreecommitdiff
path: root/Examples/test-suite/python/director_classic_runme.py
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/python/director_classic_runme.py')
-rw-r--r--Examples/test-suite/python/director_classic_runme.py142
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
+