Skip to content

Commit 9acc45d

Browse files
include testing
1 parent 8f09f7c commit 9acc45d

File tree

7 files changed

+77
-4
lines changed

7 files changed

+77
-4
lines changed

src/libraries/System.Text.Json/tests/Common/JsonTestHelper.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,15 @@ public static void AssertJsonEqual(string expected, string actual)
1818
{
1919
using JsonDocument expectedDom = JsonDocument.Parse(expected);
2020
using JsonDocument actualDom = JsonDocument.Parse(actual);
21-
AssertJsonEqual(expectedDom.RootElement, actualDom.RootElement, new());
21+
AssertJsonEqual(expectedDom.RootElement, actualDom.RootElement);
2222
}
2323

24-
private static void AssertJsonEqual(JsonElement expected, JsonElement actual, Stack<object> path)
24+
public static void AssertJsonEqual(JsonElement expected, JsonElement actual)
25+
{
26+
AssertJsonEqualCore(expected, actual, new());
27+
}
28+
29+
private static void AssertJsonEqualCore(JsonElement expected, JsonElement actual, Stack<object> path)
2530
{
2631
JsonValueKind valueKind = expected.ValueKind;
2732
AssertTrue(passCondition: valueKind == actual.ValueKind);
@@ -54,7 +59,7 @@ private static void AssertJsonEqual(JsonElement expected, JsonElement actual, St
5459
foreach (string name in expectedProperties)
5560
{
5661
path.Push(name);
57-
AssertJsonEqual(expected.GetProperty(name), actual.GetProperty(name), path);
62+
AssertJsonEqualCore(expected.GetProperty(name), actual.GetProperty(name), path);
5863
path.Pop();
5964
}
6065
break;
@@ -67,7 +72,7 @@ private static void AssertJsonEqual(JsonElement expected, JsonElement actual, St
6772
{
6873
AssertTrue(passCondition: actualEnumerator.MoveNext(), "Actual array contains fewer elements.");
6974
path.Push(i++);
70-
AssertJsonEqual(expectedEnumerator.Current, actualEnumerator.Current, path);
75+
AssertJsonEqualCore(expectedEnumerator.Current, actualEnumerator.Current, path);
7176
path.Pop();
7277
}
7378

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/ContextClasses.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public interface ITestContext
3434
public JsonTypeInfo<byte[]> ByteArray { get; }
3535
public JsonTypeInfo<string> String { get; }
3636
public JsonTypeInfo<(string Label1, int Label2, bool)> ValueTupleStringInt32Boolean { get; }
37+
public JsonTypeInfo<JsonDocument> JsonDocument { get; }
38+
public JsonTypeInfo<JsonElement> JsonElement { get; }
3739
public JsonTypeInfo<RealWorldContextTests.ClassWithEnumAndNullable> ClassWithEnumAndNullable { get; }
3840
public JsonTypeInfo<RealWorldContextTests.ClassWithNullableProperties> ClassWithNullableProperties { get; }
3941
public JsonTypeInfo<ClassWithCustomConverter> ClassWithCustomConverter { get; }

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/MetadataAndSerializationContextTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ namespace System.Text.Json.SourceGeneration.Tests
3030
[JsonSerializable(typeof(object[]))]
3131
[JsonSerializable(typeof(string))]
3232
[JsonSerializable(typeof((string Label1, int Label2, bool)))]
33+
[JsonSerializable(typeof(JsonDocument))]
34+
[JsonSerializable(typeof(JsonElement))]
3335
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable))]
3436
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties))]
3537
[JsonSerializable(typeof(ClassWithCustomConverter))]
@@ -81,6 +83,8 @@ public override void EnsureFastPathGeneratedAsExpected()
8183
Assert.Null(MetadataAndSerializationContext.Default.SampleEnum.SerializeHandler);
8284
Assert.Null(MetadataAndSerializationContext.Default.String.SerializeHandler);
8385
Assert.NotNull(MetadataAndSerializationContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
86+
Assert.Null(MetadataAndSerializationContext.Default.JsonDocument.SerializeHandler);
87+
Assert.Null(MetadataAndSerializationContext.Default.JsonElement.SerializeHandler);
8488
Assert.NotNull(MetadataAndSerializationContext.Default.ClassWithEnumAndNullable.SerializeHandler);
8589
Assert.NotNull(MetadataAndSerializationContext.Default.ClassWithNullableProperties.SerializeHandler);
8690
Assert.NotNull(MetadataAndSerializationContext.Default.ClassWithCustomConverter);
@@ -97,6 +101,7 @@ public override void EnsureFastPathGeneratedAsExpected()
97101
Assert.NotNull(MetadataAndSerializationContext.Default.PersonStruct.SerializeHandler);
98102
Assert.NotNull(MetadataAndSerializationContext.Default.TypeWithValidationAttributes.SerializeHandler);
99103
Assert.NotNull(MetadataAndSerializationContext.Default.TypeWithDerivedAttribute.SerializeHandler);
104+
Assert.Null(MetadataAndSerializationContext.Default.PolymorphicClass.SerializeHandler);
100105
}
101106
}
102107
}

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/MetadataContextTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ namespace System.Text.Json.SourceGeneration.Tests
2929
[JsonSerializable(typeof(byte[]), GenerationMode = JsonSourceGenerationMode.Metadata)]
3030
[JsonSerializable(typeof(string), GenerationMode = JsonSourceGenerationMode.Metadata)]
3131
[JsonSerializable(typeof((string Label1, int Label2, bool)), GenerationMode = JsonSourceGenerationMode.Metadata)]
32+
[JsonSerializable(typeof(JsonDocument), GenerationMode = JsonSourceGenerationMode.Metadata)]
33+
[JsonSerializable(typeof(JsonElement), GenerationMode = JsonSourceGenerationMode.Metadata)]
3234
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable), GenerationMode = JsonSourceGenerationMode.Metadata)]
3335
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties), GenerationMode = JsonSourceGenerationMode.Metadata)]
3436
[JsonSerializable(typeof(ClassWithCustomConverter), GenerationMode = JsonSourceGenerationMode.Metadata)]
@@ -79,6 +81,8 @@ public override void EnsureFastPathGeneratedAsExpected()
7981
Assert.Null(MetadataWithPerTypeAttributeContext.Default.SampleEnum.SerializeHandler);
8082
Assert.Null(MetadataWithPerTypeAttributeContext.Default.String.SerializeHandler);
8183
Assert.Null(MetadataWithPerTypeAttributeContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
84+
Assert.Null(MetadataWithPerTypeAttributeContext.Default.JsonDocument.SerializeHandler);
85+
Assert.Null(MetadataWithPerTypeAttributeContext.Default.JsonElement.SerializeHandler);
8286
Assert.Null(MetadataWithPerTypeAttributeContext.Default.ClassWithEnumAndNullable.SerializeHandler);
8387
Assert.Null(MetadataWithPerTypeAttributeContext.Default.ClassWithNullableProperties.SerializeHandler);
8488
Assert.Null(MetadataWithPerTypeAttributeContext.Default.ClassWithCustomConverter.SerializeHandler);
@@ -95,6 +99,7 @@ public override void EnsureFastPathGeneratedAsExpected()
9599
Assert.Null(MetadataWithPerTypeAttributeContext.Default.PersonStruct.SerializeHandler);
96100
Assert.Null(MetadataWithPerTypeAttributeContext.Default.TypeWithValidationAttributes.SerializeHandler);
97101
Assert.Null(MetadataWithPerTypeAttributeContext.Default.TypeWithDerivedAttribute.SerializeHandler);
102+
Assert.Null(MetadataWithPerTypeAttributeContext.Default.PolymorphicClass.SerializeHandler);
98103
}
99104
}
100105

