test(net): #13 end-to-end PD trailer fixture covering every section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
91693ea44c
commit
58095d8d4b
1 changed files with 59 additions and 0 deletions
|
|
@ -705,4 +705,63 @@ public sealed class PlayerDescriptionParserTests
|
||||||
Assert.Equal(0x50000300u, parsed.Value.Equipped[0].Guid);
|
Assert.Equal(0x50000300u, parsed.Value.Equipped[0].Guid);
|
||||||
Assert.Equal(16, parsed.Value.GameplayOptions.Length);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue