126 lines
4.0 KiB
C#
126 lines
4.0 KiB
C#
// TODO Send only supports structs. Consider removing those tests.
|
|
using NUnit.Framework;
|
|
|
|
namespace Mirror.Tests.MessageTests
|
|
{
|
|
class ParentMessage : NetworkMessage
|
|
{
|
|
public int parentValue;
|
|
}
|
|
|
|
class ChildMessage : ParentMessage
|
|
{
|
|
public int childValue;
|
|
}
|
|
|
|
|
|
public abstract class RequestMessageBase : NetworkMessage
|
|
{
|
|
public int responseId = 0;
|
|
}
|
|
public class ResponseMessage : RequestMessageBase
|
|
{
|
|
public int state;
|
|
public string message = "";
|
|
public int errorCode = 0; // optional for error codes
|
|
}
|
|
|
|
//reverseOrder to test this https://github.com/vis2k/Mirror/issues/1925
|
|
public class ResponseMessageReverse : RequestMessageBaseReverse
|
|
{
|
|
public int state;
|
|
public string message = "";
|
|
public int errorCode = 0; // optional for error codes
|
|
}
|
|
public abstract class RequestMessageBaseReverse : NetworkMessage
|
|
{
|
|
public int responseId = 0;
|
|
}
|
|
|
|
[TestFixture]
|
|
public class MessageInheritanceTest
|
|
{
|
|
[Test]
|
|
public void SendsVauesInParentAndChildClass()
|
|
{
|
|
NetworkWriter writer = new NetworkWriter();
|
|
|
|
writer.Write(new ChildMessage
|
|
{
|
|
parentValue = 3,
|
|
childValue = 4
|
|
});
|
|
|
|
byte[] arr = writer.ToArray();
|
|
|
|
NetworkReader reader = new NetworkReader(arr);
|
|
ChildMessage received = reader.Read<ChildMessage>();
|
|
|
|
Assert.AreEqual(3, received.parentValue);
|
|
Assert.AreEqual(4, received.childValue);
|
|
|
|
int writeLength = writer.Position;
|
|
int readLength = reader.Position;
|
|
Assert.That(writeLength == readLength, $"OnSerializeAll and OnDeserializeAll calls write the same amount of data\n writeLength={writeLength}\n readLength={readLength}");
|
|
}
|
|
|
|
[Test]
|
|
public void SendsVauesWhenUsingAbstractClass()
|
|
{
|
|
NetworkWriter writer = new NetworkWriter();
|
|
|
|
const int state = 2;
|
|
const string message = "hello world";
|
|
const int responseId = 5;
|
|
writer.Write(new ResponseMessage
|
|
{
|
|
state = state,
|
|
message = message,
|
|
responseId = responseId,
|
|
});
|
|
|
|
byte[] arr = writer.ToArray();
|
|
|
|
NetworkReader reader = new NetworkReader(arr);
|
|
ResponseMessage received = reader.Read<ResponseMessage>();
|
|
|
|
Assert.AreEqual(state, received.state);
|
|
Assert.AreEqual(message, received.message);
|
|
Assert.AreEqual(responseId, received.responseId);
|
|
|
|
int writeLength = writer.Position;
|
|
int readLength = reader.Position;
|
|
Assert.That(writeLength == readLength, $"OnSerializeAll and OnDeserializeAll calls write the same amount of data\n writeLength={writeLength}\n readLength={readLength}");
|
|
}
|
|
|
|
[Test]
|
|
public void SendsVauesWhenUsingAbstractClassReverseDefineOrder()
|
|
{
|
|
NetworkWriter writer = new NetworkWriter();
|
|
|
|
const int state = 2;
|
|
const string message = "hello world";
|
|
const int responseId = 5;
|
|
writer.Write(new ResponseMessageReverse
|
|
{
|
|
state = state,
|
|
message = message,
|
|
responseId = responseId,
|
|
});
|
|
|
|
byte[] arr = writer.ToArray();
|
|
|
|
NetworkReader reader = new NetworkReader(arr);
|
|
ResponseMessageReverse received = reader.Read<ResponseMessageReverse>();
|
|
|
|
Assert.AreEqual(state, received.state);
|
|
Assert.AreEqual(message, received.message);
|
|
Assert.AreEqual(responseId, received.responseId);
|
|
|
|
int writeLength = writer.Position;
|
|
int readLength = reader.Position;
|
|
Assert.That(writeLength == readLength, $"OnSerializeAll and OnDeserializeAll calls write the same amount of data\n writeLength={writeLength}\n readLength={readLength}");
|
|
}
|
|
}
|
|
}
|