@@ -121,6 +126,8 @@ public override void EnsureFastPathGeneratedAsExpected()
121126
[JsonSerializable(typeof(byte[]))]
122127
[JsonSerializable(typeof(string))]
123128
[JsonSerializable(typeof((string Label1, int Label2, bool)))]
129+
[JsonSerializable(typeof(JsonDocument))]
130+
[JsonSerializable(typeof(JsonElement))]
124131
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable))]
125132
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties))]
126133
[JsonSerializable(typeof(ClassWithCustomConverter))]
@@ -194,6 +201,8 @@ public override void EnsureFastPathGeneratedAsExpected()
194201
Assert.Null(MetadataContext.Default.SampleEnum.SerializeHandler);
195202
Assert.Null(MetadataContext.Default.String.SerializeHandler);
196203
Assert.Null(MetadataContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
204+
Assert.Null(MetadataContext.Default.JsonDocument.SerializeHandler);
205+
Assert.Null(MetadataContext.Default.JsonElement.SerializeHandler);
197206
Assert.Null(MetadataContext.Default.ClassWithEnumAndNullable.SerializeHandler);
198207
Assert.Null(MetadataContext.Default.ClassWithNullableProperties.SerializeHandler);
199208
Assert.Null(MetadataContext.Default.ClassWithCustomConverter.SerializeHandler);
@@ -210,6 +219,7 @@ public override void EnsureFastPathGeneratedAsExpected()
210219
Assert.Null(MetadataContext.Default.PersonStruct.SerializeHandler);
211220
Assert.Null(MetadataContext.Default.TypeWithValidationAttributes.SerializeHandler);
212221
Assert.Null(MetadataContext.Default.TypeWithDerivedAttribute.SerializeHandler);
222+
Assert.Null(MetadataContext.Default.PolymorphicClass.SerializeHandler);
213223
}
214224

