Fix System.Text.Json tests on Travis
jskeet opened this issue · comments
Jon Skeet commented
Now that I've updated the SDK, we're still getting a lot of test failures, which look like they're to do with unnecessary escaping:
$ dotnet test src/NodaTime.Serialization.Test
Test run for /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/bin/Debug/netcoreapp2.0/NodaTime.Serialization.Test.dll(.NETCoreApp,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.2.0-preview-20190606-02
Copyright (c) Microsoft Corporation. All rights reserved.
Starting test execution, please wait...
X OffsetConverter [54ms]
Error Message:
Expected string length 8 but was 13. Strings differ at index 1.
Expected: ""+05:30""
But was: ""\\u002b05:30""
------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonConverter converter) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 22
at NodaTime.Serialization.Test.SystemText.NodaConvertersTest.OffsetConverter() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaConvertersTest.cs:line 23
Test run in progress. X OffsetDateTimeConverter_WholeHours [1ms]
Error Message:
Expected string length 37 but was 42. Strings differ at index 30.
Expected: ""2012-01-02T03:04:05.123456789+05:00""
But was: ""2012-01-02T03:04:05.123456789\\u002b05:00""
-----------------------------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonConverter converter) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 22
at NodaTime.Serialization.Test.SystemText.NodaConvertersTest.OffsetDateTimeConverter_WholeHours() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaConvertersTest.cs:line 174
Test run in progress. X ZonedDateTimeConverter [7ms]
Error Message:
Expected string length 38 but was 48. Strings differ at index 20.
Expected: ""2012-10-28T01:30:00+01 Europe/London""
But was: ""2012-10-28T01:30:00\\u002b01 Europe\\u002fLondon""
-------------------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonConverter converter) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 22
at NodaTime.Serialization.Test.SystemText.NodaConvertersTest.ZonedDateTimeConverter() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaConvertersTest.cs:line 155
Test run in progress. X Serialize [1ms]
Error Message:
Expected string length 21 but was 26. Strings differ at index 8.
Expected: ""America/Los_Angeles""
But was: ""America\\u002fLos_Angeles""
-------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.NodaDateTimeZoneConverterTest.Serialize() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaDateTimeZoneConverterTest.cs:line 30
Test run in progress. X RoundTrip [1ms]
Error Message:
Expected string length 23 but was 28. Strings differ at index 11.
Expected: ""2012-01-02/2013-06-07""
But was: ""2012-01-02\\u002f2013-06-07""
----------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.NodaIsoDateIntervalConverterTest.RoundTrip() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaIsoDateIntervalConverterTest.cs:line 28
Test run in progress. X Serialize_InObject [1ms]
Error Message:
Expected string length 36 but was 41. Strings differ at index 23.
Expected: "{"Interval":"2012-01-02/2013-06-07"}"
But was: "{"Interval":"2012-01-02\\u002f2013-06-07"}"
----------------------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.NodaIsoDateIntervalConverterTest.Serialize_InObject() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaIsoDateIntervalConverterTest.cs:line 50
Test run in progress. X RoundTrip [1ms]
Error Message:
Expected string length 56 but was 61. Strings differ at index 24.
Expected: ""2012-01-02T03:04:05.67Z/2013-06-07T08:09:10.123456789Z""
But was: ""2012-01-02T03:04:05.67Z\\u002f2013-06-07T08:09:10.123456789Z""
-----------------------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.NodaIsoIntervalConverterTest.RoundTrip() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaIsoIntervalConverterTest.cs:line 28
Test run in progress. X RoundTrip_Infinite [12ms]
Error Message:
Expected string length 33 but was 38. Strings differ at index 1.
Expected: ""/2013-06-07T08:09:10.123456789Z""
But was: ""\\u002f2013-06-07T08:09:10.123456789Z""
------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.TestHelper.AssertConversions[T](T value, String expectedJson, JsonSerializerOptions options) in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/TestHelper.cs:line 28
at NodaTime.Serialization.Test.SystemText.NodaIsoIntervalConverterTest.RoundTrip_Infinite() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaIsoIntervalConverterTest.cs:line 35
Test run in progress. X Serialize_InObject [2ms]
Error Message:
Expected string length 56 but was 61. Strings differ at index 33.
Expected: "{"Interval":"2012-01-02T03:04:05Z/2013-06-07T08:09:10Z"}"
But was: "{"Interval":"2012-01-02T03:04:05Z\\u002f2013-06-07T08:09:10Z"}"
--------------------------------------------^
Stack Trace:
at NodaTime.Serialization.Test.SystemText.NodaIsoIntervalConverterTest.Serialize_InObject() in /home/travis/build/nodatime/nodatime.serialization/src/NodaTime.Serialization.Test/SystemText/NodaIsoIntervalConverterTest.cs:line 73
Test run in progress.Test Run Failed.
Total tests: 244
Passed: 235
Failed: 9
Total time: 3.1783 Seconds
The command "dotnet test src/NodaTime.Serialization.Test" exited with 1.
(There's also a build failure around SourceLink, but we can look at that separately.)
Jon Skeet commented
Note that we can fix the tests by modifying TestHelper.AssertConversions:
var options = new JsonSerializerOptions
{
Converters = { converter },
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
But that's probably not ideal. We could just decide to accept that escaping the + sign is a thing...
Jon Skeet commented
Fixed by accepting that + will be escaped.