public void EmittedSerializerIsValid() { NullableDateTimeConverter converter = new NullableDateTimeConverter(); DateTime? date = new DateTime(2019, 5, 4, 3, 2, 1); DynamicMethod serialize = new DynamicMethod("Serialize", typeof(string), new Type[] { typeof(DateTime?), typeof(IFormatProvider), typeof(char) }, typeof(DateTimeConverterTests)); serialize.GetILGenerator() .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal) .DeclareLocal <DateTime>(out LocalBuilder local) .Newobj <StringBuilder>() .Ldarg_0() .Emit(gen => converter.EmitAppendToStringBuilder(gen, nullableLocal, local, null)) .Callvirt <StringBuilder>("ToString") .Ret(); string serialized = (string)serialize.Invoke(null, new object?[] { date, CultureInfo.InvariantCulture, ',' }) !; serialized.Should().Be("05/04/2019 03:02:01"); }
public void CanEmitSerializerWithCustomDateFormat() { NullableDateTimeConverter converter = new NullableDateTimeConverter(); DateTime? date = new DateTime(2019, 5, 4, 3, 2, 1); CsvColumnAttribute attribute = new CsvColumnAttribute("Date") { DateFormat = "yyyy/MMM/dd H:mm:ss" }; DynamicMethod serialize = new DynamicMethod("Serialize", typeof(string), new Type[] { typeof(DateTime?), typeof(IFormatProvider), typeof(char) }, typeof(DateTimeConverterTests)); serialize.GetILGenerator() .DeclareLocal <DateTime?>(out LocalBuilder nullableLocal) .DeclareLocal <DateTime>(out LocalBuilder local) .Newobj <StringBuilder>() .Ldarg_0() .Emit(gen => converter.EmitAppendToStringBuilder(gen, nullableLocal, local, attribute)) .Callvirt <StringBuilder>("ToString") .Ret(); string serialized = (string)serialize.Invoke(null, new object?[] { date, CultureInfo.InvariantCulture, ',' }) !; serialized.Should().Be("2019/May/04 3:02:01"); }