internal static partial class Program
{
    static async Task TestTransportFixturesAsync()
    {
        var fixtures = await LoadTransportFixturesAsync();
        Assert(fixtures.Count > 0, "Transport fixtures should not be empty.");

        foreach (var fixture in fixtures)
        {
            var entry = NewEntry();
            var response = await entry.HandleCommandAsync(fixture.Request);

            Assert(!response.Contains('\n') && !response.Contains('\r'), $"Fixture '{fixture.Name}' returned multiline output.");

            using var doc = JsonDocument.Parse(response);
            var ok = doc.RootElement.GetProperty("ok").GetBoolean();
            Assert(ok == fixture.ExpectOk, $"Fixture '{fixture.Name}' expected ok={fixture.ExpectOk} but got ok={ok}.");

            if (fixture.ExpectOk)
            {
                Assert(doc.RootElement.TryGetProperty("data", out var data), $"Fixture '{fixture.Name}' expected data field.");
                if (!string.IsNullOrWhiteSpace(fixture.DataKind))
                {
                    var expectedKind = ParseValueKind(fixture.DataKind!);
                    Assert(data.ValueKind == expectedKind, $"Fixture '{fixture.Name}' expected data kind {expectedKind} but got {data.ValueKind}.");
                }
                continue;
            }

            Assert(doc.RootElement.TryGetProperty("error", out var error), $"Fixture '{fixture.Name}' expected error field.");
            if (!string.IsNullOrWhiteSpace(fixture.ErrorContains))
            {
                var message = error.GetString() ?? "";
                Assert(message.Contains(fixture.ErrorContains!, StringComparison.OrdinalIgnoreCase), $"Fixture '{fixture.Name}' expected error containing '{fixture.ErrorContains}'.");
            }
        }
    }
}

sealed class TransportFixture
{
    public string Name { get; init; } = "";
    public string Request { get; init; } = "";
    public bool ExpectOk { get; init; }
    public string? DataKind { get; init; }
    public string? ErrorContains { get; init; }
}

