using System; using System.Buffers.Binary; using AcDream.Core.Net.Messages; using Xunit; namespace AcDream.Core.Net.Tests.Messages; public sealed class InteractRequestsTests { [Fact] public void BuildUse_WritesOpcode0x0036AndTarget() { byte[] body = InteractRequests.BuildUse(gameActionSequence: 2, targetGuid: 0xDEAD); Assert.Equal(16, body.Length); Assert.Equal(InteractRequests.UseOpcode, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8))); Assert.Equal(0xDEADu, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(12))); } [Fact] public void BuildUseWithTarget_WritesBothGuids() { byte[] body = InteractRequests.BuildUseWithTarget( gameActionSequence: 3, sourceGuid: 0x1000, targetGuid: 0x2000); Assert.Equal(20, body.Length); Assert.Equal(InteractRequests.UseWithTargetOpcode, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8))); Assert.Equal(0x1000u, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(12))); Assert.Equal(0x2000u, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(16))); } [Fact] public void BuildTeleToLifestone_IsEnvelopeOnly() { byte[] body = InteractRequests.BuildTeleToLifestone(gameActionSequence: 7); Assert.Equal(12, body.Length); Assert.Equal(InteractRequests.TeleToLifestoneOpcode, BinaryPrimitives.ReadUInt32LittleEndian(body.AsSpan(8))); } }