@@ -11,6 +11,41 @@ namespace UnitTests.Primitives
11
11
[ TestFixture ]
12
12
class SerializationTests
13
13
{
14
+ [ TestCase ( "2018-05-01T12:04:29.1234567-02:00" , "2018-05-01T14:04:29.123+00:00" ) ]
15
+ [ TestCase ( "2018-05-01T12:04:29.123456-02:00" , "2018-05-01T14:04:29.123+00:00" ) ]
16
+ [ TestCase ( "2018-05-01T12:04:29.12345-02:00" , "2018-05-01T14:04:29.123+00:00" ) ]
17
+ [ TestCase ( "2018-05-01T12:04:29.1234-02:00" , "2018-05-01T14:04:29.123+00:00" ) ]
18
+ [ TestCase ( "2018-05-01T12:04:29.123-02:00" , "2018-05-01T14:04:29.123+00:00" ) ]
19
+ [ TestCase ( "2018-05-01T12:04:29.12-02:00" , "2018-05-01T14:04:29.120+00:00" ) ]
20
+ [ TestCase ( "2018-05-01T12:04:29.1-02:00" , "2018-05-01T14:04:29.100+00:00" ) ]
21
+ [ TestCase ( "2018-05-01T12:04:29-02:00" , "2018-05-01T14:04:29.000+00:00" ) ]
22
+ [ TestCase ( "2018-05-01T12:04:29.1234567Z" , "2018-05-01T12:04:29.123+00:00" ) ]
23
+ [ TestCase ( "2018-05-01T12:04:29.123456Z" , "2018-05-01T12:04:29.123+00:00" ) ]
24
+ [ TestCase ( "2018-05-01T12:04:29.12345Z" , "2018-05-01T12:04:29.123+00:00" ) ]
25
+ [ TestCase ( "2018-05-01T12:04:29.1234Z" , "2018-05-01T12:04:29.123+00:00" ) ]
26
+ [ TestCase ( "2018-05-01T12:04:29.123Z" , "2018-05-01T12:04:29.123+00:00" ) ]
27
+ [ TestCase ( "2018-05-01T12:04:29.12Z" , "2018-05-01T12:04:29.120+00:00" ) ]
28
+ [ TestCase ( "2018-05-01T12:04:29.1Z" , "2018-05-01T12:04:29.100+00:00" ) ]
29
+ [ TestCase ( "2018-05-01T12:04:29Z" , "2018-05-01T12:04:29.000+00:00" ) ]
30
+ public void FromLocalStringToUniversalDateTimeOffset ( string input , string expected )
31
+ {
32
+ var dtInput = DateTimeOffset . ParseExact ( input , Constants . Iso8601Formats , CultureInfo . InvariantCulture , Constants . DateTimeStyle ) ;
33
+ var output = dtInput . ToUniversalTime ( ) . ToString ( Constants . Iso8601Format ) ;
34
+ Assert . AreEqual ( expected , output ) ;
35
+
36
+ var json = $@ "{{""date"":""{ input } ""}}";
37
+ Assert . DoesNotThrow ( ( ) => json . FromJson < ADateTimeOffset > ( lowerCase : true ) ) ;
38
+ }
39
+
40
+ [ Test ]
41
+ public void JsonSerializationUsesKnownFormat ( )
42
+ {
43
+ var now = DateTimeOffset . Now ;
44
+ var output = new ADateTimeOffset { Date = now } ;
45
+ var json = output . ToJson ( lowerCase : true ) ;
46
+ Assert . AreEqual ( $@ "{{""date"":""{ now . ToUniversalTime ( ) . ToString ( Constants . Iso8601Format , CultureInfo . InvariantCulture ) } ""}}", json ) ;
47
+ }
48
+
14
49
[ Test ]
15
50
public void DateTimeSerializationRoundTrip ( )
16
51
{
@@ -37,6 +72,27 @@ public void DateTimeSerializationRoundTrip()
37
72
Assert . AreEqual ( dt3 , dt4 ) ;
38
73
}
39
74
75
+ [ Test ]
76
+ public void DateTimeSerializationRoundTripFormatPointZ ( )
77
+ {
78
+ var dt1 = DateTimeOffset . ParseExact ( "2018-05-01T15:04:29.00Z" , Constants . Iso8601Formats , CultureInfo . InvariantCulture , Constants . DateTimeStyle ) ;
79
+ var str1 = dt1 . ToJson ( ) ;
80
+ var ret1 = str1 . FromJson < DateTimeOffset > ( ) ;
81
+ Assert . AreEqual ( dt1 , ret1 ) ;
82
+
83
+ var dt2 = DateTimeOffset . ParseExact ( "2018-05-01T15:04:29Z" , Constants . Iso8601Formats , CultureInfo . InvariantCulture , Constants . DateTimeStyle ) ;
84
+ var str2 = dt2 . ToJson ( ) ;
85
+ var ret2 = str2 . FromJson < DateTimeOffset > ( ) ;
86
+ Assert . AreEqual ( dt2 , ret2 ) ;
87
+
88
+ Assert . AreEqual ( dt1 , dt2 ) ;
89
+ }
90
+
91
+ class ADateTimeOffset
92
+ {
93
+ public DateTimeOffset Date ;
94
+ }
95
+
40
96
class TestData
41
97
{
42
98
public List < string > Things { get ; set ; } = new List < string > ( ) ;
0 commit comments