Files
suitelinkclient/tests/SuiteLink.Client.Tests/Protocol/SuiteLinkWriteCodecTests.cs
2026-03-16 16:46:32 -04:00

67 lines
2.5 KiB
C#

using SuiteLink.Client.Protocol;
namespace SuiteLink.Client.Tests.Protocol;
public sealed class SuiteLinkWriteCodecTests
{
[Fact]
public void EncodeWrite_BooleanValue_WritesExpectedGoldenVector()
{
var bytes = SuiteLinkWriteCodec.Encode(0x12345678, SuiteLinkValue.FromBoolean(true));
byte[] expected = [0x09, 0x00, 0x0B, 0x08, 0x78, 0x56, 0x34, 0x12, 0x01, 0x01, 0xA5];
Assert.Equal(expected, bytes);
Assert.Equal(0x0B, bytes[2]);
Assert.Equal(0x08, bytes[3]);
}
[Fact]
public void EncodeWrite_Int32Value_WritesExpectedPayload()
{
var bytes = SuiteLinkWriteCodec.Encode(0x89ABCDEF, SuiteLinkValue.FromInt32(42));
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
Assert.Equal(0x0B, bytes[2]);
Assert.Equal(0x08, bytes[3]);
Assert.Equal(SuiteLinkWriteCodec.PokeMessageType, frame.MessageType);
Assert.Equal(0x89ABCDEFu, SuiteLinkEncoding.ReadUInt32LittleEndian(frame.Payload.Span));
Assert.Equal((byte)SuiteLinkWireValueType.Integer, frame.Payload.Span[4]);
Assert.Equal(42, SuiteLinkEncoding.ReadInt32LittleEndian(frame.Payload.Span[5..]));
}
[Fact]
public void EncodeWrite_Float32Value_WritesExpectedPayload()
{
var bytes = SuiteLinkWriteCodec.Encode(0x00000007, SuiteLinkValue.FromFloat32(12.5f));
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
Assert.Equal(0x0B, bytes[2]);
Assert.Equal(0x08, bytes[3]);
Assert.Equal((byte)SuiteLinkWireValueType.Real, frame.Payload.Span[4]);
Assert.Equal(12.5f, SuiteLinkEncoding.ReadSingleLittleEndian(frame.Payload.Span[5..]));
}
[Fact]
public void EncodeWrite_StringValue_WritesExpectedPayload()
{
var bytes = SuiteLinkWriteCodec.Encode(0x00000008, SuiteLinkValue.FromString("OK"));
var frame = SuiteLinkFrameReader.ParseFrame(bytes);
Assert.Equal(0x0B, bytes[2]);
Assert.Equal(0x08, bytes[3]);
Assert.Equal((byte)SuiteLinkWireValueType.Message, frame.Payload.Span[4]);
Assert.Equal((ushort)2, SuiteLinkEncoding.ReadUInt16LittleEndian(frame.Payload.Span[5..]));
Assert.Equal((byte)'O', frame.Payload.Span[7]);
Assert.Equal((byte)'K', frame.Payload.Span[8]);
}
[Fact]
public void EncodeWrite_NoneValue_ThrowsNotSupportedException()
{
var ex = Assert.Throws<NotSupportedException>(
() => SuiteLinkWriteCodec.Encode(0x00000001, default));
Assert.Contains("unsupported", ex.Message, StringComparison.OrdinalIgnoreCase);
}
}