Initial commit: Client Doc docs Server Tools
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using XWorld.Framework.Protocol;
|
||||
|
||||
namespace XWorld.Framework.Tests
|
||||
{
|
||||
public class FrameCodecTests
|
||||
{
|
||||
[Fact]
|
||||
public void Frame_RoundTrips()
|
||||
{
|
||||
var original = new Frame(Channel.Game, 7, new byte[] { 10, 20, 30 });
|
||||
byte[] wire = FrameCodec.Encode(original);
|
||||
Frame decoded = FrameCodec.Decode(wire);
|
||||
|
||||
Assert.Equal(Channel.Game, decoded.Channel);
|
||||
Assert.Equal((ushort)7, decoded.Opcode);
|
||||
Assert.Equal(new byte[] { 10, 20, 30 }, decoded.Payload);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Frame_EmptyPayload_RoundTrips()
|
||||
{
|
||||
var original = new Frame(Channel.Framework, 1, null);
|
||||
Frame decoded = FrameCodec.Decode(FrameCodec.Encode(original));
|
||||
Assert.Equal(Channel.Framework, decoded.Channel);
|
||||
Assert.Equal((ushort)1, decoded.Opcode);
|
||||
Assert.Empty(decoded.Payload);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Encode_WireLayout_IsChannelOpcodeLenPayload()
|
||||
{
|
||||
var f = new Frame(Channel.Game, 0x0102, new byte[] { 0xAA });
|
||||
byte[] wire = FrameCodec.Encode(f);
|
||||
// channel=1, opcode 小端 = 02 01, len varuint = 1, payload = AA
|
||||
Assert.Equal(new byte[] { 0x01, 0x02, 0x01, 0x01, 0xAA }, wire);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Decode_Truncated_Throws()
|
||||
{
|
||||
Assert.Throws<FormatException>(() => FrameCodec.Decode(new byte[] { 0x00 }));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user