Skip to content

Commit 578754b

Browse files
committed
Add non-collections test
1 parent 3307aab commit 578754b

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableCollectionsTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
using System.Text;
66
using NUnit.Framework;
77
using Unity.Netcode.TestHelpers.Runtime;
8-
using UnityEngine;
98
using UnityEngine.TestTools;
109
using Random = UnityEngine.Random;
1110

com.unity.netcode.gameobjects/Tests/Runtime/NetworkVariable/NetworkVariableTests.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1173,6 +1173,55 @@ public void WhenCreatingAnArrayOfNetVars_InitializingVariablesDoesNotThrowAnExce
11731173
Assert.AreSame(testComp.AllInts[4], testComp.Int4);
11741174
}
11751175

1176+
[Test]
1177+
public void TestNetworkVariableChangeAndReturnInSameFrame([Values] HostOrServer useHost)
1178+
{
1179+
InitializeServerAndClients(useHost);
1180+
1181+
var serverOnValueChangedCount = 0;
1182+
var clientOnValueChangedCount = 0;
1183+
1184+
void ServerOnValueChanged(NetworkVariableTest.SomeEnum previous, NetworkVariableTest.SomeEnum next)
1185+
{
1186+
serverOnValueChangedCount++;
1187+
}
1188+
1189+
void ClientOnValueChanged(NetworkVariableTest.SomeEnum previous, NetworkVariableTest.SomeEnum next)
1190+
{
1191+
clientOnValueChangedCount++;
1192+
}
1193+
1194+
bool VerifyStructure()
1195+
{
1196+
return m_Player1OnClient1.TheEnum.Value == m_Player1OnServer.TheEnum.Value;
1197+
}
1198+
1199+
// Wait for the client-side to notify it is finished initializing and spawning.
1200+
Assert.True(WaitForConditionOrTimeOutWithTimeTravel(VerifyStructure));
1201+
1202+
m_Player1OnServer.TheEnum.OnValueChanged += ServerOnValueChanged;
1203+
m_Player1OnClient1.TheEnum.OnValueChanged += ClientOnValueChanged;
1204+
1205+
// Change the value once in a frame
1206+
m_Player1OnServer.TheEnum.Value = NetworkVariableTest.SomeEnum.B;
1207+
1208+
// Wait for the value to sync and assert that both server and client had OnValueChanged called an equal number of times
1209+
Assert.True(WaitForConditionOrTimeOutWithTimeTravel(VerifyStructure), "Timed out waiting for client and server values to match");
1210+
Assert.AreEqual(serverOnValueChangedCount, clientOnValueChangedCount, $"Expected OnValueChanged call count to be equal. Server OnValueChanged was called {serverOnValueChangedCount} times but client was called {clientOnValueChangedCount} times!");
1211+
1212+
// Change the value twice in a frame
1213+
m_Player1OnServer.TheEnum.Value = NetworkVariableTest.SomeEnum.A;
1214+
m_Player1OnServer.TheEnum.Value = NetworkVariableTest.SomeEnum.B;
1215+
1216+
// Wait for the value to sync and assert that the server had OnValueChanged called once more than the client
1217+
TimeTravelAdvanceTick();
1218+
Assert.True(WaitForConditionOrTimeOutWithTimeTravel(VerifyStructure), "Timed out waiting for client and server values to match");
1219+
Assert.AreEqual(serverOnValueChangedCount - 1, clientOnValueChangedCount, $"Unexpected OnValueChanged call count. Server OnValueChanged was called {serverOnValueChangedCount} times but client was called {clientOnValueChangedCount} times!");
1220+
1221+
m_Player1OnServer.TheEnum.OnValueChanged -= ServerOnValueChanged;
1222+
m_Player1OnClient1.TheEnum.OnValueChanged -= ClientOnValueChanged;
1223+
}
1224+
11761225
private void TestValueType<T>(T testValue, T changedValue) where T : unmanaged
11771226
{
11781227
var serverVariable = new NetworkVariable<T>(testValue);

0 commit comments

Comments
 (0)