diff --git a/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs b/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs index 3fcb0e88d1..d860fb3207 100644 --- a/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs +++ b/testproject/Assets/Tests/Runtime/RpcINetworkSerializable.cs @@ -22,6 +22,9 @@ public class RpcINetworkSerializable private bool m_FinishedTest; + private bool m_IsSendingNull; + private bool m_IsArrayEmpty; + [SetUp] public void SetUp() { @@ -149,7 +152,48 @@ private void OnClientReceivedUserSerializableClassUpdated(UserSerializableClass [UnityTest] public IEnumerator NetworkSerializableArrayTest() { + return NetworkSerializableArrayTestHandler(32); + } + + /// + /// Tests that an array of the same type of class that implements the + /// INetworkSerializable interface can send an empty array + /// + /// + [UnityTest] + public IEnumerator NetworkSerializableEmptyArrayTest() + { + return NetworkSerializableArrayTestHandler(0); + } + + /// + /// Tests that an array of the same type of class that implements the + /// INetworkSerializable interface can send a null value for the array + /// + /// + [UnityTest] + public IEnumerator NetworkSerializableNULLArrayTest() + { + return NetworkSerializableArrayTestHandler(0,true); + } + + /// + /// Handles the various tests for INetworkSerializable arrays + /// + /// how many elements + /// force to send a null as the array value + /// + public IEnumerator NetworkSerializableArrayTestHandler(int arraySize, bool sendNullArray = false) + { + m_IsSendingNull = sendNullArray; m_FinishedTest = false; + m_IsArrayEmpty = false; + + if (arraySize == 0) + { + m_IsArrayEmpty = true; + } + var numClients = 1; var startTime = Time.realtimeSinceStartup; @@ -199,16 +243,23 @@ public IEnumerator NetworkSerializableArrayTest() m_UserSerializableClassArray = new List(); - // Create an array of userSerializableClass instances - for (int i = 0; i < 32; i++) + if (!m_IsSendingNull) { - var userSerializableClass = new UserSerializableClass(); - //Used for testing order of the array - userSerializableClass.MyintValue = i; - m_UserSerializableClassArray.Add(userSerializableClass); - } + // Create an array of userSerializableClass instances + for (int i = 0; i < arraySize; i++) + { + var userSerializableClass = new UserSerializableClass(); + //Used for testing order of the array + userSerializableClass.MyintValue = i; + m_UserSerializableClassArray.Add(userSerializableClass); + } - clientSideNetworkBehaviourClass.ClientStartTest(m_UserSerializableClassArray.ToArray()); + clientSideNetworkBehaviourClass.ClientStartTest(m_UserSerializableClassArray.ToArray()); + } + else + { + clientSideNetworkBehaviourClass.ClientStartTest(null); + } // Wait until the test has finished or we time out var timeOutPeriod = Time.realtimeSinceStartup + 5; @@ -240,12 +291,23 @@ public IEnumerator NetworkSerializableArrayTest() /// private void ValidateUserSerializableClasses(UserSerializableClass[] userSerializableClass) { - var indexCount = 0; - // Check the order of the array - foreach (var customTypeEntry in userSerializableClass) + if (m_IsSendingNull) + { + Assert.IsNull(userSerializableClass); + } + else if (m_IsArrayEmpty) { - Assert.AreEqual(customTypeEntry.MyintValue, indexCount); - indexCount++; + Assert.AreEqual(userSerializableClass.Length,0); + } + else + { + var indexCount = 0; + // Check the order of the array + foreach (var customTypeEntry in userSerializableClass) + { + Assert.AreEqual(customTypeEntry.MyintValue, indexCount); + indexCount++; + } } }