using AcDream.Core.Items; using Xunit; namespace AcDream.Core.Tests.Items; public sealed class ClientObjectTableUpdateTests { [Fact] public void UpsertProperties_unknownObject_createsThenMerges() { var t = new ClientObjectTable(); bool added = false; t.ObjectAdded += _ => added = true; var bundle = new PropertyBundle(); bundle.Ints[5] = 1234; // EncumbranceVal t.UpsertProperties(0x50000001u, bundle); var o = t.Get(0x50000001u); Assert.NotNull(o); Assert.Equal(1234, o!.Properties.Ints[5]); Assert.True(added); } [Fact] public void UpsertProperties_existingObject_mergesAndFiresUpdated() { var t = new ClientObjectTable(); t.AddOrUpdate(new ClientObject { ObjectId = 0x50000001u }); bool updated = false; t.ObjectUpdated += _ => updated = true; var bundle = new PropertyBundle(); bundle.Ints[5] = 99; t.UpsertProperties(0x50000001u, bundle); Assert.Equal(99, t.Get(0x50000001u)!.Properties.Ints[5]); Assert.True(updated); } [Fact] public void UpdateStackSize_knownObject_setsFieldsAndFiresUpdated() { var t = new ClientObjectTable(); t.AddOrUpdate(new ClientObject { ObjectId = 0x600u, StackSize = 1, Value = 5 }); bool updated = false; t.ObjectUpdated += _ => updated = true; bool ok = t.UpdateStackSize(0x600u, stackSize: 25, value: 125); Assert.True(ok); Assert.Equal(25, t.Get(0x600u)!.StackSize); Assert.Equal(125, t.Get(0x600u)!.Value); Assert.True(updated); } [Fact] public void UpdateStackSize_unknownObject_returnsFalse() => Assert.False(new ClientObjectTable().UpdateStackSize(0xDEADu, 1, 1)); }