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); } }
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); } }
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); } }
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)); } }