blob: a4d78f19c64832e7ea26fdbd61ea2b032ce6d155 [file] [log] [blame]
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