public void DefaultJsPropertyConverterComplexConversionWhenExcluded()
        {
            var dummy = new DummyClass
            {
                IAmAProperty = "IsProp",
                AComplexType = new ComplexType()
                {
                    IsComplex = "very"
                }
            };
            var propInfo         = typeof(DummyClass).GetProperty(nameof(DummyClass.AComplexType));
            var orgValue         = propInfo.GetValue(dummy);
            var expectedPropName = "aComplexType";
            var expectedValue    = JsonConvert.SerializeObject(dummy.AComplexType, Formatting.None, Settings.SerializerSettings);

            var converter = new JsPropertyConverter(propInfo, orgValue, new List <string> {
                "CSharpToJs.Tests.Mocks"
            }, new List <string> {
                "CSharpToJs.Tests.Mocks"
            });

            var jsProp = converter.Convert();

            Assert.Same(orgValue, jsProp.OriginalValue);
            Assert.Equal(expectedPropName, jsProp.Name);
            Assert.Equal(JsPropertyType.Plain, jsProp.PropertyType);
            Assert.Equal(expectedValue, jsProp.Value);
        }
        public void DefaultJsPropertyConverterComplexConversion()
        {
            var dummy = new DummyClass
            {
                IAmAProperty = "IsProp",
                AComplexType = new ComplexType()
                {
                    IsComplex = "very"
                }
            };
            var propInfo         = typeof(DummyClass).GetProperty(nameof(DummyClass.AComplexType));
            var orgValue         = propInfo.GetValue(dummy);
            var expectedPropName = "aComplexType";
            var expectedValue    = "new ComplexType()";

            var converter = new JsPropertyConverter(propInfo, orgValue, new List <string> {
                "CSharpToJs.Tests.Mocks"
            }, new List <string>());

            var jsProp = converter.Convert();

            Assert.Same(orgValue, jsProp.OriginalValue);
            Assert.Equal(expectedPropName, jsProp.Name);
            Assert.Equal(JsPropertyType.Instance, jsProp.PropertyType);
            Assert.Equal(expectedValue, jsProp.Value);
        }
        public void SetCustomNameConverter()
        {
            var converter     = new JsPropertyConverter(null, null, null, null);
            var nameConverter = new PropertyNameConverterMock();

            converter.PropertyNameConverter = nameConverter;

            Assert.Equal(nameConverter, converter.PropertyNameConverter);
        }
        public void EnsureDependenciesAreSerializedForJsIgnore()
        {
            var propResolver = new PropertyResolver();
            var instance     = new DummyClass();
            var propValue    = instance.IgnoredClass;

            var props         = propResolver.GetProperties(typeof(DummyClass));
            var prop          = props.Single(a => a.Name == nameof(DummyClass.IgnoredClass));
            var propConverter = new JsPropertyConverter(prop, propValue, null, null);
            var jsProp        = propConverter.Convert();

            Assert.Equal(JsPropertyType.Plain, jsProp.PropertyType);
            Assert.Equal(jsProp.Value,
                         JsonConvert.SerializeObject(new IgnoredClass(), Formatting.None, Settings.SerializerSettings));
        }
        public void DefaultJsPropertyConverterSimpleConversion()
        {
            var dummy = new DummyClass
            {
                Field        = "IsField",
                IAmAProperty = "IsProp"
            };
            var propInfo         = typeof(DummyClass).GetProperty(nameof(DummyClass.IAmAProperty));
            var orgValue         = propInfo.GetValue(dummy);
            var expectedPropName = "iAmAProperty";
            var expectedValue    = $"\"{dummy.IAmAProperty}\"";

            var converter = new JsPropertyConverter(propInfo, orgValue, new List <string>(), new List <string>());

            var jsProp = converter.Convert();

            Assert.Same(orgValue, jsProp.OriginalValue);
            Assert.Same(propInfo, jsProp.PropertyInfo);
            Assert.Equal(expectedPropName, jsProp.Name);
            Assert.Equal(JsPropertyType.Plain, jsProp.PropertyType);
            Assert.Equal(expectedValue, jsProp.Value);
        }