git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@11434 626c5289-ae23-0410-ae9c-e8d60b6d4f22
150 lines
3.4 KiB
PHP
150 lines
3.4 KiB
PHP
<?php
|
|
|
|
require "tests.php";
|
|
require "director_classic.php";
|
|
|
|
// No new functions
|
|
check::functions(array(being_id,person_id,child_id,grandchild_id,caller_delcallback,caller_setcallback,caller_resetcallback,caller_call,caller_baseclass));
|
|
// No new classes
|
|
check::classes(array(Being,Person,Child,GrandChild,OrphanPerson,OrphanChild,Caller));
|
|
// now new vars
|
|
check::globals(array());
|
|
|
|
class TargetLangPerson extends Person {
|
|
function id() {
|
|
$identifier = "TargetLangPerson";
|
|
return $identifier;
|
|
}
|
|
}
|
|
|
|
class TargetLangChild extends Child {
|
|
function id() {
|
|
$identifier = "TargetLangChild";
|
|
return $identifier;
|
|
}
|
|
}
|
|
|
|
class TargetLangGrandChild extends GrandChild {
|
|
function id() {
|
|
$identifier = "TargetLangGrandChild";
|
|
return $identifier;
|
|
}
|
|
}
|
|
|
|
# Semis - don't override id() in target language
|
|
class TargetLangSemiPerson extends Person {
|
|
# No id() override
|
|
}
|
|
|
|
class TargetLangSemiChild extends Child {
|
|
# No id() override
|
|
}
|
|
|
|
class TargetLangSemiGrandChild extends GrandChild {
|
|
# No id() override
|
|
}
|
|
|
|
# Orphans - don't override id() in C++
|
|
class TargetLangOrphanPerson extends OrphanPerson {
|
|
function id() {
|
|
$identifier = "TargetLangOrphanPerson";
|
|
return $identifier;
|
|
}
|
|
}
|
|
|
|
class TargetLangOrphanChild extends OrphanChild {
|
|
function id() {
|
|
$identifier = "TargetLangOrphanChild";
|
|
return $identifier;
|
|
}
|
|
}
|
|
|
|
function mycheck($person, $expected) {
|
|
$debug = 0;
|
|
# Normal target language polymorphic call
|
|
$ret = $person->id();
|
|
if ($debug)
|
|
print $ret . "\n";
|
|
check::equal($ret, $expected, "#1 failed");
|
|
|
|
# Polymorphic call from C++
|
|
$caller = new Caller();
|
|
$caller->setCallback($person);
|
|
$ret = $caller->call();
|
|
if ($debug)
|
|
print $ret . "\n";
|
|
check::equal($ret, $expected, "#2 failed");
|
|
|
|
# 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 . "\n";
|
|
# TODO: Currently we do not track the dynamic type of returned
|
|
# objects, so in case it's possible that the dynamic type is not equal
|
|
# to the static type, we skip this check.
|
|
if (get_parent_class($person) === false)
|
|
check::equal($ret, $expected, "#3 failed");
|
|
|
|
$caller->resetCallback();
|
|
if ($debug)
|
|
print "----------------------------------------\n";
|
|
}
|
|
|
|
$person = new Person();
|
|
mycheck($person, "Person");
|
|
unset($person);
|
|
|
|
$person = new Child();
|
|
mycheck($person, "Child");
|
|
unset($person);
|
|
|
|
$person = new GrandChild();
|
|
mycheck($person, "GrandChild");
|
|
unset($person);
|
|
|
|
$person = new TargetLangPerson();
|
|
mycheck($person, "TargetLangPerson");
|
|
unset($person);
|
|
|
|
$person = new TargetLangChild();
|
|
mycheck($person, "TargetLangChild");
|
|
unset($person);
|
|
|
|
$person = new TargetLangGrandChild();
|
|
mycheck($person, "TargetLangGrandChild");
|
|
unset($person);
|
|
|
|
# Semis - don't override id() in target language
|
|
$person = new TargetLangSemiPerson();
|
|
mycheck($person, "Person");
|
|
unset($person);
|
|
|
|
$person = new TargetLangSemiChild();
|
|
mycheck($person, "Child");
|
|
unset($person);
|
|
|
|
$person = new TargetLangSemiGrandChild();
|
|
mycheck($person, "GrandChild");
|
|
unset($person);
|
|
|
|
# Orphans - don't override id() in C++
|
|
$person = new OrphanPerson();
|
|
mycheck($person, "Person");
|
|
unset($person);
|
|
|
|
$person = new OrphanChild();
|
|
mycheck($person, "Child");
|
|
unset($person);
|
|
|
|
$person = new TargetLangOrphanPerson();
|
|
mycheck($person, "TargetLangOrphanPerson");
|
|
unset($person);
|
|
|
|
$person = new TargetLangOrphanChild();
|
|
mycheck($person, "TargetLangOrphanChild");
|
|
unset($person);
|
|
|
|
check::done();
|
|
?>
|