From 58095d8d4b857c851743b5f5fbfa141b9d9df77c Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 10 May 2026 09:39:36 +0200 Subject: [PATCH] test(net): #13 end-to-end PD trailer fixture covering every section Co-Authored-By: Claude Sonnet 4.6 --- .../PlayerDescriptionParserTests.cs | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/tests/AcDream.Core.Net.Tests/PlayerDescriptionParserTests.cs b/tests/AcDream.Core.Net.Tests/PlayerDescriptionParserTests.cs index 0f3560d..c74df04 100644 --- a/tests/AcDream.Core.Net.Tests/PlayerDescriptionParserTests.cs +++ b/tests/AcDream.Core.Net.Tests/PlayerDescriptionParserTests.cs @@ -705,4 +705,63 @@ public sealed class PlayerDescriptionParserTests Assert.Equal(0x50000300u, parsed.Value.Equipped[0].Guid); Assert.Equal(16, parsed.Value.GameplayOptions.Length); } + + [Fact] + public void TryParse_FullTrailer_AllSectionsPopulated() + { + var sb = new MemoryStream(); + using var writer = new BinaryWriter(sb); + writer.Write(0u); // propertyFlags + writer.Write(0x52u); // weenieType + writer.Write(0x201u); // ATTRIBUTE | ENCHANTMENT + writer.Write(1u); // has_health + writer.Write(0u); // empty attribute_flags + writer.Write(0u); // empty enchantment mask + + // option_flags = SHORTCUT | DESIRED_COMPS | CHARACTER_OPTIONS2 | SPELL_LISTS8 + // = 0x01 | 0x08 | 0x40 | 0x400 = 0x449 + writer.Write(0x449u); + writer.Write(0xAA000001u); // options1 + + // Shortcuts: count=1 + writer.Write(1u); + writer.Write(3u); writer.Write(0xCAFEFACEu); writer.Write((ushort)100); writer.Write((ushort)2); + + // 8 hotbars, all empty for brevity. + for (int i = 0; i < 8; i++) writer.Write(0u); + + // Desired comps: count=1 + writer.Write((ushort)1); writer.Write((ushort)0); + writer.Write(0xC1u); writer.Write(99u); + + // spellbook_filters + writer.Write(0xF11Du); + + // options2 + writer.Write(0xBB000002u); + + // Inventory + equipped (no GAMEPLAY_OPTIONS, strict path) + writer.Write(1u); + writer.Write(0x50000400u); writer.Write(0u); + writer.Write(1u); + writer.Write(0x50000500u); writer.Write(0x00000200u); writer.Write(1u); + + var parsed = PlayerDescriptionParser.TryParse(sb.ToArray()); + + Assert.NotNull(parsed); + var v = parsed!.Value; + Assert.Equal(0xAA000001u, v.Options1); + Assert.Equal(0xBB000002u, v.Options2); + Assert.Equal(0xF11Du, v.SpellbookFilters); + Assert.Single(v.Shortcuts); + Assert.Equal(0xCAFEFACEu, v.Shortcuts[0].ObjectGuid); + Assert.Equal(8, v.HotbarSpells.Count); + Assert.All(v.HotbarSpells, l => Assert.Empty(l)); + Assert.Single(v.DesiredComps); + Assert.Equal((0xC1u, 99u), v.DesiredComps[0]); + Assert.Single(v.Inventory); + Assert.Equal(0x50000400u, v.Inventory[0].Guid); + Assert.Single(v.Equipped); + Assert.Equal(0x50000500u, v.Equipped[0].Guid); + } }