mirror of https://github.com/swig/swig
90 lines
4.2 KiB
C#
90 lines
4.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using multiple_inheritance_interfacesNamespace;
|
|
|
|
public class multiple_inheritance_interfaces_runme {
|
|
|
|
static string SortArrayToString(string[] types) {
|
|
Array.Sort<string>(types);
|
|
return string.Join(" ", types);
|
|
}
|
|
|
|
static string SortArrayToString(Type[] types) {
|
|
List<string> stypes = new List<string>();
|
|
foreach (Type t in types)
|
|
stypes.Add(t.Name);
|
|
return SortArrayToString(stypes.ToArray());
|
|
}
|
|
|
|
|
|
private static void checkBaseAndInterfaces(Type cls, bool interfaceExpected, string baseClass, string[] interfaces) {
|
|
string[] expectedInterfaces = new string[interfaces.Length + (interfaceExpected ? 0 : 1)];
|
|
for (int i=0; i<interfaces.Length; ++i)
|
|
expectedInterfaces[i] = interfaces[i];
|
|
if (!interfaceExpected)
|
|
expectedInterfaces[interfaces.Length] = "IDisposable";
|
|
Type[] actualInterfaces = cls.GetInterfaces();
|
|
string expectedInterfacesString = SortArrayToString(expectedInterfaces);
|
|
string actualInterfacesString = SortArrayToString(actualInterfaces);
|
|
if (expectedInterfacesString != actualInterfacesString)
|
|
throw new Exception("Expected interfaces for " + cls.Name + ": \n" + expectedInterfacesString + "\n" + "Actual interfaces: \n" + actualInterfacesString);
|
|
|
|
string expectedBaseString = null;
|
|
if (interfaceExpected) {
|
|
// expecting an interface
|
|
if (!cls.IsInterface)
|
|
throw new Exception(cls.Name + " should be an interface but is not");
|
|
expectedBaseString = string.IsNullOrEmpty(baseClass) ? "" : "multiple_inheritance_interfacesNamespace." + baseClass;
|
|
} else {
|
|
// expecting a class
|
|
if (cls.IsInterface)
|
|
throw new Exception(cls.Name + " is an interface but it should not be");
|
|
expectedBaseString = string.IsNullOrEmpty(baseClass) ? "Object" : baseClass;
|
|
}
|
|
|
|
string actualBaseString = cls.BaseType == null ? "" : cls.BaseType.Name;
|
|
if (expectedBaseString != actualBaseString)
|
|
throw new Exception("Expected base for " + cls.Name + ": [" + expectedBaseString + "]" + " Actual base: [" + actualBaseString + "]");
|
|
}
|
|
|
|
public static void Main() {
|
|
// Note that we can't get just the immediate interface
|
|
// Type.GetInterfaces() returns all interfaces up the inheritance hierarchy
|
|
checkBaseAndInterfaces(typeof(IA), true, "", new string[] {});
|
|
checkBaseAndInterfaces(typeof(IB), true, "", new string[] {});
|
|
checkBaseAndInterfaces(typeof(IC), true, "", new string[] {"IA", "IB"});
|
|
checkBaseAndInterfaces(typeof(A), false, "", new string[] {"IA"});
|
|
checkBaseAndInterfaces(typeof(B), false, "", new string[] {"IB"});
|
|
checkBaseAndInterfaces(typeof(C), false, "", new string[] {"IA", "IB", "IC"});
|
|
checkBaseAndInterfaces(typeof(D), false, "", new string[] {"IA", "IB", "IC"});
|
|
checkBaseAndInterfaces(typeof(E), false, "D", new string[] {"IA", "IB", "IC"});
|
|
|
|
checkBaseAndInterfaces(typeof(IJ), true, "", new string[] {});
|
|
checkBaseAndInterfaces(typeof(IK), true, "", new string[] {"IJ"});
|
|
checkBaseAndInterfaces(typeof(IL), true, "", new string[] {"IJ", "IK"});
|
|
checkBaseAndInterfaces(typeof(J), false, "", new string[] {"IJ"});
|
|
checkBaseAndInterfaces(typeof(K), false, "", new string[] {"IJ", "IK"});
|
|
checkBaseAndInterfaces(typeof(L), false, "", new string[] {"IJ", "IK", "IL"});
|
|
checkBaseAndInterfaces(typeof(M), false, "", new string[] {"IJ", "IK", "IL"});
|
|
|
|
checkBaseAndInterfaces(typeof(P), false, "", new string[] {});
|
|
checkBaseAndInterfaces(typeof(IQ), true, "", new string[] {});
|
|
checkBaseAndInterfaces(typeof(Q), false, "", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(R), false, "P", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(S), false, "P", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(T), false, "", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(U), false, "R", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(V), false, "S", new string[] {"IQ"});
|
|
checkBaseAndInterfaces(typeof(W), false, "T", new string[] {"IQ"});
|
|
|
|
// overloaded methods check
|
|
D d = new D();
|
|
d.ia();
|
|
d.ia(10);
|
|
d.ia("bye");
|
|
d.ia("bye", false);
|
|
|
|
UndesirablesSwigImpl.UndesiredStaticMethod(UndesirablesSwigImpl.UndesiredEnum.UndesiredEnum1);
|
|
}
|
|
}
|