public void NativeTypeTakesPrecedenceOverMarshalTypeForMappedType() { var cppMarshallable = new CppParameter("param") { TypeName = "short", ArrayDimension = "0", IsArray = true, Rule = { MappingType = "bool" } }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", TypeRegistry.Boolean, TypeRegistry.Int32); typeRegistry.BindType("short", TypeRegistry.Int16); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(TypeRegistry.Boolean, csMarshallable.PublicType); Assert.Equal(TypeRegistry.Int16, csMarshallable.MarshalType); Assert.False(csMarshallable.HasPointer); Assert.False(csMarshallable.IsArray); Assert.Equal(0, csMarshallable.ArrayDimensionValue); }
public void NativeTypeTakesPrecedenceOverMarshalTypeForMappedType() { var cppMarshallable = new CppMarshallable { TypeName = "short", ArrayDimension = "0", IsArray = true, Rule = new MappingRule { MappingType = "bool" } }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", typeRegistry.ImportType(typeof(bool)), typeRegistry.ImportType(typeof(int))); typeRegistry.BindType("short", typeRegistry.ImportType(typeof(short))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.Equal(typeRegistry.ImportType(typeof(bool)), csMarshallable.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(short)), csMarshallable.MarshalType); }
public void BoolToIntSetForAllIntegerTypes(PrimitiveTypeCode integerType) { var cppMarshallable = new CppParameter("param") { TypeName = "Integer", ArrayDimension = "0", IsArray = true, Rule = { MappingType = "bool" } }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", TypeRegistry.Boolean); typeRegistry.BindType("Integer", TypeRegistry.ImportPrimitiveType(integerType)); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(TypeRegistry.Boolean, csMarshallable.PublicType); Assert.Equal(TypeRegistry.ImportPrimitiveType(integerType), csMarshallable.MarshalType); Assert.True(csMarshallable.IsBoolToInt); Assert.False(csMarshallable.HasPointer); Assert.False(csMarshallable.IsArray); Assert.Equal(0, csMarshallable.ArrayDimensionValue); }
public void BoolToIntSetForAllIntegerTypes(Type integerType) { var cppMarshallable = new CppMarshallable { TypeName = "Integer", ArrayDimension = "0", IsArray = true, Rule = new MappingRule { MappingType = "bool" } }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", typeRegistry.ImportType(typeof(bool))); typeRegistry.BindType("Integer", typeRegistry.ImportType(integerType)); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.Equal(typeRegistry.ImportType(typeof(bool)), csMarshallable.PublicType); Assert.Equal(typeRegistry.ImportType(integerType), csMarshallable.MarshalType); Assert.True(csMarshallable.IsBoolToInt); }
public void BoundTypeForArrayType(string elementType) { var cppMarshallable = new CppParameter("param") { TypeName = elementType, IsArray = true, ArrayDimension = "ANYSIZE_ARRAY" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); CsInterface dynamicStringType = new(null, "DynamicString"); typeRegistry.BindType(elementType + "[ANYSIZE_ARRAY]", dynamicStringType); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(dynamicStringType, csMarshallable.PublicType); Assert.Equal(dynamicStringType, csMarshallable.MarshalType); Assert.Equal(0, csMarshallable.ArrayDimensionValue); Assert.False(csMarshallable.IsArray); Assert.False(csMarshallable.IsString); Assert.False(csMarshallable.IsWideChar); }
public StructTransform(NamingRulesManager namingRules, NamespaceRegistry namespaceRegistry, MarshalledElementFactory factory, Ioc ioc) : base(namingRules, ioc) { this.namespaceRegistry = namespaceRegistry; this.factory = factory; factory.RequestStructProcessing += Process; }
public MethodTransform(NamingRulesManager namingRules, GroupRegistry groupRegistry, MarshalledElementFactory factory, IInteropSignatureTransform interopSignatureTransform, Ioc ioc) : base(namingRules, ioc) { this.groupRegistry = groupRegistry; this.factory = factory; signatureTransform = interopSignatureTransform; }
public void PointerParameterMarkedAsHasPointer() { var cppParameter = new CppParameter { TypeName = "int", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter); Assert.True(csParameter.HasPointer); }
public void PointerToTypeWithMarshallingMarshalsAsUnderlyingType() { var cppMarshallable = new CppMarshallable { TypeName = "bool", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", typeRegistry.ImportType(typeof(bool)), typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.Equal(typeRegistry.ImportType(typeof(int)), csMarshallable.MarshalType); }
public void ParamWithNoTypeMappingShouldHaveMarshalTypeEqualToPublic() { var marshallable = new CppParameter("param") { TypeName = "int" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", TypeRegistry.Int32); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(marshallable, marshallable.Name); Assert.Equal(csMarshallable.PublicType, csMarshallable.MarshalType); }
public void ParamWithNoTypeMappingShouldHaveMarshalTypeEqualToPublic() { var marshallable = new CppMarshallable { TypeName = "int" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider("SharpGen.Runtime"), typeRegistry); var csMarshallable = marshalledElementFactory.Create(marshallable); Assert.Equal(csMarshallable.PublicType, csMarshallable.MarshalType); }
public void ParameterWithStructSizeRelationLogsError() { var cppParameter = new CppParameter { TypeName = "int" }; cppParameter.GetMappingRule().Relation = "struct_size()"; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider("SharpGen.Runtime"), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter); AssertLoggingCodeLogged(LoggingCodes.InvalidRelation); }
public void CharPointerMappedToStringMarshalledWithIntPtr() { var cppMarshallable = new CppMarshallable { TypeName = "char", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.Equal(typeRegistry.ImportType(typeof(string)), csMarshallable.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csMarshallable.MarshalType); Assert.True(csMarshallable.HasPointer); }
public void FieldWithPointerTypeMarshalledAsIntPtr() { var cppField = new CppField { TypeName = "int", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(IntPtr))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider("SharpGen.Runtime"), typeRegistry); var csField = marshalledElementFactory.Create(cppField); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csField.PublicType); Assert.Equal(csField.PublicType, csField.MarshalType); }
public void DoublePointerNonInterfaceParameterMappedAsIntPtr() { var cppParameter = new CppParameter { TypeName = "int", Pointer = "**" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider("SharpGen.Runtime"), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csParameter.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csParameter.MarshalType); Assert.True(csParameter.HasPointer); }
public void PointerNonInterfaceReturnValueMappedAsIntPtr() { var cppReturnValue = new CppReturnValue { TypeName = "int", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csReturnValue = marshalledElementFactory.Create(cppReturnValue); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csReturnValue.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csReturnValue.MarshalType); Assert.True(csReturnValue.HasPointer); }
public void FieldWithPointerTypeMarshalledAsIntPtr() { var cppField = new CppField("field") { TypeName = "int", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", TypeRegistry.IntPtr); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csField = marshalledElementFactory.Create(cppField, cppField.Name); Assert.Equal(TypeRegistry.IntPtr, csField.PublicType); Assert.Equal(csField.PublicType, csField.MarshalType); }
public void DoublePointerParameterMappedAsOut() { var cppParameter = new CppParameter("param") { TypeName = "Interface", Pointer = "**" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("Interface", new CsInterface(null, "Interface")); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter, cppParameter.Name); Assert.Equal(CsParameterAttribute.Out, csParameter.Attribute); }
public void ZeroDimensionArrayMappedAsSingleElement() { var cppMarshallable = new CppMarshallable { TypeName = "int", ArrayDimension = "0", IsArray = true }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.False(csMarshallable.IsArray); }
public void FieldWithPointerToInterfaceTypeHasPublicTypeOfInterface() { var cppField = new CppField("field") { TypeName = "Interface", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("Interface", new CsInterface(null, "Interface")); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csField = marshalledElementFactory.Create(cppField, cppField.Name); Assert.Equal(typeRegistry.FindBoundType("Interface"), csField.PublicType); Assert.Equal(TypeRegistry.IntPtr, csField.MarshalType); Assert.True(csField.IsInterface); }
public void DoublePointerNonInterfaceParameterMappedAsIntPtr() { var cppParameter = new CppParameter("param") { TypeName = "int", Pointer = "**" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", TypeRegistry.Int32); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter, cppParameter.Name); Assert.Equal(TypeRegistry.IntPtr, csParameter.PublicType); Assert.Equal(TypeRegistry.IntPtr, csParameter.MarshalType); Assert.True(csParameter.HasPointer); Assert.False(csParameter.IsArray); Assert.Equal(0, csParameter.ArrayDimensionValue); }
public void PointerToTypeWithMarshallingMarshalsAsUnderlyingType() { var cppMarshallable = new CppParameter("param") { TypeName = "bool", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", TypeRegistry.Boolean, TypeRegistry.Int32); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(TypeRegistry.Int32, csMarshallable.MarshalType); Assert.Equal(0, csMarshallable.ArrayDimensionValue); Assert.False(csMarshallable.IsArray); Assert.True(csMarshallable.HasPointer); }
public void CharPointerMappedToStringMarshalledWithIntPtr() { var cppMarshallable = new CppParameter("param") { TypeName = "char", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(TypeRegistry.String, csMarshallable.PublicType); Assert.Equal(TypeRegistry.IntPtr, csMarshallable.MarshalType); Assert.True(csMarshallable.HasPointer); Assert.False(csMarshallable.IsArray); Assert.Equal(0, csMarshallable.ArrayDimensionValue); }
public void DoubleVoidPointerParameterPreserved() { var cppParameter = new CppParameter { TypeName = "void", Pointer = "**", Attribute = ParamAttribute.Out }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("void", typeRegistry.ImportType(typeof(void))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csParameter.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csParameter.MarshalType); Assert.True(csParameter.HasPointer); Assert.True(csParameter.IsOut); }
public void CharArrayMappedToStringMarshalledWithByte() { var cppMarshallable = new CppMarshallable { TypeName = "char", IsArray = true, ArrayDimension = "10" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable); Assert.Equal(typeRegistry.ImportType(typeof(string)), csMarshallable.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(byte)), csMarshallable.MarshalType); Assert.Equal(10, csMarshallable.ArrayDimensionValue); Assert.True(csMarshallable.IsArray); }
public void FieldWithPointerToInterfaceTypeHasPublicTypeOfInterface() { var cppField = new CppField { TypeName = "Interface", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("Interface", new CsInterface { Name = "Interface" }); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider("SharpGen.Runtime"), typeRegistry); var csField = marshalledElementFactory.Create(cppField); Assert.Equal(typeRegistry.FindBoundType("Interface"), csField.PublicType); Assert.Equal(typeRegistry.ImportType(typeof(IntPtr)), csField.MarshalType); Assert.True(csField.IsInterface); }
public void BoolToIntArray() { var cppParameter = new CppParameter("param") { TypeName = "bool", Pointer = "*", Attribute = ParamAttribute.In | ParamAttribute.Buffer }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", TypeRegistry.Boolean, TypeRegistry.UInt8); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csParameter = marshalledElementFactory.Create(cppParameter, cppParameter.Name); Assert.Equal(TypeRegistry.Boolean, csParameter.PublicType); Assert.Equal(TypeRegistry.UInt8, csParameter.MarshalType); Assert.True(csParameter.IsArray); Assert.True(csParameter.IsBoolToInt); Assert.Equal(0, csParameter.ArrayDimensionValue); }
public void BoolToIntArrayMarshalTypeIsIntegerArray() { var cppParameter = new CppParameter { TypeName = "bool", Pointer = "*" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("bool", typeRegistry.ImportType(typeof(bool)), typeRegistry.ImportType(typeof(byte))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); cppParameter.Attribute = ParamAttribute.In | ParamAttribute.Buffer; var csParameter = marshalledElementFactory.Create(cppParameter); Assert.Equal(typeRegistry.ImportType(typeof(byte)), csParameter.MarshalType); Assert.True(csParameter.IsArray); Assert.True(csParameter.IsBoolToInt); }
public void ParameterWithStructSizeRelationLogsError() { var cppParameter = new CppParameter { TypeName = "int" }; cppParameter.GetMappingRule().Relation = "struct-size()"; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); typeRegistry.BindType("int", typeRegistry.ImportType(typeof(int))); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); using (LoggerMessageCountEnvironment(1, LogLevel.Error)) using (LoggerMessageCountEnvironment(0, ~LogLevel.Error)) using (LoggerCodeRequiredEnvironment(LoggingCodes.InvalidRelation)) { marshalledElementFactory.Create(cppParameter); } }
public void CharArrayMappedToStringMarshalledWithByte() { var cppMarshallable = new CppParameter("param") { TypeName = "char", IsArray = true, ArrayDimension = "10" }; var typeRegistry = new TypeRegistry(Logger, A.Fake <IDocumentationLinker>()); var marshalledElementFactory = new MarshalledElementFactory(Logger, new GlobalNamespaceProvider(), typeRegistry); var csMarshallable = marshalledElementFactory.Create(cppMarshallable, cppMarshallable.Name); Assert.Equal(TypeRegistry.String, csMarshallable.PublicType); Assert.Equal(TypeRegistry.UInt8, csMarshallable.MarshalType); Assert.Equal(10, csMarshallable.ArrayDimensionValue); Assert.False(csMarshallable.IsArray); Assert.True(csMarshallable.IsString); Assert.False(csMarshallable.IsWideChar); }