215225
[Fact]

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/MixedModeContextTests.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ namespace System.Text.Json.SourceGeneration.Tests
3030
[JsonSerializable(typeof(byte[]), GenerationMode = JsonSourceGenerationMode.Metadata)]
3131
[JsonSerializable(typeof(string), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
3232
[JsonSerializable(typeof((string Label1, int Label2, bool)), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
33+
[JsonSerializable(typeof(JsonDocument), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
34+
[JsonSerializable(typeof(JsonElement), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
3335
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
3436
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
3537
[JsonSerializable(typeof(ClassWithCustomConverter), GenerationMode = JsonSourceGenerationMode.Metadata | JsonSourceGenerationMode.Serialization)]
@@ -81,6 +83,8 @@ public override void EnsureFastPathGeneratedAsExpected()
8183
Assert.Null(MixedModeContext.Default.SampleEnum.SerializeHandler);
8284
Assert.Null(MixedModeContext.Default.String.SerializeHandler);
8385
Assert.NotNull(MixedModeContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
86+
Assert.Null(MixedModeContext.Default.JsonDocument.SerializeHandler);
87+
Assert.Null(MixedModeContext.Default.JsonElement.SerializeHandler);
8488
Assert.NotNull(MixedModeContext.Default.ClassWithEnumAndNullable.SerializeHandler);
8589
Assert.NotNull(MixedModeContext.Default.ClassWithNullableProperties.SerializeHandler);
8690
Assert.Null(MixedModeContext.Default.ClassWithCustomConverter.SerializeHandler);
@@ -97,6 +101,7 @@ public override void EnsureFastPathGeneratedAsExpected()
97101
Assert.NotNull(MixedModeContext.Default.PersonStruct.SerializeHandler);
98102
Assert.NotNull(MixedModeContext.Default.TypeWithValidationAttributes.SerializeHandler);
99103
Assert.NotNull(MixedModeContext.Default.TypeWithDerivedAttribute.SerializeHandler);
104+
Assert.Null(MixedModeContext.Default.PolymorphicClass.SerializeHandler);
100105
}
101106

102107
[Fact]

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/RealWorldContextTests.cs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,40 @@ public virtual void RoundTripTypeNameClash()
111111
VerifyRepeatedLocation(expected, obj);
112112
}
113113

114+
[Theory]
115+
[InlineData("0")]
116+
[InlineData("false")]
117+
[InlineData("\"str\"")]
118+
[InlineData("[1,2,3]")]
119+
[InlineData("{ \"key\" : \"value\" }")]
120+
public void RoundtripJsonDocument(string json)
121+
{
122+
JsonDocument jsonDocument = JsonDocument.Parse(json);
123+
124+
string actualJson = JsonSerializer.Serialize(jsonDocument, DefaultContext.JsonDocument);
125+
JsonTestHelper.AssertJsonEqual(json, actualJson);
126+
127+
JsonDocument actualJsonDocument = JsonSerializer.Deserialize(actualJson, DefaultContext.JsonDocument);
128+
JsonTestHelper.AssertJsonEqual(jsonDocument.RootElement, actualJsonDocument.RootElement);
129+
}
130+
131+
[Theory]
132+
[InlineData("0")]
133+
[InlineData("false")]
134+
[InlineData("\"str\"")]
135+
[InlineData("[1,2,3]")]
136+
[InlineData("{ \"key\" : \"value\" }")]
137+
public void RoundtripJsonElement(string json)
138+
{
139+
JsonElement jsonElement = JsonDocument.Parse(json).RootElement;
140+
141+
string actualJson = JsonSerializer.Serialize(jsonElement, DefaultContext.JsonElement);
142+
JsonTestHelper.AssertJsonEqual(json, actualJson);
143+
144+
JsonElement actualJsonElement = JsonSerializer.Deserialize(actualJson, DefaultContext.JsonElement);
145+
JsonTestHelper.AssertJsonEqual(jsonElement, actualJsonElement);
146+
}
147+
114148
[Fact]
115149
public virtual void RoundTripValueTuple()
116150
{

src/libraries/System.Text.Json/tests/System.Text.Json.SourceGeneration.Tests/SerializationContextTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ namespace System.Text.Json.SourceGeneration.Tests
3030
[JsonSerializable(typeof(byte[]))]
3131
[JsonSerializable(typeof(string))]
3232
[JsonSerializable(typeof((string Label1, int Label2, bool)))]
33+
[JsonSerializable(typeof(JsonDocument))]
34+
[JsonSerializable(typeof(JsonElement))]
3335
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable))]
3436
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties))]
3537
[JsonSerializable(typeof(ClassWithCustomConverter))]
@@ -74,6 +76,8 @@ internal partial class SerializationContext : JsonSerializerContext, ITestContex
7476
[JsonSerializable(typeof(byte[]), GenerationMode = JsonSourceGenerationMode.Serialization)]
7577
[JsonSerializable(typeof(string), GenerationMode = JsonSourceGenerationMode.Serialization)]
7678
[JsonSerializable(typeof((string Label1, int Label2, bool)), GenerationMode = JsonSourceGenerationMode.Serialization)]
79+
[JsonSerializable(typeof(JsonDocument), GenerationMode = JsonSourceGenerationMode.Serialization)]
80+
[JsonSerializable(typeof(JsonElement), GenerationMode = JsonSourceGenerationMode.Serialization)]
7781
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable), GenerationMode = JsonSourceGenerationMode.Serialization)]
7882
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties), GenerationMode = JsonSourceGenerationMode.Serialization)]
7983
[JsonSerializable(typeof(ClassWithCustomConverter), GenerationMode = JsonSourceGenerationMode.Serialization)]
@@ -119,6 +123,8 @@ internal partial class SerializationWithPerTypeAttributeContext : JsonSerializer
119123
[JsonSerializable(typeof(byte[]), GenerationMode = JsonSourceGenerationMode.Serialization)]
120124
[JsonSerializable(typeof(string), GenerationMode = JsonSourceGenerationMode.Serialization)]
121125
[JsonSerializable(typeof((string Label1, int Label2, bool)), GenerationMode = JsonSourceGenerationMode.Serialization)]
126+
[JsonSerializable(typeof(JsonDocument), GenerationMode = JsonSourceGenerationMode.Serialization)]
127+
[JsonSerializable(typeof(JsonElement), GenerationMode = JsonSourceGenerationMode.Serialization)]
122128
[JsonSerializable(typeof(RealWorldContextTests.ClassWithEnumAndNullable), GenerationMode = JsonSourceGenerationMode.Serialization)]
123129
[JsonSerializable(typeof(RealWorldContextTests.ClassWithNullableProperties), GenerationMode = JsonSourceGenerationMode.Serialization)]
124130
[JsonSerializable(typeof(ClassWithCustomConverter), GenerationMode = JsonSourceGenerationMode.Serialization)]
@@ -175,6 +181,8 @@ public override void EnsureFastPathGeneratedAsExpected()
175181
Assert.Null(SerializationContext.Default.ByteArray.SerializeHandler);
176182
Assert.Null(SerializationContext.Default.String.SerializeHandler);
177183
Assert.NotNull(SerializationContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
184+
Assert.Null(SerializationContext.Default.JsonDocument.SerializeHandler);
185+
Assert.Null(SerializationContext.Default.JsonElement.SerializeHandler);
178186
Assert.NotNull(SerializationContext.Default.ClassWithEnumAndNullable.SerializeHandler);
179187
Assert.Null(SerializationContext.Default.ClassWithCustomConverter.SerializeHandler);
180188
Assert.Null(SerializationContext.Default.StructWithCustomConverter.SerializeHandler);
@@ -188,6 +196,7 @@ public override void EnsureFastPathGeneratedAsExpected()
188196
Assert.NotNull(SerializationContext.Default.PersonStruct.SerializeHandler);
189197
Assert.NotNull(SerializationContext.Default.TypeWithValidationAttributes.SerializeHandler);
190198
Assert.NotNull(SerializationContext.Default.TypeWithDerivedAttribute.SerializeHandler);
199+
Assert.Null(SerializationContext.Default.PolymorphicClass.SerializeHandler);
191200
}
192201

