Remove unnecessary interfaces for concrete classes
Add Java test for checking expected base and interfaces are generated (to be expanded further) In the example, E was previously implementing IA, IB, IC. Now it doesn't implement any. C# virtual/override still to be fixed for this test case
This commit is contained in:
parent
993214872f
commit
3931b5800c
5 changed files with 117 additions and 8 deletions
|
|
@ -258,6 +258,7 @@ CPP_TEST_CASES += \
|
|||
mixed_types \
|
||||
multiple_inheritance \
|
||||
multiple_inheritance_abstract \
|
||||
multiple_inheritance_interfaces \
|
||||
name_cxx \
|
||||
name_warnings \
|
||||
namespace_class \
|
||||
|
|
|
|||
|
|
@ -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"});
|
||||
}
|
||||
}
|
||||
28
Examples/test-suite/multiple_inheritance_interfaces.i
Normal file
28
Examples/test-suite/multiple_inheritance_interfaces.i
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
%module multiple_inheritance_interfaces
|
||||
|
||||
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
||||
%include "feature_interface.i"
|
||||
DECLARE_INTERFACE_RENAME(IA, A, IA)
|
||||
DECLARE_INTERFACE_RENAME(IB, B, IB)
|
||||
DECLARE_INTERFACE_RENAME(IC, C, IC)
|
||||
#endif
|
||||
|
||||
%inline %{
|
||||
struct IA { virtual void ia() {} };
|
||||
struct IB { virtual void ib() {} };
|
||||
struct IC : IA, IB {};
|
||||
struct D : IC {};
|
||||
struct E : D {};
|
||||
%}
|
||||
|
||||
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
|
||||
DECLARE_INTERFACE_RENAME(IJ, J, IJ)
|
||||
DECLARE_INTERFACE_RENAME(IK, K, IK)
|
||||
DECLARE_INTERFACE_RENAME(IL, L, IL)
|
||||
#endif
|
||||
%inline %{
|
||||
struct IJ { virtual void ij() {} };
|
||||
struct IK : IJ {};
|
||||
struct IL : IK {};
|
||||
struct M : IL {};
|
||||
%}
|
||||
Loading…
Add table
Add a link
Reference in a new issue