summaryrefslogtreecommitdiff
path: root/Examples/test-suite/octave/director_classic_runme.m
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/octave/director_classic_runme.m')
-rw-r--r--Examples/test-suite/octave/director_classic_runme.m98
1 files changed, 98 insertions, 0 deletions
diff --git a/Examples/test-suite/octave/director_classic_runme.m b/Examples/test-suite/octave/director_classic_runme.m
new file mode 100644
index 000000000..c1f8e95d4
--- /dev/null
+++ b/Examples/test-suite/octave/director_classic_runme.m
@@ -0,0 +1,98 @@
+director_classic
+
+TargetLangPerson=@() subclass(Person(),'id',@(self) "TargetLangPerson");
+TargetLangChild=@() subclass(Child(),'id',@(self) "TargetLangChild");
+TargetLangGrandChild=@() subclass(GrandChild(),'id',@(self) "TargetLangGrandChild");
+
+# Semis - don't override id() in target language
+TargetLangSemiPerson=@() subclass(Person());
+TargetLangSemiChild=@() subclass(Child());
+TargetLangSemiGrandChild=@() subclass(GrandChild());
+
+# Orphans - don't override id() in C++
+TargetLangOrphanPerson=@() subclass(OrphanPerson(),'id',@(self) "TargetLangOrphanPerson");
+TargetLangOrphanChild=@() subclass(OrphanChild(),'id',@(self) "TargetLangOrphanChild");
+
+
+function check(person,expected)
+ global Caller;
+
+ # Normal target language polymorphic call
+ ret = person.id();
+ if (ret != expected)
+ raise ("Failed. Received: " + ret + " Expected: " + expected);
+ endif
+
+ # Polymorphic call from C++
+ caller = Caller();
+ caller.setCallback(person);
+ ret = caller.call();
+ if (ret != expected)
+ error ("Failed. Received: " + ret + " Expected: " + expected);
+ endif
+
+ # Polymorphic call of object created in target language and passed to C++ and back again
+ baseclass = caller.baseClass();
+ ret = baseclass.id();
+ if (ret != expected)
+ error ("Failed. Received: " + ret + " Expected: " + expected);
+ endif
+
+ caller.resetCallback();
+end
+
+
+person = Person();
+check(person, "Person");
+clear person;
+
+person = Child();
+check(person, "Child");
+clear person;
+
+person = GrandChild();
+check(person, "GrandChild");
+clear person;
+
+person = TargetLangPerson();
+check(person, "TargetLangPerson");
+clear person;
+
+person = TargetLangChild();
+check(person, "TargetLangChild");
+clear person;
+
+person = TargetLangGrandChild();
+check(person, "TargetLangGrandChild");
+clear person;
+
+# Semis - don't override id() in target language
+person = TargetLangSemiPerson();
+check(person, "Person");
+clear person;
+
+person = TargetLangSemiChild();
+check(person, "Child");
+clear person;
+
+person = TargetLangSemiGrandChild();
+check(person, "GrandChild");
+clear person;
+
+# Orphans - don't override id() in C++
+person = OrphanPerson();
+check(person, "Person");
+clear person;
+
+person = OrphanChild();
+check(person, "Child");
+clear person;
+
+person = TargetLangOrphanPerson();
+check(person, "TargetLangOrphanPerson");
+clear person;
+
+person = TargetLangOrphanChild();
+check(person, "TargetLangOrphanChild");
+clear person;
+