nodatime / nodatime.serialization

Serialization projects for Noda Time

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fix System.Text.Json tests on Travis

jskeet opened this issue · comments

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.)

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...

Fixed by accepting that + will be escaped.