mirror of https://github.com/swig/swig
267 lines
12 KiB
C#
267 lines
12 KiB
C#
using System;
|
|
using System.Reflection;
|
|
using System.ComponentModel;
|
|
using csharp_attributesNamespace;
|
|
|
|
public class runme
|
|
{
|
|
static void Main()
|
|
{
|
|
// Custom attributes typemap tests
|
|
//
|
|
// cstype typemap attributechecks
|
|
//
|
|
// Global function cstype typemap attributes check
|
|
Type globaltype = typeof(csharp_attributes);
|
|
{
|
|
MethodInfo member = (MethodInfo)globaltype.GetMember("GlobalFunction")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntOutAttribute)) == null)
|
|
throw new Exception("No IntOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[0]; // expecting one parameter
|
|
if (parameter.Name != "myInt")
|
|
throw new Exception("Incorrect parameter name");
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntInAttribute))
|
|
throw new Exception("Expecting IntIn attribute");
|
|
}
|
|
// Constant - cstype typemap attributes check
|
|
{
|
|
MemberInfo member = (MemberInfo)globaltype.GetMember("TESTMACRO")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntOutAttribute)) == null)
|
|
throw new Exception("No IntOut attribute for " + member.Name);
|
|
}
|
|
|
|
// Non-static method cstype typemap attributes check
|
|
Type type = typeof(Stations);
|
|
{
|
|
MethodInfo member = (MethodInfo)type.GetMember("Reading")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntOutAttribute)) == null)
|
|
throw new Exception("No IntOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[0]; // expecting one parameter
|
|
if (parameter.Name != "myInt")
|
|
throw new Exception("Incorrect parameter name");
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntInAttribute))
|
|
throw new Exception("Expecting IntIn attribute");
|
|
}
|
|
// Static method cstype typemap attributes check
|
|
{
|
|
MethodInfo member = (MethodInfo)type.GetMember("Swindon")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntOutAttribute)) == null)
|
|
throw new Exception("No IntOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[0]; // expecting one parameter
|
|
if (parameter.Name != "myInt")
|
|
throw new Exception("Incorrect parameter name");
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntInAttribute))
|
|
throw new Exception("Expecting IntIn attribute");
|
|
}
|
|
// Constructor cstype typemap attributes check
|
|
{
|
|
ConstructorInfo member = (ConstructorInfo)type.GetConstructors()[0];
|
|
ParameterInfo parameter = member.GetParameters()[0]; // expecting one parameter
|
|
if (parameter.Name != "myInt")
|
|
throw new Exception("Incorrect parameter name");
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntInAttribute))
|
|
throw new Exception("Expecting IntIn attribute");
|
|
}
|
|
|
|
//
|
|
// imtype typemap attributechecks
|
|
//
|
|
// Global function imtype typemap attributes check
|
|
Type imclasstype = typeof(csharp_attributesPINVOKE);
|
|
{
|
|
MethodInfo member = (MethodInfo)imclasstype.GetMember("GlobalFunction")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntegerOutAttribute)) == null)
|
|
throw new Exception("No IntegerOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[0]; // checking 1st parameter
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntegerInAttribute))
|
|
throw new Exception("Expecting IntegerIn attribute");
|
|
}
|
|
// Constant - imtype typemap attributes check
|
|
{
|
|
MethodInfo member = (MethodInfo)imclasstype.GetMember("TESTMACRO_get")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntegerOutAttribute)) == null)
|
|
throw new Exception("No IntegerOut attribute for " + member.Name);
|
|
}
|
|
// Non-static method imtype typemap attributes check
|
|
{
|
|
MethodInfo member = (MethodInfo)imclasstype.GetMember("Stations_Reading")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntegerOutAttribute)) == null)
|
|
throw new Exception("No IntegerOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[1]; // checking 2nd parameter
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntegerInAttribute))
|
|
throw new Exception("Expecting IntegerIn attribute");
|
|
}
|
|
// Static method imtype typemap attributes check
|
|
{
|
|
MethodInfo member = (MethodInfo)imclasstype.GetMember("Stations_Swindon")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(IntegerOutAttribute)) == null)
|
|
throw new Exception("No IntegerOut attribute for " + member.Name);
|
|
ParameterInfo parameter = member.GetParameters()[0]; // checking 1st parameter
|
|
Attribute attribute = Attribute.GetCustomAttributes(parameter)[0];
|
|
if (attribute.GetType() != typeof(IntegerInAttribute))
|
|
throw new Exception("Expecting IntegerIn attribute");
|
|
}
|
|
|
|
//
|
|
// attributes feature
|
|
//
|
|
Type moretype = typeof(MoreStations);
|
|
|
|
// Constructor attributes feature check
|
|
{
|
|
ConstructorInfo member = (ConstructorInfo)moretype.GetConstructors()[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity1Attribute)) == null)
|
|
throw new Exception("MoreStations::MoreStations attribute failed");
|
|
}
|
|
// Non-static method attributes feature check
|
|
{
|
|
MethodInfo member = (MethodInfo)moretype.GetMember("Chippenham")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity2Attribute)) == null)
|
|
throw new Exception("MoreStations::Chippenham attribute failed");
|
|
}
|
|
// Static method attributes feature check
|
|
{
|
|
MethodInfo member = (MethodInfo)moretype.GetMember("Bath")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity3Attribute)) == null)
|
|
throw new Exception("MoreStations::Bath attribute failed");
|
|
}
|
|
// Non-static member variable attributes feature check
|
|
{
|
|
PropertyInfo member = (PropertyInfo)moretype.GetProperty("Bristol");
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity4Attribute)) == null)
|
|
throw new Exception("MoreStations::Bristol attribute failed");
|
|
}
|
|
// Static member variable attributes feature check
|
|
{
|
|
PropertyInfo member = (PropertyInfo)moretype.GetProperty("WestonSuperMare");
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity5Attribute)) == null)
|
|
throw new Exception("MoreStations::Bristol attribute failed");
|
|
}
|
|
// Global function attributes feature check
|
|
{
|
|
MethodInfo member = (MethodInfo)globaltype.GetMember("Paddington")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity7Attribute)) == null)
|
|
throw new Exception("MoreStations::Paddington attribute failed");
|
|
}
|
|
// Global variables attributes feature check
|
|
{
|
|
PropertyInfo member = (PropertyInfo)globaltype.GetProperty("DidcotParkway");
|
|
if (Attribute.GetCustomAttribute(member, typeof(InterCity8Attribute)) == null)
|
|
throw new Exception("MoreStations::Paddington attribute failed");
|
|
}
|
|
|
|
//
|
|
// csattribute typemaps
|
|
//
|
|
// Class csattribute typemap
|
|
{
|
|
Object[] attribs = moretype.GetCustomAttributes(true);
|
|
Eurostar1Attribute tgv = (Eurostar1Attribute)attribs[0];
|
|
if (tgv == null)
|
|
throw new Exception("No attribute for MoreStations");
|
|
}
|
|
// Nested enum csattribute typemap
|
|
{
|
|
MemberInfo member = (MemberInfo)moretype.GetMember("Wales")[0];
|
|
if (Attribute.GetCustomAttribute(member, typeof(Eurostar2Attribute)) == null)
|
|
throw new Exception("No attribute for " + member.Name);
|
|
}
|
|
// Enum value attributes
|
|
Type walesType = typeof(MoreStations.Wales);
|
|
{
|
|
MemberInfo member = (MemberInfo)walesType.GetMember("Cardiff")[0];
|
|
DescriptionAttribute attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(member, typeof(System.ComponentModel.DescriptionAttribute));
|
|
if (attribute == null)
|
|
throw new Exception("No attribute for " + member.Name);
|
|
if (attribute.Description != "Cardiff city station")
|
|
throw new Exception("Incorrect attribute value for " + member.Name);
|
|
}
|
|
{
|
|
MemberInfo member = (MemberInfo)walesType.GetMember("Swansea")[0];
|
|
DescriptionAttribute attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(member, typeof(System.ComponentModel.DescriptionAttribute));
|
|
if (attribute == null)
|
|
throw new Exception("No attribute for " + member.Name);
|
|
if (attribute.Description != "Swansea city station")
|
|
throw new Exception("Incorrect attribute value for " + member.Name);
|
|
}
|
|
// Enum csattribute typemap
|
|
{
|
|
Type cymrutype = typeof(Cymru);
|
|
Object[] attribs = cymrutype.GetCustomAttributes(true);
|
|
Eurostar3Attribute tgv = (Eurostar3Attribute)attribs[0];
|
|
if (tgv == null)
|
|
throw new Exception("No attribute for Cymru");
|
|
}
|
|
|
|
// No runtime test for directorinattributes and directoroutattributes
|
|
}
|
|
}
|
|
|
|
// Custom attribute classes
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class IntInAttribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class IntOutAttribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class IntegerInAttribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class IntegerOutAttribute : Attribute {}
|
|
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity1Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity2Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity3Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity4Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity5Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity6Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity7Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class InterCity8Attribute : Attribute {}
|
|
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class Eurostar1Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class Eurostar2Attribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class Eurostar3Attribute : Attribute {}
|
|
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class ThreadSafeAttribute : Attribute {
|
|
public ThreadSafeAttribute(bool safe) {}
|
|
public ThreadSafeAttribute() {}
|
|
}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class DirectorIntegerOutAttribute : Attribute {}
|
|
|
|
[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
|
|
public class DirectorIntegerInAttribute : Attribute {}
|
|
|