Exemple #1
0
        public void FormatType_Without_Resolver_Formats_Objects(Type objectType, string inputText, string culture, string expected)
        {
            var inputValue = DataRowParser.ConvertExpected(objectType, inputText);

            using (new CultureSwap(culture)) {
                var actual = Formatter.FormatType(inputValue);
                Assert.AreEqual(expected, actual);
            }
        }
Exemple #2
0
        public void BuildModel_QueryStringDictionary_Can_Parse_All_Native_Types(string propertyName, string value, object expected, string culture)
        {
            using (new CultureSwap(culture)) {
                var propertyInfo = typeof(AllNativeTypes).GetProperty(propertyName);
                var dictionary   = new QueryStringDictionary($"{propertyName}={value ?? ""}");

                var model  = _ModelBuilder.BuildModel(typeof(AllNativeTypes), null, dictionary) as AllNativeTypes;
                var actual = propertyInfo.GetValue(model, null);

                expected = DataRowParser.ConvertExpected(propertyInfo.PropertyType, expected);

                Assert.AreEqual(expected, actual);
            }
        }
Exemple #3
0
        public void ReturnJsonObject_Returns_Simple_Values_Correctly(Type type, object value, string expectedBody)
        {
            var route = Route_Tests.CreateRoute <Controller>(nameof(Controller.IntMethod));

            _Environment.Environment[WebApiEnvironmentKey.Route] = route;

            using (new CultureSwap("en-GB")) {
                var parsedValue = DataRowParser.ConvertExpected(type, value);

                _Responder.ReturnJsonObject(_Environment.Environment, parsedValue);

                Assert.AreEqual("application/json; charset=utf-8", _Environment.ResponseHeadersDictionary["Content-Type"]);
                Assert.AreEqual(expectedBody.Length.ToString(CultureInfo.InvariantCulture), _Environment.ResponseHeadersDictionary["Content-Length"]);
                Assert.AreEqual(expectedBody, _Environment.ResponseBodyText);
            }
        }
