Skip to content

Commit 30ca4ab

Browse files
Add tests for trailing trivia
1 parent 8aea186 commit 30ca4ab

File tree

2 files changed

+53
-20
lines changed

2 files changed

+53
-20
lines changed

src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonElementParseTests.cs

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -287,27 +287,30 @@ public static void TryParseValueInvalidDataFail(string json)
287287
Assert.Equal(0, reader.BytesConsumed);
288288
}
289289

290-
[Theory]
291-
[InlineData("null")]
292-
[InlineData("\r\n null ")]
293-
[InlineData("false")]
294-
[InlineData("true ")]
295-
[InlineData(" 42.0 ")]
296-
[InlineData(" \"str\" \r\n")]
297-
[InlineData(" \"string with escaping: \\u0041\\u0042\\u0043\" \r\n")]
298-
[InlineData(" [ ]")]
299-
[InlineData(" [null, true, 42.0, \"str\", [], {}, ]")]
300-
[InlineData(" { } ")]
301-
[InlineData("""
302-
303-
{
304-
/* I am a comment */
305-
"key1" : 1,
306-
"key2" : null,
307-
"key3" : true,
308-
}
290+
public static IEnumerable<object[]> JsonMarshal_GetRawUtf8Value_TestData()
291+
{
292+
yield return new object[] { "null" };
293+
yield return new object[] { "\r\n null " };
294+
yield return new object[] { "false" };
295+
yield return new object[] { "true " };
296+
yield return new object[] { " 42.0 " };
297+
yield return new object[] { " \"str\" \r\n" };
298+
yield return new object[] { " \"string with escaping: \\u0041\\u0042\\u0043\" \r\n" };
299+
yield return new object[] { " [ ]" };
300+
yield return new object[] { " [null, true, 42.0, \"str\", [], {}, ]" };
301+
yield return new object[] { " { } " };
302+
yield return new object[] { """
303+
{
304+
/* I am a comment */
305+
"key1" : 1,
306+
"key2" : null,
307+
"key3" : true,
308+
}
309+
""" };
310+
}
309311

310-
""")]
312+
[Theory]
313+
[MemberData(nameof(JsonMarshal_GetRawUtf8Value_TestData))]
311314
public static void JsonMarshal_GetRawUtf8Value_RootValue_ReturnsFullValue(string json)
312315
{
313316
JsonDocumentOptions options = new JsonDocumentOptions { AllowTrailingCommas = true, CommentHandling = JsonCommentHandling.Skip };
@@ -318,6 +321,18 @@ public static void JsonMarshal_GetRawUtf8Value_RootValue_ReturnsFullValue(string
318321
Assert.Equal(json.Trim(), Encoding.UTF8.GetString(rawValue.ToArray()));
319322
}
320323

324+
[Theory]
325+
[MemberData(nameof(JsonMarshal_GetRawUtf8Value_TestData))]
326+
public static void JsonMarshal_GetRawUtf8Value_JsonElement_ParseValue_ReturnsFullValue(string json)
327+
{
328+
JsonReaderOptions options = new() { CommentHandling = JsonCommentHandling.Skip, AllowTrailingCommas = true };
329+
Utf8JsonReader reader = new(Encoding.UTF8.GetBytes(json), isFinalBlock: true, new JsonReaderState(options));
330+
JsonElement element = JsonElement.ParseValue(ref reader);
331+
332+
ReadOnlySpan<byte> rawValue = JsonMarshal.GetRawUtf8Value(element);
333+
Assert.Equal(json.Trim(), Encoding.UTF8.GetString(rawValue.ToArray()));
334+
}
335+
321336
[Fact]
322337
public static void JsonMarshal_GetRawUtf8Value_NestedValues_ReturnsExpectedValue()
323338
{

src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonNode/JsonValueTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -801,5 +801,23 @@ public class WrappedT<T>
801801

802802
public override string ToString() => Value?.ToString();
803803
}
804+
805+
[Theory]
806+
[InlineData("null", "null")]
807+
[InlineData("\r\n null ", "null")]
808+
[InlineData("false", "false")]
809+
[InlineData("true ", "true")]
810+
[InlineData(" 42.0 ", "42.0")]
811+
[InlineData(" \"str\" \r\n", "\"str\"")]
812+
[InlineData(" \"str\" \r\n// comment", "\"str\"")]
813+
[InlineData("// comment\r\n \"str\" ", "\"str\"")]
814+
[InlineData(" \"string with escaping: \\u0041\\u0042\\u0043\" \r\n", "\"string with escaping: ABC\"")]
815+
public static void IgnoreLeadingAndTrailingTrivia(string json, string expectedRoundtripValue)
816+
{
817+
JsonDocumentOptions docOptions = new() { CommentHandling = JsonCommentHandling.Skip };
818+
JsonValue? value = JsonNode.Parse(json, default(JsonNodeOptions), docOptions)?.AsValue();
819+
string actualRoundtripValue = value?.ToJsonString() ?? "null";
820+
Assert.Equal(expectedRoundtripValue, actualRoundtripValue);
821+
}
804822
}
805823
}

0 commit comments

Comments
 (0)