File: parent\Microsoft.Extensions.AI.Abstractions.Tests\ResponseContinuationTokenTests.cs
Project: ..\..\..\test\Libraries\Microsoft.Extensions.AI.Stabilization.Tests\Microsoft.Extensions.AI.Stabilization.Tests.csproj (Microsoft.Extensions.AI.Stabilization.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Text.Json;
using Xunit;
 
namespace Microsoft.Extensions.AI;
 
public class ResponseContinuationTokenTests
{
    [Theory]
    [InlineData(new byte[0])]
    [InlineData(new byte[] { 1, 2, 3, 4, 5 })]
    public void Bytes_Roundtrip(byte[] testBytes)
    {
        ResponseContinuationToken token = ResponseContinuationToken.FromBytes(testBytes);
 
        Assert.NotNull(token);
        Assert.Equal(testBytes, token.ToBytes().ToArray());
    }
 
    [Theory]
    [InlineData(new byte[0], "\"\"")]
    [InlineData(new byte[] { 1, 2, 3, 4, 5 }, "\"AQIDBAU=\"")]
    public void JsonSerialization_Roundtrips(byte[] testBytes, string expectedJson)
    {
        ResponseContinuationToken originalToken = ResponseContinuationToken.FromBytes(testBytes);
 
        // Act
        string json = JsonSerializer.Serialize(originalToken, AIJsonUtilities.DefaultOptions);
 
        ResponseContinuationToken? deserializedToken = JsonSerializer.Deserialize<ResponseContinuationToken>(json, AIJsonUtilities.DefaultOptions);
 
        // Assert
        Assert.Equal(expectedJson, json);
        Assert.NotNull(deserializedToken);
        Assert.Equal(originalToken.ToBytes().ToArray(), deserializedToken.ToBytes().ToArray());
        Assert.NotSame(originalToken, deserializedToken);
    }
 
    [Fact]
    public void DefaultOptions_ContainsMetadataForResponseContinuationToken()
    {
        Assert.True(AIJsonUtilities.DefaultOptions.TryGetTypeInfo(typeof(ResponseContinuationToken), out var info));
        Assert.NotNull(info);
        Assert.Equal(typeof(ResponseContinuationToken), info.Type);
    }
}