67 lines
2.5 KiB
C#
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);
|
|
}
|
|
}
|