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

92 lines
2.6 KiB
C#

using NUnit.Framework;
namespace Mirror.Tests
{
public static class MyCustomEnumReadWrite
{
public static void WriteMyCustomEnum(this NetworkWriter networkWriter, EnumReadWriteTests.MyCustomEnum customEnum)
{
// if O write N
if (customEnum == EnumReadWriteTests.MyCustomEnum.O)
{
networkWriter.WriteInt((int)EnumReadWriteTests.MyCustomEnum.N);
}
else
{
networkWriter.WriteInt((int)customEnum);
}
}
public static EnumReadWriteTests.MyCustomEnum ReadMyCustomEnum(this NetworkReader networkReader)
{
return (EnumReadWriteTests.MyCustomEnum)networkReader.ReadInt();
}
}
public class EnumReadWriteTests
{
public struct ByteMessage : NetworkMessage { public MyByteEnum byteEnum; }
public enum MyByteEnum : byte
{
A, B, C, D
}
public struct ShortMessage : NetworkMessage { public MyShortEnum shortEnum; }
public enum MyShortEnum : short
{
E, F, G, H
}
public struct CustomMessage : NetworkMessage { public MyCustomEnum customEnum; }
public enum MyCustomEnum
{
M, N, O, P
}
[Test]
public void ByteIsSentForByteEnum()
{
ByteMessage msg = new ByteMessage() { byteEnum = MyByteEnum.B };
NetworkWriter writer = new NetworkWriter();
writer.Write(msg);
// should be 1 byte for data
Assert.That(writer.Position, Is.EqualTo(1));
}
[Test]
public void ShortIsSentForShortEnum()
{
ShortMessage msg = new ShortMessage() { shortEnum = MyShortEnum.G };
NetworkWriter writer = new NetworkWriter();
writer.Write(msg);
// should be 2 bytes for data
Assert.That(writer.Position, Is.EqualTo(2));
}
[Test]
public void CustomWriterIsUsedForEnum()
{
CustomMessage serverMsg = new CustomMessage() { customEnum = MyCustomEnum.O };
CustomMessage clientMsg = SerializeAndDeserializeMessage(serverMsg);
// custom writer should write N if it sees O
Assert.That(clientMsg.customEnum, Is.EqualTo(MyCustomEnum.N));
}
T SerializeAndDeserializeMessage<T>(T msg)
where T : struct, NetworkMessage
{
NetworkWriter writer = new NetworkWriter();
writer.Write(msg);
NetworkReader reader = new NetworkReader(writer.ToArraySegment());
return reader.Read<T>();
}
}
}