Skip to content

Commit edead34

Browse files
Copilotstephentoub
andcommitted
Improve code coverage for System.Text.Json with targeted unit tests
Co-authored-by: stephentoub <[email protected]>
1 parent 48609a2 commit edead34

File tree

2 files changed

+180
-2
lines changed

2 files changed

+180
-2
lines changed

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

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static void SetResetFirstBit()
2323
Assert.Equal(0, bitStack.CurrentDepth);
2424
bitStack.SetFirstBit();
2525
Assert.Equal(1, bitStack.CurrentDepth);
26-
Assert.False(bitStack.Pop());
26+
Assert.True(bitStack.Pop());
2727
Assert.Equal(0, bitStack.CurrentDepth);
2828

2929
bitStack = default;
@@ -37,14 +37,89 @@ public static void SetResetFirstBit()
3737
Assert.Equal(0, bitStack.CurrentDepth);
3838
bitStack.SetFirstBit();
3939
Assert.Equal(1, bitStack.CurrentDepth);
40-
Assert.False(bitStack.Pop());
40+
Assert.True(bitStack.Pop());
4141
Assert.Equal(0, bitStack.CurrentDepth);
4242
bitStack.ResetFirstBit();
4343
Assert.Equal(1, bitStack.CurrentDepth);
4444
Assert.False(bitStack.Pop());
4545
Assert.Equal(0, bitStack.CurrentDepth);
4646
}
4747