Exemple #4
0
        public void FormatType_With_Resolver_Uses_Resolver_When_Supplied(Type valueType, string formatterMethodName, object rawValue)
        {
            Mock mockFormatter = null;

            void createMock <T>(T expectedValue)
            {
                var mock = MockHelper.CreateMock <ITypeFormatter <T> >();

                mock.Setup(r => r.Format(expectedValue)).Returns("!!!");
                mockFormatter = mock;
            }

            var formatterMethod = typeof(Formatter)
                                  .GetMethods(BindingFlags.Static | BindingFlags.Public)
                                  .Single(r => r.Name == formatterMethodName && r.GetParameters().Length == 2);
            Func <object, TypeFormatterResolver, string> callFormatter;

            callFormatter = (t, r) => formatterMethod.Invoke(null, new object[] { t, r }) as string;

            var value = DataRowParser.ConvertExpected(valueType, rawValue);

            if (valueType == typeof(bool))
            {
                createMock <bool>((bool)value);
            }
            else if (valueType == typeof(byte))
            {
                createMock <byte>((byte)value);
            }
            else if (valueType == typeof(char))
            {
                createMock <char>((char)value);
            }
            else if (valueType == typeof(Int16))
            {
                createMock <short>((short)value);
            }
            else if (valueType == typeof(UInt16))
            {
                createMock <ushort>((ushort)value);
            }
            else if (valueType == typeof(Int32))
            {
                createMock <int>((int)value);
            }
            else if (valueType == typeof(UInt32))
            {
                createMock <uint>((uint)value);
            }
            else if (valueType == typeof(Int64))
            {
                createMock <long>((long)value);
            }
            else if (valueType == typeof(UInt64))
            {
                createMock <ulong>((ulong)value);
            }
            else if (valueType == typeof(float))
            {
                createMock <float>((float)value);
            }
            else if (valueType == typeof(double))
            {
                createMock <double>((double)value);
            }
            else if (valueType == typeof(decimal))
            {
                createMock <decimal>((decimal)value);
            }
            else if (valueType == typeof(DateTime))
            {
                createMock <DateTime>((DateTime)value);
            }
            else if (valueType == typeof(DateTimeOffset))
            {
                createMock <DateTimeOffset>((DateTimeOffset)value);
            }
            else if (valueType == typeof(Guid))
            {
                createMock <Guid>((Guid)value);
            }
            else if (valueType == typeof(byte[]))
            {
                createMock <byte[]>((byte[])value);
            }
            else if (valueType == typeof(string))
            {
                createMock <string>((string)value);
            }
            else
            {
                throw new NotImplementedException();
            }

            // Null type resolver should call normal formatter
            Assert.AreNotEqual("!!!", callFormatter(value, null));

            // Type resolver with no formatter for type should call normal formatter
            var emptyTypeResolver = new TypeFormatterResolver();

            Assert.AreNotEqual("!!!", callFormatter(value, emptyTypeResolver));

            // If resolver contains formatter for type then it should be used
            var typeResolver = new TypeFormatterResolver((ITypeFormatter)mockFormatter.Object);

            Assert.AreEqual("!!!", callFormatter(value, typeResolver));
        }
        public void Serialise_Uses_Formatter_For_Dates_And_Byte_Arrays_But_Not_Json_Spec_Types(Type valueType, bool mustUseFormatter, string propertyName, object originalValueRaw)
        {
            Mock mockFormatter = null;

            void createMock <T>(T expectedValue)
            {
                var mock = MockHelper.CreateMock <ITypeFormatter <T> >();

                mock.Setup(r => r.Format(expectedValue)).Returns("!!!");
                mockFormatter = mock;
            }

            var expectedNormal = DataRowParser.ConvertExpected(valueType, originalValueRaw);
            var valueProperty  = typeof(ValueTypes).GetProperty(propertyName);

            if (valueType == typeof(bool))
            {
                createMock <bool>((bool)expectedNormal);
            }
            else if (valueType == typeof(byte))
            {
                createMock <byte>((byte)expectedNormal);
            }
            else if (valueType == typeof(char))
            {
                createMock <char>((char)expectedNormal);
            }
            else if (valueType == typeof(Int16))
            {
                createMock <short>((short)expectedNormal);
            }
            else if (valueType == typeof(UInt16))
            {
                createMock <ushort>((ushort)expectedNormal);
            }
            else if (valueType == typeof(Int32))
            {
                createMock <int>((int)expectedNormal);
            }
            else if (valueType == typeof(UInt32))
            {
                createMock <uint>((uint)expectedNormal);
            }
            else if (valueType == typeof(Int64))
            {
                createMock <long>((long)expectedNormal);
            }
            else if (valueType == typeof(UInt64))
            {
                createMock <ulong>((ulong)expectedNormal);
            }
            else if (valueType == typeof(float))
            {
                createMock <float>((float)expectedNormal);
            }
            else if (valueType == typeof(double))
            {
                createMock <double>((double)expectedNormal);
            }
            else if (valueType == typeof(decimal))
            {
                createMock <decimal>((decimal)expectedNormal);
            }
            else if (valueType == typeof(DateTime))
            {
                createMock <DateTime>((DateTime)expectedNormal);
            }
            else if (valueType == typeof(DateTimeOffset))
            {
                createMock <DateTimeOffset>((DateTimeOffset)expectedNormal);
            }
            else if (valueType == typeof(Guid))
            {
                createMock <Guid>((Guid)expectedNormal);
            }
            else if (valueType == typeof(string))
            {
                createMock <string>((string)expectedNormal);
            }
            else if (valueType == typeof(byte[]))
            {
                createMock <byte[]>((byte[])expectedNormal);
            }
            else
            {
                throw new NotImplementedException();
            }

            var typeResolver = new TypeFormatterResolver((ITypeFormatter)mockFormatter.Object);

            var originalInstance = new ValueTypes();

            valueProperty.SetValue(originalInstance, expectedNormal);

            var jsonText  = _Serialiser.Serialise(originalInstance, typeResolver);
            var jObject   = JObject.Parse(jsonText);
            var jProperty = jObject.Property(propertyName);

            if (mustUseFormatter)
            {
                Assert.AreEqual("!!!", jProperty.Value.ToString());
            }
            else
            {
                Assert.AreEqual(expectedNormal, jProperty.Value.ToObject(valueProperty.PropertyType));
            }
        }