chore: initial git load of code space
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
using System.Text;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace Strata.SqlTools.SqlBreakdown.Tests;
|
||||
|
||||
[TestFixture]
|
||||
public class JsonTokenReaderTests
|
||||
{
|
||||
[Test]
|
||||
public void JsonTokenReader_ReadsJsonTokensCorrectly()
|
||||
{
|
||||
// Arrange
|
||||
var jsonString = """
|
||||
{
|
||||
"foo": "bar",
|
||||
"myList": [1,2,3,4],
|
||||
"another": 12
|
||||
}
|
||||
""";
|
||||
var jsonBytes = Encoding.UTF8.GetBytes(jsonString);
|
||||
var reader = new Utf8JsonReader(jsonBytes);
|
||||
var tokens = new List<(JsonTokenType Type, string Value)>();
|
||||
|
||||
// Act
|
||||
while (reader.Read())
|
||||
{
|
||||
var tokenValue = Encoding.UTF8.GetString(reader.ValueSpan);
|
||||
tokens.Add((reader.TokenType, tokenValue));
|
||||
}
|
||||
|
||||
// Assert - Validate JSON shape and structure
|
||||
Assert.That(tokens, Is.Not.Empty);
|
||||
|
||||
// Validate JSON starts with StartObject and ends with EndObject
|
||||
Assert.That(tokens.Count, Is.GreaterThan(2));
|
||||
Assert.That(tokens[0].Type, Is.EqualTo(JsonTokenType.StartObject));
|
||||
Assert.That(tokens[^1].Type, Is.EqualTo(JsonTokenType.EndObject));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.PropertyName && t.Value == "foo"), Is.EqualTo(1));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.String && t.Value == "bar"), Is.EqualTo(1));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.PropertyName && t.Value == "myList"), Is.EqualTo(1));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.StartArray), Is.EqualTo(1));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.PropertyName && t.Value == "another"), Is.EqualTo(1));
|
||||
Assert.That(tokens.Count(t => t.Type == JsonTokenType.Number && t.Value == "12"), Is.EqualTo(1));
|
||||
|
||||
// Deep validation of JSON content structure
|
||||
var tokenIndex = 4;
|
||||
|
||||
// Token 4: [
|
||||
Assert.That(tokens[tokenIndex++].Type, Is.EqualTo(JsonTokenType.StartArray));
|
||||
|
||||
// Token 5-8: Array elements [1,2,3,4]
|
||||
Assert.That(tokens[tokenIndex].Type, Is.EqualTo(JsonTokenType.Number));
|
||||
Assert.That(tokens[tokenIndex++].Value, Is.EqualTo("1"));
|
||||
Assert.That(tokens[tokenIndex].Type, Is.EqualTo(JsonTokenType.Number));
|
||||
Assert.That(tokens[tokenIndex++].Value, Is.EqualTo("2"));
|
||||
Assert.That(tokens[tokenIndex].Type, Is.EqualTo(JsonTokenType.Number));
|
||||
Assert.That(tokens[tokenIndex++].Value, Is.EqualTo("3"));
|
||||
Assert.That(tokens[tokenIndex].Type, Is.EqualTo(JsonTokenType.Number));
|
||||
Assert.That(tokens[tokenIndex++].Value, Is.EqualTo("4"));
|
||||
|
||||
// Token 9: ]
|
||||
Assert.That(tokens[tokenIndex].Type, Is.EqualTo(JsonTokenType.EndArray));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user