48+
[Fact]
49+
public static void PeekTest()
50+
{
51+
BitStack bitStack = default;
52+
53+
bitStack.PushTrue();
54+
Assert.True(bitStack.Peek());
55+
Assert.Equal(1, bitStack.CurrentDepth);
56+
57+
bitStack.PushFalse();
58+
Assert.False(bitStack.Peek());
59+
Assert.Equal(2, bitStack.CurrentDepth);
60+
61+
bitStack.PushTrue();
62+
Assert.True(bitStack.Peek());
63+
Assert.Equal(3, bitStack.CurrentDepth);
64+
65+
Assert.True(bitStack.Pop());
66+
Assert.False(bitStack.Peek());
67+
Assert.Equal(2, bitStack.CurrentDepth);
68+
69+
Assert.False(bitStack.Pop());
70+
Assert.True(bitStack.Peek());
71+
Assert.Equal(1, bitStack.CurrentDepth);
72+
73+
Assert.True(bitStack.Pop());
74+
Assert.Equal(0, bitStack.CurrentDepth);
75+
}
76+
77+
[Fact]
78+
public static void PeekAtDepth64()
79+
{
80+
BitStack bitStack = default;
81+
82+
for (int i = 0; i < 63; i++)
83+
{
84+
bitStack.PushFalse();
85+
}
86+
87+
bitStack.PushTrue();
88+
Assert.Equal(64, bitStack.CurrentDepth);
89+
Assert.True(bitStack.Peek());
90+
91+
Assert.True(bitStack.Pop());
92+
Assert.Equal(63, bitStack.CurrentDepth);
93+
Assert.False(bitStack.Peek());
94+
}
95+
96+
[Fact]
97+
public static void PeekBeyondAllocationFreeDepth()
98+
{
99+
BitStack bitStack = default;
100+
101+
for (int i = 0; i < 64; i++)
102+
{
103+
bitStack.PushFalse();
104+
}
105+
106+
bitStack.PushTrue();
107+
Assert.Equal(65, bitStack.CurrentDepth);
108+
Assert.True(bitStack.Peek());
109+
110+
bitStack.PushFalse();
111+
Assert.Equal(66, bitStack.CurrentDepth);
112+
Assert.False(bitStack.Peek());
113+
114+
Assert.False(bitStack.Pop());
115+
Assert.True(bitStack.Peek());
116+
Assert.Equal(65, bitStack.CurrentDepth);
117+
118+
Assert.True(bitStack.Pop());
119+
Assert.False(bitStack.Peek());
120+
Assert.Equal(64, bitStack.CurrentDepth);
121+
}
122+
48123
[Theory]
49124
[InlineData(32)]
50125
[InlineData(64)]

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

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,5 +539,108 @@ public static void CustomEncoderClass()
539539
text = JsonEncodedText.Encode(message, new CustomEncoderAllowingPlusSign());
540540
Assert.Equal("a+", text.Value);
541541
}
542+
543+
[Fact]
544+
public static void EncodeEmptySpan()
545+
{
546+
JsonEncodedText text = JsonEncodedText.Encode(ReadOnlySpan<char>.Empty);
547+
Assert.True(text.EncodedUtf8Bytes.IsEmpty);
548+
Assert.Equal("", text.Value);
549+
Assert.Equal("", text.ToString());
550+
Assert.Equal(0, text.GetHashCode());
551+
}
552+
553+
[Fact]
554+
public static void EncodeEmptyUtf8Span()
555+
{
556+
JsonEncodedText text = JsonEncodedText.Encode(ReadOnlySpan<byte>.Empty);
557+
Assert.True(text.EncodedUtf8Bytes.IsEmpty);
558+
Assert.Equal("", text.Value);
559+
Assert.Equal("", text.ToString());
560+
Assert.Equal(0, text.GetHashCode());
561+
}
562+
563+
[Fact]
564+
public static void EncodedUtf8BytesProperty()
565+
{
566+
string message = "Hello";
567+
JsonEncodedText text = JsonEncodedText.Encode(message);
568+
569+
ReadOnlySpan<byte> bytes = text.EncodedUtf8Bytes;
570+
Assert.False(bytes.IsEmpty);
571+
Assert.Equal(Encoding.UTF8.GetBytes(message), bytes.ToArray());
572+
}
573+
574+
[Fact]
575+
public static void EqualsWithDifferentObjectType()
576+
{
577+
JsonEncodedText text = JsonEncodedText.Encode("test");
578+
579+
Assert.False(text.Equals("test"));
580+
Assert.False(text.Equals(42));
581+
Assert.False(text.Equals(new object()));
582+
}
583+
584+
[Fact]
585+
public static void HashCodeConsistency()
586+
{
587+
string message = "consistent";
588+
JsonEncodedText text1 = JsonEncodedText.Encode(message);
589+
JsonEncodedText text2 = JsonEncodedText.Encode(message);
590+
591+
int hash1 = text1.GetHashCode();
592+
int hash2 = text2.GetHashCode();
593+
int hash1Again = text1.GetHashCode();
594+
595+
Assert.Equal(hash1, hash2);
596+
Assert.Equal(hash1, hash1Again);
597+
}
598+
599+
[Fact]
600+
public static void EncodeWithEscapingRequired()
601+
{
602+
string message = "line1\nline2";
603+
JsonEncodedText text = JsonEncodedText.Encode(message);
604+
605+
Assert.Contains("\\n", text.Value);
606+
Assert.NotEqual(message, text.Value);
607+
}
608+
609+
[Fact]
610+
public static void EncodeUtf8WithEscapingRequired()
611+
{
612+
byte[] utf8Message = Encoding.UTF8.GetBytes("test\"value");
613+
JsonEncodedText text = JsonEncodedText.Encode(utf8Message);
614+
615+
Assert.Contains("\\u0022", text.Value);
616+
}
617+
618+
[Theory]
619+
[InlineData("abc")]
620+
[InlineData("Hello World")]
621+
[InlineData("123")]
622+
public static void EncodeSpanMatchesString(string message)
623+
{
624+
JsonEncodedText textFromString = JsonEncodedText.Encode(message);
625+
JsonEncodedText textFromSpan = JsonEncodedText.Encode(message.AsSpan());
626+
627+
Assert.Equal(textFromString.Value, textFromSpan.Value);
628+
Assert.True(textFromString.Equals(textFromSpan));
629+
Assert.Equal(textFromString.GetHashCode(), textFromSpan.GetHashCode());
630+
}
631+
632+
[Theory]
633+
[InlineData("abc")]
634+
[InlineData("Hello World")]
635+
[InlineData("123")]
636+
public static void EncodeUtf8MatchesString(string message)
637+
{
638+
JsonEncodedText textFromString = JsonEncodedText.Encode(message);
639+
JsonEncodedText textFromUtf8 = JsonEncodedText.Encode(Encoding.UTF8.GetBytes(message));
640+
641+
Assert.Equal(textFromString.Value, textFromUtf8.Value);
642+
Assert.True(textFromString.Equals(textFromUtf8));
643+
Assert.Equal(textFromString.GetHashCode(), textFromUtf8.GetHashCode());
644+
}
542645
}
543646
}

0 commit comments

Comments
 (0)