Skip to content

Commit c5d9330

Browse files
committed
tests: adds unit test for the JsonNUll sentinel
Signed-off-by: Vincent Biret <[email protected]>
1 parent 67789f3 commit c5d9330

File tree

1 file changed

+243
-0
lines changed

1 file changed

+243
-0
lines changed
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT license.
3+
4+
using System.Text.Json;
5+
using System.Text.Json.Nodes;
6+
using Xunit;
7+
8+
namespace Microsoft.OpenApi.Tests;
9+
10+
public class JsonNullSentinelTests
11+
{
12+
[Fact]
13+
public void JsonNull_ReturnsJsonValueWithSentinelString()
14+
{
15+
// Act
16+
var result = JsonNullSentinel.JsonNull;
17+
18+
// Assert
19+
Assert.NotNull(result);
20+
Assert.Equal(JsonValueKind.String, result.GetValueKind());
21+
}
22+
23+
[Fact]
24+
public void JsonNull_ReturnsSameInstancesEachTime()
25+
{
26+
// Act
27+
var result1 = JsonNullSentinel.JsonNull;
28+
var result2 = JsonNullSentinel.JsonNull;
29+
30+
// Assert
31+
Assert.Same(result1, result2);
32+
}
33+
34+
[Fact]
35+
public void IsJsonNullSentinel_ReturnsTrueForJsonNullSentinel()
36+
{
37+
// Arrange
38+
var sentinel = JsonNullSentinel.JsonNull;
39+
40+
// Act
41+
var result = sentinel.IsJsonNullSentinel();
42+
43+
// Assert
44+
Assert.True(result);
45+
}
46+
47+
[Fact]
48+
public void IsJsonNullSentinel_ReturnsTrueForMultipleSentinelInstances()
49+
{
50+
// Arrange
51+
var sentinel1 = JsonNullSentinel.JsonNull;
52+
var sentinel2 = JsonNullSentinel.JsonNull;
53+
54+
// Act & Assert
55+
Assert.True(sentinel1.IsJsonNullSentinel());
56+
Assert.True(sentinel2.IsJsonNullSentinel());
57+
}
58+
59+
[Fact]
60+
public void IsJsonNullSentinel_ReturnsFalseForNull()
61+
{
62+
// Arrange
63+
JsonNode nullNode = null;
64+
65+
// Act
66+
var result = nullNode.IsJsonNullSentinel();
67+
68+
// Assert
69+
Assert.False(result);
70+
}
71+
72+
[Fact]
73+
public void IsJsonNullSentinel_ReturnsFalseForJsonNull()
74+
{
75+
// Arrange
76+
var jsonNull = JsonValue.Create((string)null);
77+
78+
// Act
79+
var result = jsonNull.IsJsonNullSentinel();
80+
81+
// Assert
82+
Assert.False(result);
83+
}
84+
85+
[Fact]
86+
public void IsJsonNullSentinel_ReturnsFalseForRegularString()
87+
{
88+
// Arrange
89+
var regularString = JsonValue.Create("regular string");
90+
91+
// Act
92+
var result = regularString.IsJsonNullSentinel();
93+
94+
// Assert
95+
Assert.False(result);
96+
}
97+
98+
[Fact]
99+
public void IsJsonNullSentinel_ReturnsFalseForEmptyString()
100+
{
101+
// Arrange
102+
var emptyString = JsonValue.Create("");
103+
104+
// Act
105+
var result = emptyString.IsJsonNullSentinel();
106+
107+
// Assert
108+
Assert.False(result);
109+
}
110+
111+
[Fact]
112+
public void IsJsonNullSentinel_ReturnsFalseForNumber()
113+
{
114+
// Arrange
115+
var number = JsonValue.Create(42);
116+
117+
// Act
118+
var result = number.IsJsonNullSentinel();
119+
120+
// Assert
121+
Assert.False(result);
122+
}
123+
124+
[Fact]
125+
public void IsJsonNullSentinel_ReturnsFalseForBoolean()
126+
{
127+
// Arrange
128+
var boolean = JsonValue.Create(true);
129+
130+
// Act
131+
var result = boolean.IsJsonNullSentinel();
132+
133+
// Assert
134+
Assert.False(result);
135+
}
136+
137+
[Fact]
138+
public void IsJsonNullSentinel_ReturnsFalseForJsonObject()
139+
{
140+
// Arrange
141+
var jsonObject = new JsonObject();
142+
143+
// Act
144+
var result = jsonObject.IsJsonNullSentinel();
145+
146+
// Assert
147+
Assert.False(result);
148+
}
149+
150+
[Fact]
151+
public void IsJsonNullSentinel_ReturnsFalseForJsonArray()
152+
{
153+
// Arrange
154+
var jsonArray = new JsonArray();
155+
156+
// Act
157+
var result = jsonArray.IsJsonNullSentinel();
158+
159+
// Assert
160+
Assert.False(result);
161+
}
162+
163+
[Fact]
164+
public void IsJsonNullSentinel_ReturnsFalseForSimilarStrings()
165+
{
166+
// Arrange
167+
var similarString1 = JsonValue.Create("openapi-json-null-sentinel-value");
168+
var similarString2 = JsonValue.Create("openapi-json-null-sentinel-value-2BF93600-0FE4-4250-987A-E5DDB203E465");
169+
var similarString3 = JsonValue.Create("OPENAPI-JSON-NULL-SENTINEL-VALUE-2BF93600-0FE4-4250-987A-E5DDB203E464");
170+
171+
// Act & Assert
172+
Assert.False(similarString1.IsJsonNullSentinel());
173+
Assert.False(similarString2.IsJsonNullSentinel());
174+
Assert.False(similarString3.IsJsonNullSentinel());
175+
}
176+
177+
[Fact]
178+
public void IsJsonNullSentinel_IsCaseSensitive()
179+
{
180+
// Arrange
181+
var lowercaseString = JsonValue.Create("openapi-json-null-sentinel-value-2bf93600-0fe4-4250-987a-e5ddb203e464");
182+
var uppercaseString = JsonValue.Create("OPENAPI-JSON-NULL-SENTINEL-VALUE-2BF93600-0FE4-4250-987A-E5DDB203E464");
183+
184+
// Act & Assert
185+
Assert.False(lowercaseString.IsJsonNullSentinel());
186+
Assert.False(uppercaseString.IsJsonNullSentinel());
187+
}
188+
189+
[Fact]
190+
public void JsonNullSentinel_CanBeAddedToJsonObject()
191+
{
192+
// Arrange
193+
var jsonObject = new JsonObject();
194+
var sentinel = JsonNullSentinel.JsonNull;
195+
196+
// Act
197+
jsonObject["test"] = sentinel;
198+
199+
// Assert
200+
Assert.True(jsonObject["test"].IsJsonNullSentinel());
201+
}
202+
203+
[Fact]
204+
public void JsonNullSentinel_CanBeAddedToJsonArray()
205+
{
206+
// Arrange
207+
var jsonArray = new JsonArray();
208+
var sentinel = JsonNullSentinel.JsonNull.DeepClone();
209+
210+
// Act
211+
jsonArray.Add(sentinel);
212+
213+
// Assert
214+
Assert.True(jsonArray[0].IsJsonNullSentinel());
215+
}
216+
217+
[Fact]
218+
public void JsonNullSentinel_SerializesToString()
219+
{
220+
// Arrange
221+
var sentinel = JsonNullSentinel.JsonNull;
222+
223+
// Act
224+
var serialized = sentinel.ToJsonString();
225+
226+
// Assert
227+
Assert.Contains("openapi-json-null-sentinel-value-2BF93600-0FE4-4250-987A-E5DDB203E464", serialized);
228+
}
229+
230+
[Fact]
231+
public void JsonNullSentinel_DeserializedFromStringIsDetected()
232+
{
233+
// Arrange
234+
var sentinel = JsonNullSentinel.JsonNull;
235+
var serialized = sentinel.ToJsonString();
236+
237+
// Act
238+
var deserialized = JsonNode.Parse(serialized);
239+
240+
// Assert
241+
Assert.True(deserialized.IsJsonNullSentinel());
242+
}
243+
}

0 commit comments

Comments
 (0)