Esempio n. 1
0
        public void GetterWithInvalidSetterDoesNotGenerateProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var returnType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = returnType,
                    MarshalType = returnType
                },
            };

            var invalidSetMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            Assert.Empty(propertyBuilder.CreateProperties(new[] { getMethod, invalidSetMethod }));

            Assert.Empty(propertyBuilder.CreateProperties(new[] { invalidSetMethod, getMethod }));
        }
Esempio n. 2
0
        public void MethodWithNameStartingWithSetAndReturningResultGeneratesProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsStruct {
                        Name = "SharpGen.Runtime.Result"
                    }
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            var properties = propertyBuilder.CreateProperties(new[] { setMethod });

            Assert.True(properties.ContainsKey("Active"), "Property not created");
            var prop = properties["Active"];

            Assert.Equal(paramType, prop.PublicType);
        }
Esempio n. 3
0
        public void SetterVisibilityInternal()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                },
                AllowProperty = true
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            var iface = new CsInterface();

            iface.Add(setMethod);

            var prop = new CsProperty("Active")
            {
                Setter = setMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.Equal(Visibility.Internal, setMethod.Visibility);
        }
Esempio n. 4
0
        public void PersistentGetterGeneratesPersistentProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
                AllowProperty = true,
                IsPersistent  = true
            };

            var iface = new CsInterface();

            iface.Add(getMethod);

            var prop = new CsProperty("Active")
            {
                Getter = getMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.True(prop.IsPersistent);
        }
Esempio n. 5
0
        public void MethodWithNameStartingWithSetCreatesProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });


            var properties = propertyBuilder.CreateProperties(new[] { setMethod });

            Assert.True(properties.ContainsKey("Active"));
            var prop = properties["Active"];

            Assert.Equal(paramType, prop.PublicType);
        }
Esempio n. 6
0
        public void DoesNotGeneratePropertyIfGetterAndSetterMismatch()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
            };

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = new CsFundamentalType(typeof(short))
            });

            var props = propertyBuilder.CreateProperties(new[] { getMethod, setMethod });

            Assert.Empty(props);
        }
Esempio n. 7
0
        public void GetterMethodReturningStatusCodeWithOutParamGeneratesProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsStruct
                    {
                        Name = "SharpGen.Runtime.Result"
                    }
                }
            };

            getMethod.Add(new CsParameter
            {
                PublicType = paramType,
                Attribute  = CsParameterAttribute.Out
            });


            var properties = propertyBuilder.CreateProperties(new[] { getMethod });

            Assert.True(properties.ContainsKey("Active"));
            var prop = properties["Active"];

            Assert.True(prop.IsPropertyParam);
            Assert.Equal(paramType, prop.PublicType);
        }
Esempio n. 8
0
        public void GetterVisibiltyInternal()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
                AllowProperty = true
            };

            var iface = new CsInterface();

            iface.Add(getMethod);

            var prop = new CsProperty("Active")
            {
                Getter = getMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.Equal(Visibility.Internal, getMethod.Visibility);
        }
Esempio n. 9
0
        public void PropertyNotAttachedWhenGetterAllowPropertyIsFalse()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
                AllowProperty = false
            };

            var iface = new CsInterface();

            iface.Add(getMethod);

            var prop = new CsProperty("Active")
            {
                Getter = getMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.Null(prop.Parent);
        }
Esempio n. 10
0
        public void SetOnlyPropertyAttachedToSetterType()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                },
                AllowProperty = true
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            var iface = new CsInterface();

            iface.Add(setMethod);

            var prop = new CsProperty("Active")
            {
                Setter = setMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.Equal(iface, prop.Parent);
        }
Esempio n. 11
0
        public void PropertyNotAttachedWhenSetterAllowPropertyIsFalse()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                },
                AllowProperty = false
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            var iface = new CsInterface();

            iface.Add(setMethod);

            var prop = new CsProperty("Active")
            {
                Setter = setMethod
            };

            propertyBuilder.AttachPropertyToParent(prop);

            Assert.Null(prop.Parent);
        }
            public SignatureInteropTypeOverride(CsFundamentalType newType, InteropMethodSignatureFlags?setFlags = null)
            {
                NewType = newType ?? throw new ArgumentNullException(nameof(newType));

                if (setFlags.HasValue)
                {
                    SetFlags = setFlags.Value;
                }
            }
 private static bool IsIntegerFundamentalType(CsFundamentalType marshalType)
 {
     return(marshalType.Type == typeof(int) ||
            marshalType.Type == typeof(short) ||
            marshalType.Type == typeof(byte) ||
            marshalType.Type == typeof(long) ||
            marshalType.Type == typeof(uint) ||
            marshalType.Type == typeof(ushort) ||
            marshalType.Type == typeof(sbyte) ||
            marshalType.Type == typeof(ulong));
 }
