Merge branch 'interfaces' into interfaces2
* interfaces: Remove unnecessary interfaces for concrete classes cosmetic code formatting changes Correct interface name attributes that are internal interface macro changes to support templates Test non-virtual method in Derived classes interface tests for a most derived class inheriting the interfaces further up the chain Rename GetCPtr/getCPtr to SWIGInterfaceUpcast interface feature support for const ref pointers (used by the STL) Interface feature support for arrays More interface feature testing for return values interface feature support for passing by value interface feature support for references Multiple inheritance parameters as pointers testing Simplify multiple_inheritance_abstract Java runtime test Warning fixes Rename test functions in multiple_inheritance_abstract testcase Formatting fixes in generated code for interface feature Cosmetic spacing changes in test case interface feature typemap corrections to handle NULL pointers interface test added javadirectorin fix interface implementation visibility interface inheritance (2) interface inheritance (1) feature:interface ported to Java propagate non-abstract "interface" base methods (3) propagate non-abstract "interface" base methods (2) propagate non-abstract "interface" base methods (1) namespace support added GetCPtr now returns HandleRef "feature:interface:name" is now mandatory attribute interfaces (1) interfaces (1) Conflicts: Source/Modules/csharp.cxx Source/Modules/java.cxx
This commit is contained in:
commit
abccc13a4a
11 changed files with 1166 additions and 39 deletions
|
|
@ -38,7 +38,8 @@ CPP_TEST_CASES = \
|
|||
java_prepost \
|
||||
java_throws \
|
||||
java_typemaps_proxy \
|
||||
java_typemaps_typewrapper
|
||||
java_typemaps_typewrapper \
|
||||
multiple_inheritance_abstract
|
||||
# li_boost_intrusive_ptr
|
||||
|
||||
CPP11_TEST_CASES = \
|
||||
|
|
|
|||
|
|
@ -0,0 +1,253 @@
|
|||
import multiple_inheritance_abstract.*;
|
||||
|
||||
public class multiple_inheritance_abstract_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("multiple_inheritance_abstract");
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
//Test base class as a parameter in java
|
||||
int jcbase1b(CBase1 cb1){
|
||||
return cb1.cbase1y();
|
||||
}
|
||||
int jabase1(ABase1 ab1){
|
||||
return ab1.abase1();
|
||||
}
|
||||
int jcbase2(CBase2 cb2){
|
||||
return cb2.cbase2();
|
||||
}
|
||||
|
||||
public static void check(boolean fail, String msg) {
|
||||
if (fail)
|
||||
throw new RuntimeException(msg);
|
||||
}
|
||||
|
||||
public static void main(String argv[]) {
|
||||
//Test Derived1
|
||||
Derived1 d1=new Derived1();
|
||||
check(d1.cbase1y()!=3, "Derived1::cbase1y() failed in multiple_inheritance_abstract");
|
||||
check(d1.cbase2()!=4, "Derived1::cbase2() failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test Derived2
|
||||
Derived2 d2=new Derived2();
|
||||
check(d2.cbase1y()!=6, "Derived2::cbase1y() failed in multiple_inheritance_abstract");
|
||||
check(d2.abase1()!=5, "Derived2::abase1() failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test Derived3
|
||||
Derived3 d3=new Derived3();
|
||||
check(d3.cbase1y()!=7, "Derived3::cbase1y() failed in multiple_inheritance_abstract");
|
||||
check(d3.cbase2()!=8, "Derived3::cbase2() failed in multiple_inheritance_abstract");
|
||||
check(d3.abase1()!=9, "Derived3::abase1() failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test Bottom1
|
||||
Bottom1 b1=new Bottom1();
|
||||
check(b1.cbase1y()!=103, "Bottom1::cbase1y() failed");
|
||||
check(b1.cbase2()!=104, "Bottom1::cbase2() failed");
|
||||
|
||||
//Test Bottom2
|
||||
Bottom2 b2=new Bottom2();
|
||||
check(b2.cbase1y()!=206, "Bottom2::cbase1y() failed");
|
||||
check(b2.abase1()!=205, "Bottom2::abase1() failed");
|
||||
|
||||
//Test Bottom3
|
||||
Bottom3 b3=new Bottom3();
|
||||
check(b3.cbase1y()!=307, "Bottom3::cbase1y() failed");
|
||||
check(b3.cbase2()!=308, "Bottom3::cbase2() failed");
|
||||
check(b3.abase1()!=309, "Bottom3::abase1() failed");
|
||||
|
||||
//Test interfaces from c++ classes
|
||||
CBase1 cb1=new SWIGTYPE_CBase1();
|
||||
CBase2 cb2=new SWIGTYPE_CBase2();
|
||||
check(cb1.cbase1y()!=1, "CBase1::cbase1y() failed in multiple_inheritance_abstract");
|
||||
check(cb2.cbase2()!=2, "CBase2::cbase2() failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test abstract class as return value
|
||||
ABase1 ab1=d3.clone();
|
||||
check(ab1.abase1()!=9, "Derived3::abase1() through ABase1 failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test concrete base class as return value
|
||||
CBase1 cb6=d2.clone();
|
||||
CBase2 cb7=d1.clone();
|
||||
check(cb6.cbase1y()!=6, "Derived2::cbase1y() through CBase1 failed in multiple_inheritance_abstract");
|
||||
check(cb7.cbase2()!=4, "Derived1:cbase2() through ABase1 failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test multi inheritance
|
||||
CBase1 cb3=new Derived1();
|
||||
CBase1 cb4=new Derived3();
|
||||
CBase2 cb5=new Derived3();
|
||||
ABase1 ab6=new Derived2();
|
||||
check(cb3.cbase1y()!=3, "Derived1::cbase1y() through CBase1 failed in multiple_inheritance_abstract");
|
||||
check(cb4.cbase1y()!=7, "Derived3::cbase1y() through CBase1 failed in multiple_inheritance_abstract");
|
||||
check(cb5.cbase2()!=8, "Derived3::cbase2() through CBase2 failed in multiple_inheritance_abstract");
|
||||
check(ab6.abase1()!=5, "Derived2::abase1() through ABase1 failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test base classes as parameter in java
|
||||
multiple_inheritance_abstract_runme mhar=new multiple_inheritance_abstract_runme();
|
||||
check(mhar.jcbase1b(d1)!=3, "jcbase1b() through Derived1 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jcbase1b(d2)!=6, "jcbase1b() through Derived2 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jcbase1b(d3)!=7, "jcbase1b() through Derived3 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jcbase2(d1)!=4, "jcbase2() through Derived1 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jcbase2(d3)!=8, "jcbase2() through Derived3 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jabase1(d2)!=5, "jabase1() through Derived2 as parameter failed in multiple_inheritance_abstract");
|
||||
check(mhar.jabase1(d3)!=9, "jabase1() through Derived3 as parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Value parameters
|
||||
//Test CBase1 CBase2 as parameters (note slicing for Derived and Bottom classes)
|
||||
check(multiple_inheritance_abstract.InputValCBase1(d1)!=1, "InputValCBase1(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(d2)!=1, "InputValCBase1(), Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(d3)!=1, "InputValCBase1(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase2(d3)!=2, "InputValCBase2(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase2(d1)!=2, "InputValCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(cb1)!=1, "InputValCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase2(cb2)!=2, "InputValCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(b1)!=1, "InputValCBase1(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(b2)!=1, "InputValCBase1(), Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase1(b3)!=1, "InputValCBase1(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase2(b3)!=2, "InputValCBase2(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputValCBase2(b1)!=2, "InputValCBase2(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Pointer parameters
|
||||
//Test ABase1 as a parameter
|
||||
check(multiple_inheritance_abstract.InputPtrABase1(d2)!=5, "InputPtrABase1() through Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrABase1(d3)!=9, "InputPtrABase1() through Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrABase1(b2)!=205, "InputPtrABase1() through Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrABase1(b3)!=309, "InputPtrABase1() through Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test CBase1 CBase2 as parameters
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(d1)!=3, "InputPtrCBase1(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(d2)!=6, "InputPtrCBase1(), Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(d3)!=7, "InputPtrCBase1(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase2(d3)!=8, "InputPtrCBase2(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase2(d1)!=4, "InputPtrCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(cb1)!=1, "InputPtrCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase2(cb2)!=2, "InputPtrCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(b1)!=103, "InputPtrCBase1(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(b2)!=206, "InputPtrCBase1(), Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase1(b3)!=307, "InputPtrCBase1(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase2(b3)!=308, "InputPtrCBase2(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputPtrCBase2(b1)!=104, "InputPtrCBase2(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Reference parameters
|
||||
//Test ABase1 as a parameter
|
||||
check(multiple_inheritance_abstract.InputRefABase1(d2)!=5, "InputRefABase1() through Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefABase1(d3)!=9, "InputRefABase1() through Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefABase1(b2)!=205, "InputRefABase1() through Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefABase1(b3)!=309, "InputRefABase1() through Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test CBase1 CBase2 as parameters
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(d1)!=3, "InputRefCBase1(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(d2)!=6, "InputRefCBase1(), Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(d3)!=7, "InputRefCBase1(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase2(d3)!=8, "InputRefCBase2(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase2(d1)!=4, "InputRefCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(cb1)!=1, "InputRefCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase2(cb2)!=2, "InputRefCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(b1)!=103, "InputRefCBase1(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(b2)!=206, "InputRefCBase1(), Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase1(b3)!=307, "InputRefCBase1(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase2(b3)!=308, "InputRefCBase2(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputRefCBase2(b1)!=104, "InputRefCBase2(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Const reference pointer parameters
|
||||
//Test ABase1 as a parameter
|
||||
check(multiple_inheritance_abstract.InputCPtrRefABase1(d2)!=5, "InputCPtrRefABase1() through Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefABase1(d3)!=9, "InputCPtrRefABase1() through Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefABase1(b2)!=205, "InputCPtrRefABase1() through Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefABase1(b3)!=309, "InputCPtrRefABase1() through Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Test CBase1 CBase2 as parameters
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(d1)!=3, "InputCPtrRefCBase1(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(d2)!=6, "InputCPtrRefCBase1(), Derived2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(d3)!=7, "InputCPtrRefCBase1(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase2(d3)!=8, "InputCPtrRefCBase2(), Derived3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase2(d1)!=4, "InputCPtrRefCBase2(), Derived1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(cb1)!=1, "InputCPtrRefCBase1(), CBase1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase2(cb2)!=2, "InputCPtrRefCBase2(), CBase2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(b1)!=103, "InputCPtrRefCBase1(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(b2)!=206, "InputCPtrRefCBase1(), Bottom2 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase1(b3)!=307, "InputCPtrRefCBase1(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase2(b3)!=308, "InputCPtrRefCBase2(), Bottom3 as a parameter failed in multiple_inheritance_abstract");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefCBase2(b1)!=104, "InputCPtrRefCBase2(), Bottom1 as a parameter failed in multiple_inheritance_abstract");
|
||||
|
||||
//Derived classes as parameters
|
||||
check(multiple_inheritance_abstract.InputValDerived1(d1)!=3+4, "InputValDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputValDerived2(d2)!=6+5, "InputValDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputValDerived3(d3)!=7+8+9, "InputValDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputRefDerived1(d1)!=3+4, "InputRefDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputRefDerived2(d2)!=6+5, "InputRefDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputRefDerived3(d3)!=7+8+9, "InputRefDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputPtrDerived1(d1)!=3+4, "InputPtrDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrDerived2(d2)!=6+5, "InputPtrDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrDerived3(d3)!=7+8+9, "InputPtrDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived1(d1)!=3+4, "InputCPtrRefDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived2(d2)!=6+5, "InputCPtrRefDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived3(d3)!=7+8+9, "InputCPtrRefDerived3() failed");
|
||||
|
||||
//Bottom classes as Derived parameters
|
||||
check(multiple_inheritance_abstract.InputValDerived1(b1)!=3+4, "InputValDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputValDerived2(b2)!=6+5, "InputValDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputValDerived3(b3)!=7+8+9, "InputValDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputRefDerived1(b1)!=103+104, "InputRefDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputRefDerived2(b2)!=206+205, "InputRefDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputRefDerived3(b3)!=307+308+309, "InputRefDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputPtrDerived1(b1)!=103+104, "InputPtrDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrDerived2(b2)!=206+205, "InputPtrDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrDerived3(b3)!=307+308+309, "InputPtrDerived3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived1(b1)!=103+104, "InputCPtrRefDerived1() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived2(b2)!=206+205, "InputCPtrRefDerived2() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefDerived3(b3)!=307+308+309, "InputCPtrRefDerived3() failed");
|
||||
|
||||
//Bottom classes as Bottom parameters
|
||||
check(multiple_inheritance_abstract.InputValBottom1(b1)!=103+104, "InputValBottom1() failed");
|
||||
check(multiple_inheritance_abstract.InputValBottom2(b2)!=206+205, "InputValBottom2() failed");
|
||||
check(multiple_inheritance_abstract.InputValBottom3(b3)!=307+308+309, "InputValBottom3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputRefBottom1(b1)!=103+104, "InputRefBottom1() failed");
|
||||
check(multiple_inheritance_abstract.InputRefBottom2(b2)!=206+205, "InputRefBottom2() failed");
|
||||
check(multiple_inheritance_abstract.InputRefBottom3(b3)!=307+308+309, "InputRefBottom3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputPtrBottom1(b1)!=103+104, "InputPtrBottom1() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrBottom2(b2)!=206+205, "InputPtrBottom2() failed");
|
||||
check(multiple_inheritance_abstract.InputPtrBottom3(b3)!=307+308+309, "InputPtrBottom3() failed");
|
||||
|
||||
check(multiple_inheritance_abstract.InputCPtrRefBottom1(b1)!=103+104, "InputCPtrRefBottom1() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefBottom2(b2)!=206+205, "InputCPtrRefBottom2() failed");
|
||||
check(multiple_inheritance_abstract.InputCPtrRefBottom3(b3)!=307+308+309, "InputCPtrRefBottom3() failed");
|
||||
// Return pointers
|
||||
check(multiple_inheritance_abstract.MakePtrDerived1_CBase1().cbase1y()!=3, "MakePtrDerived1_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived1_CBase2().cbase2()!=4, "MakePtrDerived1_CBase2 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived2_CBase1().cbase1y()!=6, "MakePtrDerived2_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived2_ABase1().abase1()!=5, "MakePtrDerived2_ABase1 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived3_ABase1().abase1()!=9, "MakePtrDerived3_ABase1 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived3_CBase1().cbase1y()!=7, "MakePtrDerived3_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakePtrDerived3_CBase2().cbase2()!=8, "MakePtrDerived3_CBase2 failed");
|
||||
|
||||
// Return references
|
||||
check(multiple_inheritance_abstract.MakeRefDerived1_CBase1().cbase1y()!=3, "MakeRefDerived1_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived1_CBase2().cbase2()!=4, "MakeRefDerived1_CBase2 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived2_CBase1().cbase1y()!=6, "MakeRefDerived2_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived2_ABase1().abase1()!=5, "MakeRefDerived2_ABase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived3_ABase1().abase1()!=9, "MakeRefDerived3_ABase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived3_CBase1().cbase1y()!=7, "MakeRefDerived3_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeRefDerived3_CBase2().cbase2()!=8, "MakeRefDerived3_CBase2 failed");
|
||||
|
||||
// Return by value (sliced objects)
|
||||
check(multiple_inheritance_abstract.MakeValDerived1_CBase1().cbase1y()!=1, "MakeValDerived1_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeValDerived1_CBase2().cbase2()!=2, "MakeValDerived1_CBase2 failed");
|
||||
check(multiple_inheritance_abstract.MakeValDerived2_CBase1().cbase1y()!=1, "MakeValDerived2_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeValDerived3_CBase1().cbase1y()!=1, "MakeValDerived3_CBase1 failed");
|
||||
check(multiple_inheritance_abstract.MakeValDerived3_CBase2().cbase2()!=2, "MakeValDerived3_CBase2 failed");
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
import multiple_inheritance_interfaces.*;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class multiple_inheritance_interfaces_runme {
|
||||
|
||||
static {
|
||||
try {
|
||||
System.loadLibrary("multiple_inheritance_interfaces");
|
||||
} 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);
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkBaseAndInterfaces(Class cls, boolean interfaceExpected, String base, String[] interfaces) {
|
||||
String[] expectedInterfaces = new String[interfaces.length];
|
||||
for (int i=0; i<interfaces.length; ++i)
|
||||
expectedInterfaces[i] = "interface multiple_inheritance_interfaces." + interfaces[i];
|
||||
Class[] actualInterfaces = cls.getInterfaces();
|
||||
String expectedInterfacesString = Arrays.toString(expectedInterfaces);
|
||||
String actualInterfacesString = Arrays.toString(actualInterfaces);
|
||||
if (!expectedInterfacesString.equals(actualInterfacesString))
|
||||
throw new RuntimeException("Expected interfaces for " + cls.getName() + ": \n" + expectedInterfacesString + "\n" + "Actual interfaces: \n" + actualInterfacesString);
|
||||
|
||||
String expectedBaseString = null;
|
||||
if (interfaceExpected) {
|
||||
// expecting an interface
|
||||
if (!cls.isInterface())
|
||||
throw new RuntimeException(cls.getName() + " should be an interface but is not");
|
||||
expectedBaseString = base.isEmpty() ? "" : "multiple_inheritance_interfaces." + base;
|
||||
} else {
|
||||
// expecting a class
|
||||
if (cls.isInterface())
|
||||
throw new RuntimeException(cls.getName() + " is an interface but it should not be");
|
||||
expectedBaseString = base.isEmpty() ? "java.lang.Object" : "multiple_inheritance_interfaces." + base;
|
||||
}
|
||||
|
||||
String actualBaseString = cls.getSuperclass() == null ? "" : cls.getSuperclass().getName();
|
||||
if (!expectedBaseString.equals(actualBaseString))
|
||||
throw new RuntimeException("Expected base for " + cls.getName() + ": [" + expectedBaseString + "]" + " Actual base: [" + actualBaseString + "]");
|
||||
}
|
||||
|
||||
public static void main(String argv[]) {
|
||||
checkBaseAndInterfaces(IA.class, true, "", new String[] {});
|
||||
checkBaseAndInterfaces(IB.class, true, "", new String[] {});
|
||||
checkBaseAndInterfaces(IC.class, true, "", new String[] {"IA", "IB"});
|
||||
checkBaseAndInterfaces(A.class, false, "", new String[] {"IA"});
|
||||
checkBaseAndInterfaces(B.class, false, "", new String[] {"IB"});
|
||||
checkBaseAndInterfaces(C.class, false, "", new String[] {"IA", "IB", "IC"});
|
||||
checkBaseAndInterfaces(D.class, false, "", new String[] {"IA", "IB", "IC"});
|
||||
checkBaseAndInterfaces(E.class, false, "D", new String[] {});
|
||||
|
||||
checkBaseAndInterfaces(IJ.class, true, "", new String[] {});
|
||||
checkBaseAndInterfaces(IK.class, true, "", new String[] {"IJ"});
|
||||
checkBaseAndInterfaces(IL.class, true, "", new String[] {"IK"});
|
||||
checkBaseAndInterfaces(J.class, false, "", new String[] {"IJ"});
|
||||
checkBaseAndInterfaces(K.class, false, "", new String[] {"IJ", "IK"});
|
||||
checkBaseAndInterfaces(L.class, false, "", new String[] {"IJ", "IK", "IL"});
|
||||
checkBaseAndInterfaces(M.class, false, "", new String[] {"IJ", "IK", "IL"});
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue