Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
280 changes: 246 additions & 34 deletions Robust.Shared.IntegrationTests/Serialization/DataRecordTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,89 @@ public sealed partial class DataRecordTest : OurSerializationTest
public partial record TwoIntRecord(int aTest, int AnotherTest);

[DataRecord]
public partial record OneByteOneDefaultIntRecord(byte A, int B = 5);
public partial record struct TwoIntRecordStruct(int aTest, int AnotherTest);

[DataRecord]
public partial record OneLongRecord(long A);
public partial record PrimitiveRecord(
bool Bool,
byte Byte,
sbyte Sbyte,
char Char,
//decimal Decimal,
double Double,
float Float,
int Int,
uint Uint,
nint Nint,
nuint Nuint,
long Long,
ulong Ulong,
short Short,
ushort UShort);

[DataRecord]
public partial record OneLongDefaultRecord(long A = 5);
public partial record struct PrimitiveRecordStruct(
bool Bool,
byte Byte,
sbyte Sbyte,
char Char,
//decimal Decimal,
double Double,
float Float,
int Int,
uint Uint,
nint Nint,
nuint Nuint,
long Long,
ulong Ulong,
short Short,
ushort UShort);

[DataRecord]
public partial record OneULongRecord(ulong A);
public partial record PrimitiveDefaultsRecord(
bool Bool = true,
byte Byte = byte.MaxValue,
sbyte Sbyte = sbyte.MinValue,
char Char = 'A',
//decimal Decimal = -1,
double Double = -1d,
float Float = -1f,
int Int = int.MinValue,
uint Uint = uint.MaxValue,
nint Nint = int.MinValue,
nuint Nuint = uint.MaxValue,
long Long = long.MinValue,
ulong Ulong = ulong.MaxValue,
short Short = short.MinValue,
ushort UShort = ushort.MaxValue);

[DataRecord]
public partial record struct PrimitiveDefaultsRecordStruct(
bool Bool = true,
byte Byte = byte.MaxValue,
sbyte Sbyte = sbyte.MinValue,
char Char = 'A',
//decimal Decimal = -1,
double Double = -1d,
float Float = -1f,
int Int = int.MinValue,
uint Uint = uint.MaxValue,
nint Nint = int.MinValue,
nuint Nuint = uint.MaxValue,
long Long = long.MinValue,
ulong Ulong = ulong.MaxValue,
short Short = short.MinValue,
ushort UShort = ushort.MaxValue);

[PrototypeRecord("emptyTestPrototypeRecord")]
public partial record PrototypeRecord([field: IdDataField] string ID) : IPrototype;

[DataRecord]
public partial record IntStructHolder(IntStruct Struct);

[DataRecord]
public partial record struct IntStructHolderStruct(IntStruct Struct);

[DataDefinition]
public partial struct IntStruct
{
Expand All @@ -46,6 +112,9 @@ public IntStruct(int value)
[DataRecord]
public partial record TwoIntStructHolder(IntStruct Struct1, IntStruct Struct2);

[DataRecord]
public partial record struct TwoIntStructHolderStruct(IntStruct Struct1, IntStruct Struct2);

[DataRecord]
public partial record struct DataRecordStruct(IntStruct Struct, string String, int Integer);

Expand All @@ -58,6 +127,18 @@ public partial record struct DataRecordWithProperties
public float X => Position.X;
}

[DataRecord]
public partial record struct DataRecordWithDefaultFields()
{
public int A = 1;
}

[DataRecord]
public partial record struct DataRecordWithDefaultFields2(int A = 1)
{
public int B = 2;
}

[DataRecord]
public readonly partial record struct ReadonlyDataRecord
{
Expand Down Expand Up @@ -98,61 +179,178 @@ public void TwoIntRecordTest()
}

[Test]
public void OneByteOneDefaultIntRecordTest()
public void TwoIntRecordStructTest()
{
var mapping = new MappingDataNode {{"a", "1"}};
var val = Serialization.Read<OneByteOneDefaultIntRecord>(mapping, notNullableOverride: true);
var mapping = new MappingDataNode
{
{"aTest", "1"},
{"anotherTest", "2"}
};

var val = Serialization.Read<TwoIntRecordStruct>(mapping);

Assert.Multiple(() =>
{
Assert.That(val.A, Is.EqualTo(1));
Assert.That(val.B, Is.EqualTo(5));
Assert.That(val.aTest, Is.EqualTo(1));
Assert.That(val.AnotherTest, Is.EqualTo(2));
});
}

[Test]
public void OneLongRecordTest()
{
var mapping = new MappingDataNode {{"a", "1"}};
var val = Serialization.Read<OneLongRecord>(mapping, notNullableOverride: true);
var newMapping = Serialization.WriteValueAs<MappingDataNode>(val);

Assert.That(val.A, Is.EqualTo(1));
}
Assert.Multiple(() =>
{
Assert.That(newMapping, Has.Count.EqualTo(2));

[Test]
public void OneLongMinValueRecordTest()
{
var mapping = new MappingDataNode {{"a", long.MinValue.ToString()}};
var val = Serialization.Read<OneLongRecord>(mapping, notNullableOverride: true);
Assert.That(newMapping.TryGet<ValueDataNode>("aTest", out var aTestNode));
Assert.That(aTestNode!.Value, Is.EqualTo("1"));

Assert.That(val.A, Is.EqualTo(long.MinValue));
Assert.That(newMapping.TryGet<ValueDataNode>("anotherTest", out var anotherTestNode));
Assert.That(anotherTestNode!.Value, Is.EqualTo("2"));
});
}

[Test]
public void OneLongMaxValueRecordTest()
public void PrimitiveRecordTest()
{
var mapping = new MappingDataNode {{"a", long.MaxValue.ToString()}};
var val = Serialization.Read<OneLongRecord>(mapping, notNullableOverride: true);
var mapping = new MappingDataNode();
var val1 = Serialization.Read<PrimitiveRecord>(mapping, notNullableOverride: true);
var val2 = Serialization.Read<PrimitiveRecordStruct>(mapping);

Assert.That(val.A, Is.EqualTo(long.MaxValue));
Assert.Multiple(() =>
{
Assert.That(val1.Bool, Is.EqualTo(false));
Assert.That(val2.Bool, Is.EqualTo(false));
Assert.That(val1.Byte, Is.EqualTo(0));
Assert.That(val2.Byte, Is.EqualTo(0));
Assert.That(val1.Sbyte, Is.EqualTo(0));
Assert.That(val2.Sbyte, Is.EqualTo(0));
Assert.That(val1.Char, Is.EqualTo(default(char)));
Assert.That(val2.Char, Is.EqualTo(default(char)));
//Assert.That(val1.Decimal, Is.EqualTo(0));
//Assert.That(val2.Decimal, Is.EqualTo(0));
Assert.That(val1.Double, Is.EqualTo(0));
Assert.That(val2.Double, Is.EqualTo(0));
Assert.That(val1.Float, Is.EqualTo(0));
Assert.That(val2.Float, Is.EqualTo(0));
Assert.That(val1.Int, Is.EqualTo(0));
Assert.That(val2.Int, Is.EqualTo(0));
Assert.That(val1.Uint, Is.EqualTo(0));
Assert.That(val2.Uint, Is.EqualTo(0));
Assert.That(val1.Nint, Is.EqualTo((nint) 0));
Assert.That(val2.Nint, Is.EqualTo((nint) 0));
Assert.That(val1.Nuint, Is.EqualTo((nuint) 0));
Assert.That(val2.Nuint, Is.EqualTo((nuint) 0));
Assert.That(val1.Long, Is.EqualTo(0));
Assert.That(val2.Long, Is.EqualTo(0));
Assert.That(val1.Ulong, Is.EqualTo(0));
Assert.That(val2.Ulong, Is.EqualTo(0));
Assert.That(val1.Short, Is.EqualTo(0));
Assert.That(val2.Short, Is.EqualTo(0));
Assert.That(val1.UShort, Is.EqualTo(0));
Assert.That(val2.UShort, Is.EqualTo(0));
});
}

[Test]
public void OneLongDefaultRecordTest()
public void PrimitiveDefaultsRecordTest()
{
var mapping = new MappingDataNode();
var val = Serialization.Read<OneLongDefaultRecord>(mapping, notNullableOverride: true);
var val1 = Serialization.Read<PrimitiveDefaultsRecord>(mapping, notNullableOverride: true);
var val2 = Serialization.Read<PrimitiveDefaultsRecordStruct>(mapping);

Assert.That(val.A, Is.EqualTo(5));
Assert.Multiple(() =>
{
Assert.That(val1.Bool, Is.EqualTo(true));
Assert.That(val2.Bool, Is.EqualTo(true));
Assert.That(val1.Byte, Is.EqualTo(byte.MaxValue));
Assert.That(val2.Byte, Is.EqualTo(byte.MaxValue));
Assert.That(val1.Sbyte, Is.EqualTo(sbyte.MinValue));
Assert.That(val2.Sbyte, Is.EqualTo(sbyte.MinValue));
Assert.That(val1.Char, Is.EqualTo('A'));
Assert.That(val2.Char, Is.EqualTo('A'));
//Assert.That(val1.Decimal, Is.EqualTo(-1));
//Assert.That(val2.Decimal, Is.EqualTo(-1));
Assert.That(val1.Double, Is.EqualTo(-1));
Assert.That(val2.Double, Is.EqualTo(-1));
Assert.That(val1.Float, Is.EqualTo(-1));
Assert.That(val2.Float, Is.EqualTo(-1));
Assert.That(val1.Int, Is.EqualTo(int.MinValue));
Assert.That(val2.Int, Is.EqualTo(int.MinValue));
Assert.That(val1.Uint, Is.EqualTo(uint.MaxValue));
Assert.That(val2.Uint, Is.EqualTo(uint.MaxValue));
Assert.That(val1.Nint, Is.EqualTo((nint) int.MinValue));
Assert.That(val2.Nint, Is.EqualTo((nint) int.MinValue));
Assert.That(val1.Nuint, Is.EqualTo((nuint) uint.MaxValue));
Assert.That(val2.Nuint, Is.EqualTo((nuint) uint.MaxValue));
Assert.That(val1.Long, Is.EqualTo(long.MinValue));
Assert.That(val2.Long, Is.EqualTo(long.MinValue));
Assert.That(val1.Ulong, Is.EqualTo(ulong.MaxValue));
Assert.That(val2.Ulong, Is.EqualTo(ulong.MaxValue));
Assert.That(val1.Short, Is.EqualTo(short.MinValue));
Assert.That(val2.Short, Is.EqualTo(short.MinValue));
Assert.That(val1.UShort, Is.EqualTo(ushort.MaxValue));
Assert.That(val2.UShort, Is.EqualTo(ushort.MaxValue));
});
}

[Test]
public void OneULongRecordMaxValueTest()
public void PrimitiveRecordMinMaxValueTest()
{
var mapping = new MappingDataNode {{"a", ulong.MaxValue.ToString()}};
var val = Serialization.Read<OneULongRecord>(mapping, notNullableOverride: true);
var mapping = new MappingDataNode
{
{"bool", "true"},
{"byte", byte.MaxValue.ToString()},
{"sbyte", sbyte.MinValue.ToString()},
{"char", "A"},
//{"decimal", "-1"},
{"double", "-1"},
{"float", "-1"},
{"int", int.MinValue.ToString()},
{"uint", uint.MaxValue.ToString()},
// TODO SERIALIZATION add nint yaml serializer?
//{"nint", nint.MinValue.ToString()},
//{"nuint", nuint.MinValue.ToString()},
{"long", long.MinValue.ToString()},
{"ulong", ulong.MaxValue.ToString()},
{"short", short.MinValue.ToString()},
{"ushort", ushort.MaxValue.ToString()},
};
var val1 = Serialization.Read<PrimitiveDefaultsRecord>(mapping, notNullableOverride: true);
var val2 = Serialization.Read<PrimitiveDefaultsRecordStruct>(mapping);

Assert.That(val.A, Is.EqualTo(ulong.MaxValue));
Assert.Multiple(() =>
{
Assert.That(val1.Bool, Is.EqualTo(true));
Assert.That(val2.Bool, Is.EqualTo(true));
Assert.That(val1.Byte, Is.EqualTo(byte.MaxValue));
Assert.That(val2.Byte, Is.EqualTo(byte.MaxValue));
Assert.That(val1.Sbyte, Is.EqualTo(sbyte.MinValue));
Assert.That(val2.Sbyte, Is.EqualTo(sbyte.MinValue));
Assert.That(val1.Char, Is.EqualTo('A'));
Assert.That(val2.Char, Is.EqualTo('A'));
//Assert.That(val1.Decimal, Is.EqualTo(-1));
//Assert.That(val2.Decimal, Is.EqualTo(-1));
Assert.That(val1.Double, Is.EqualTo(-1));
Assert.That(val2.Double, Is.EqualTo(-1));
Assert.That(val1.Float, Is.EqualTo(-1));
Assert.That(val2.Float, Is.EqualTo(-1));
Assert.That(val1.Int, Is.EqualTo(int.MinValue));
Assert.That(val2.Int, Is.EqualTo(int.MinValue));
Assert.That(val1.Uint, Is.EqualTo(uint.MaxValue));
Assert.That(val2.Uint, Is.EqualTo(uint.MaxValue));
//Assert.That(val1.Nint, Is.EqualTo(nint.MinValue));
//Assert.That(val2.Nint, Is.EqualTo(nint.MinValue));
//Assert.That(val1.Nuint, Is.EqualTo(nuint.MaxValue));
//Assert.That(val2.Nuint, Is.EqualTo(nuint.MaxValue));
Assert.That(val1.Long, Is.EqualTo(long.MinValue));
Assert.That(val2.Long, Is.EqualTo(long.MinValue));
Assert.That(val1.Ulong, Is.EqualTo(ulong.MaxValue));
Assert.That(val2.Ulong, Is.EqualTo(ulong.MaxValue));
Assert.That(val1.Short, Is.EqualTo(short.MinValue));
Assert.That(val2.Short, Is.EqualTo(short.MinValue));
Assert.That(val1.UShort, Is.EqualTo(ushort.MaxValue));
Assert.That(val2.UShort, Is.EqualTo(ushort.MaxValue));
});
}

[Test]
Expand All @@ -164,6 +362,18 @@ public void PrototypeTest()
Assert.That(val.ID, Is.EqualTo("ABC"));
}

[Test]
public void DataRecordWithDefaultFieldsTest()
{
var mapping = new MappingDataNode ();
var val = Serialization.Read<DataRecordWithDefaultFields>(mapping);
Assert.That(val.A, Is.EqualTo(1));

var val2 = Serialization.Read<DataRecordWithDefaultFields2>(mapping);
Assert.That(val2.A, Is.EqualTo(1));
Assert.That(val2.B, Is.EqualTo(2));
}

[Test]
public void RegisterPrototypeTest()
{
Expand All @@ -186,8 +396,10 @@ public void IntStructHolderTest()
}
};
var val = Serialization.Read<IntStructHolder>(mapping, notNullableOverride: true);
var structVal = Serialization.Read<IntStructHolderStruct>(mapping);

Assert.That(val.Struct.Value, Is.EqualTo(42));
Assert.That(structVal.Struct.Value, Is.EqualTo(42));
}

[Test]
Expand Down
Loading
Loading