Esempio n. 14
0
        public void NonPropertyMethodWithNonPropertyNameShouldNotCreateProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "MyMethod",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            Assert.Empty(propertyBuilder.CreateProperties(new[] { setMethod }));
        }
Esempio n. 15
0
        public void InvalidSetterDoesNotCreateProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            Assert.Empty(propertyBuilder.CreateProperties(new[] { setMethod }));
        }
Esempio n. 16
0
        public void InvalidGetterDoesNotCreateProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var returnType = new CsFundamentalType(typeof(void));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = returnType,
                    MarshalType = returnType
                },
            };

            Assert.Empty(propertyBuilder.CreateProperties(new[] { getMethod }));
        }
Esempio n. 17
0
        public void DoesNotGeneratePropertyIfOverloaded()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
            };

            var getMethodOverload = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
            };

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            Assert.Empty(propertyBuilder.CreateProperties(new[] { getMethod, setMethod, getMethodOverload }));
            Assert.Empty(propertyBuilder.CreateProperties(new[] { getMethod, getMethodOverload, setMethod }));
        }
Esempio n. 18
0
        public void DoesNotGeneratePropertyIfGetterAndSetterMismatch_ParameterizedGetter()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsStruct
                    {
                        Name = "SharpGen.Runtime.Result"
                    }
                }
            };

            getMethod.Add(new CsParameter
            {
                PublicType = paramType,
                Attribute  = CsParameterAttribute.Out
            });

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = new CsFundamentalType(typeof(short))
            });

            var props = propertyBuilder.CreateProperties(new[] { getMethod, setMethod });

            Assert.Empty(props);
        }
Esempio n. 19
0
    public CsEnum(CppEnum cppEnum, string name, CsFundamentalType underlyingType) : base(cppEnum, name)
    {
        UnderlyingType = underlyingType ?? throw new ArgumentNullException(nameof(underlyingType));

        if (cppEnum == null)
        {
            return;
        }

        // If C++ enum name is ending with FLAG OR FLAGS, then tag this enum as flags
        var cppEnumName = cppEnum.Name;

        if (cppEnumName.EndsWith("FLAG") || cppEnumName.EndsWith("FLAGS"))
        {
            IsFlag = true;
        }

        var tag = cppEnum.Rule;

        IsFlag = tag.EnumHasFlags ?? IsFlag;
    }
Esempio n. 20
0
        public void MethodWithNameStartingWithGetCreatesProperty()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider());

            var returnType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = returnType,
                    MarshalType = returnType
                },
            };

            var properties = propertyBuilder.CreateProperties(new[] { getMethod });

            Assert.True(properties.ContainsKey("Active"));
            var prop = properties["Active"];

            Assert.Equal(returnType, prop.PublicType);
        }
Esempio n. 21
0
        public void GeneratePropertyIfGetterAndSetterMatch()
        {
            var propertyBuilder = new PropertyBuilder(new GlobalNamespaceProvider("SharpGen.Runtime"));

            var paramType = new CsFundamentalType(typeof(int));

            var getMethod = new CsMethod
            {
                Name        = "GetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType  = paramType,
                    MarshalType = paramType
                },
            };

            var setMethod = new CsMethod
            {
                Name        = "SetActive",
                ReturnValue = new CsReturnValue
                {
                    PublicType = new CsFundamentalType(typeof(void))
                }
            };

            setMethod.Add(new CsParameter
            {
                PublicType = paramType
            });

            var props = propertyBuilder.CreateProperties(new[] { getMethod, setMethod });

            Assert.Single(props);
            Assert.NotNull(props["Active"].Getter);
            Assert.NotNull(props["Active"].Setter);
        }