193202
[Fact]
@@ -511,6 +520,8 @@ public override void EnsureFastPathGeneratedAsExpected()
511520
Assert.Null(SerializationWithPerTypeAttributeContext.Default.SampleEnum.SerializeHandler);
512521
Assert.Null(SerializationWithPerTypeAttributeContext.Default.String.SerializeHandler);
513522
Assert.NotNull(SerializationWithPerTypeAttributeContext.Default.ValueTupleStringInt32Boolean.SerializeHandler);
523+
Assert.Null(SerializationWithPerTypeAttributeContext.Default.JsonDocument.SerializeHandler);
524+
Assert.Null(SerializationWithPerTypeAttributeContext.Default.JsonElement.SerializeHandler);
514525
Assert.NotNull(SerializationWithPerTypeAttributeContext.Default.ClassWithEnumAndNullable.SerializeHandler);
515526
Assert.Null(SerializationWithPerTypeAttributeContext.Default.ClassWithCustomConverter.SerializeHandler);
516527
Assert.Null(SerializationWithPerTypeAttributeContext.Default.StructWithCustomConverter.SerializeHandler);
@@ -526,6 +537,7 @@ public override void EnsureFastPathGeneratedAsExpected()
526537
Assert.NotNull(SerializationWithPerTypeAttributeContext.Default.PersonStruct.SerializeHandler);
527538
Assert.NotNull(SerializationWithPerTypeAttributeContext.Default.TypeWithValidationAttributes.SerializeHandler);
528539
Assert.NotNull(SerializationWithPerTypeAttributeContext.Default.TypeWithDerivedAttribute.SerializeHandler);
540+
Assert.Null(SerializationWithPerTypeAttributeContext.Default.PolymorphicClass.SerializeHandler);
529541
}
530542
}
531543
}

0 commit comments

Comments
 (0)