ProjectZ/Assets/Mirror/Tests/Editor/SyncListStructTest.cs
2024-02-19 21:00:36 +03:00

74 lines
2.5 KiB
C#

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<TestPlayer> myList = new SyncList<TestPlayer>();
}
public class SyncListStructTest
{
[Test]
public void ListIsDirtyWhenModifingAndSettingStruct()
{
SyncList<TestPlayer> serverList = new SyncList<TestPlayer>();
SyncList<TestPlayer> clientList = new SyncList<TestPlayer>();
// 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<TestPlayer> serverList = new SyncList<TestPlayer>();
SyncList<TestPlayer> clientList = new SyncList<TestPlayer>();
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<TestPlayer>.Operation op, int itemIndex, TestPlayer oldItem, TestPlayer newItem) =>
{
Assert.That(op == SyncList<TestPlayer>.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;
}
}