using NUnit.Framework; namespace Mirror.Tests { class TestPlayerBehaviour : NetworkBehaviour { // note synclists must be a property of a NetworkBehavior so that // the weaver generates the reader and writer for the object public readonly SyncList myList = new SyncList(); } public class SyncListStructTest { [Test] public void ListIsDirtyWhenModifingAndSettingStruct() { SyncList serverList = new SyncList(); SyncList clientList = new SyncList(); // set up dirty callback int serverListDirtyCalled = 0; serverList.OnDirty = () => ++serverListDirtyCalled; SyncListTest.SerializeAllTo(serverList, clientList); serverList.Add(new TestPlayer { item = new TestItem { price = 10 } }); Assert.That(serverListDirtyCalled, Is.EqualTo(1)); SyncListTest.SerializeDeltaTo(serverList, clientList); serverListDirtyCalled = 0; TestPlayer player = serverList[0]; player.item.price = 15; serverList[0] = player; Assert.That(serverListDirtyCalled, Is.EqualTo(1)); } [Test] public void OldValueShouldNotBeNewValue() { SyncList serverList = new SyncList(); SyncList clientList = new SyncList(); SyncListTest.SerializeAllTo(serverList, clientList); serverList.Add(new TestPlayer { item = new TestItem { price = 10 } }); SyncListTest.SerializeDeltaTo(serverList, clientList); TestPlayer player = serverList[0]; player.item.price = 15; serverList[0] = player; bool callbackCalled = false; clientList.Callback += (SyncList.Operation op, int itemIndex, TestPlayer oldItem, TestPlayer newItem) => { Assert.That(op == SyncList.Operation.OP_SET, Is.True); Assert.That(itemIndex, Is.EqualTo(0)); Assert.That(oldItem.item.price, Is.EqualTo(10)); Assert.That(newItem.item.price, Is.EqualTo(15)); callbackCalled = true; }; SyncListTest.SerializeDeltaTo(serverList, clientList); Assert.IsTrue(callbackCalled); } } public struct TestPlayer { public TestItem item; } public struct TestItem { public float price; } }