| import director_classic.*; |
| |
| public class director_classic_runme { |
| static { |
| try { |
| System.loadLibrary("director_classic"); |
| } catch (UnsatisfiedLinkError e) { |
| System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e); |
| System.exit(1); |
| } |
| } |
| |
| public static void main(String argv[]) |
| { |
| { |
| Person person = new Person(); |
| check(person, "Person"); |
| person.delete(); |
| } |
| { |
| Person person = new Child(); |
| check(person, "Child"); |
| person.delete(); |
| } |
| { |
| Person person = new GrandChild(); |
| check(person, "GrandChild"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangPerson(); |
| check(person, "TargetLangPerson"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangChild(); |
| check(person, "TargetLangChild"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangGrandChild(); |
| check(person, "TargetLangGrandChild"); |
| person.delete(); |
| } |
| |
| // Semis - don't override id() in target language |
| { |
| Person person = new TargetLangSemiPerson(); |
| check(person, "Person"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangSemiChild(); |
| check(person, "Child"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangSemiGrandChild(); |
| check(person, "GrandChild"); |
| person.delete(); |
| } |
| |
| // Orphans - don't override id() in C++ |
| { |
| Person person = new OrphanPerson(); |
| check(person, "Person"); |
| person.delete(); |
| } |
| { |
| Person person = new OrphanChild(); |
| check(person, "Child"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangOrphanPerson(); |
| check(person, "TargetLangOrphanPerson"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangOrphanChild(); |
| check(person, "TargetLangOrphanChild"); |
| person.delete(); |
| } |
| |
| // Duals - id() makes an upcall to the base id() |
| { |
| Person person = new TargetLangDualPerson(); |
| check(person, "TargetLangDualPerson + Person"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangDualChild(); |
| check(person, "TargetLangDualChild + Child"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangDualGrandChild(); |
| check(person, "TargetLangDualGrandChild + GrandChild"); |
| person.delete(); |
| } |
| |
| // Mix Orphans and Duals |
| { |
| Person person = new TargetLangDualOrphanPerson(); |
| check(person, "TargetLangDualOrphanPerson + Person"); |
| person.delete(); |
| } |
| { |
| Person person = new TargetLangDualOrphanChild(); |
| check(person, "TargetLangDualOrphanChild + Child"); |
| person.delete(); |
| } |
| } |
| |
| static void check(Person person, String expected) { |
| String ret; |
| // Normal target language polymorphic call |
| ret = person.id(); |
| if (debug) |
| System.out.println(ret); |
| if (!ret.equals(expected)) |
| throw new RuntimeException("Failed. Received: " + ret + " Expected: " + expected); |
| |
| // Polymorphic call from C++ |
| Caller caller = new Caller(); |
| caller.setCallback(person); |
| ret = caller.call(); |
| if (debug) |
| System.out.println(ret); |
| if (!ret.equals(expected)) |
| throw new RuntimeException("Failed. Received: " + ret + " Expected: " + expected); |
| |
| // Polymorphic call of object created in target language and passed to C++ and back again |
| Person baseclass = caller.baseClass(); |
| ret = baseclass.id(); |
| if (debug) |
| System.out.println(ret); |
| if (!ret.equals(expected)) |
| throw new RuntimeException("Failed. Received: " + ret + " Expected: " + expected); |
| |
| caller.resetCallback(); |
| if (debug) |
| System.out.println("----------------------------------------"); |
| } |
| static boolean debug = false; |
| } |
| |
| class TargetLangPerson extends Person |
| { |
| public TargetLangPerson() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangPerson"; |
| return identifier; |
| } |
| } |
| |
| class TargetLangChild extends Child |
| { |
| public TargetLangChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangChild"; |
| return identifier; |
| } |
| } |
| |
| class TargetLangGrandChild extends GrandChild |
| { |
| public TargetLangGrandChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangGrandChild"; |
| return identifier; |
| } |
| } |
| |
| // Semis - don't override id() in target language |
| class TargetLangSemiPerson extends Person |
| { |
| public TargetLangSemiPerson() |
| { |
| super(); |
| } |
| // No id() override |
| } |
| |
| class TargetLangSemiChild extends Child |
| { |
| public TargetLangSemiChild() |
| { |
| super(); |
| } |
| // No id() override |
| } |
| |
| class TargetLangSemiGrandChild extends GrandChild |
| { |
| public TargetLangSemiGrandChild() |
| { |
| super(); |
| } |
| // No id() override |
| } |
| |
| // Orphans - don't override id() in C++ |
| class TargetLangOrphanPerson extends OrphanPerson |
| { |
| public TargetLangOrphanPerson() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangOrphanPerson"; |
| return identifier; |
| } |
| } |
| |
| class TargetLangOrphanChild extends OrphanChild |
| { |
| public TargetLangOrphanChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangOrphanChild"; |
| return identifier; |
| } |
| } |
| |
| // Duals - id() makes an upcall to the base id() |
| class TargetLangDualPerson extends Person |
| { |
| public TargetLangDualPerson() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangDualPerson + " + super.id(); |
| return identifier; |
| } |
| } |
| |
| class TargetLangDualChild extends Child |
| { |
| public TargetLangDualChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangDualChild + " + super.id(); |
| return identifier; |
| } |
| } |
| |
| class TargetLangDualGrandChild extends GrandChild |
| { |
| public TargetLangDualGrandChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangDualGrandChild + " + super.id(); |
| return identifier; |
| } |
| } |
| |
| // Mix Orphans and Duals |
| class TargetLangDualOrphanPerson extends OrphanPerson |
| { |
| public TargetLangDualOrphanPerson() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangDualOrphanPerson + " + super.id(); |
| return identifier; |
| } |
| } |
| |
| class TargetLangDualOrphanChild extends OrphanChild |
| { |
| public TargetLangDualOrphanChild() |
| { |
| super(); |
| } |
| |
| public String id() |
| { |
| String identifier = "TargetLangDualOrphanChild + " + super.id(); |
| return identifier; |
| } |
| } |
| |