Skip to content

Commit 790db80

Browse files
committed
Add serialization tests for the added JsonConverters
1 parent 19b8c33 commit 790db80

1 file changed

Lines changed: 74 additions & 1 deletion

File tree

src/BizHawk.Tests/Client.Common/config/SerializationStabilityTests.cs

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
using System.Collections.Generic;
1+
using System.Collections.Generic;
2+
using System.Drawing;
3+
using System.Linq;
24
using System.Reflection;
35
using System.Text.Json;
46
using System.Text.Json.Serialization;
57

68
using BizHawk.Client.Common;
79
using BizHawk.Common;
10+
using BizHawk.Emulation.Common.Json;
811

912
namespace BizHawk.Tests.Client.Common.config
1013
{
@@ -92,5 +95,75 @@ public void TestRoundTripSerialization()
9295
Assert.AreEqual(s, Ser(Deser(s, type)), $"{type} failed serialization round-trip");
9396
}
9497
}
98+
99+
[TestMethod]
100+
[DataRow("0.8")]
101+
[DataRow("1.00000036")]
102+
[DataRow("1.8")]
103+
public void TestRoundTripSerializationFloatConverter(string floatValue)
104+
{
105+
float deserialized = JsonSerializer.Deserialize<float>(floatValue, ConfigService.SerializerOptions);
106+
string serialized = JsonSerializer.Serialize(deserialized, ConfigService.SerializerOptions);
107+
Assert.AreEqual(floatValue, serialized);
108+
}
109+
110+
[TestMethod]
111+
[DataRow("[1,2,3]")]
112+
[DataRow("[]")]
113+
[DataRow("null")]
114+
[DataRow("[255,0,127,128,1]")]
115+
public void TestRoundTripSerializationByteArrayConverter(string byteArrayValue)
116+
{
117+
byte[]? deserialized = JsonSerializer.Deserialize<byte[]>(byteArrayValue, ConfigService.SerializerOptions);
118+
string serialized = JsonSerializer.Serialize(deserialized, ConfigService.SerializerOptions);
119+
Assert.AreEqual(byteArrayValue, serialized);
120+
}
121+
122+
[TestMethod]
123+
public void TestSerializationTypeConverter()
124+
{
125+
var color = Color.FromArgb(200, 255, 13, 42);
126+
string serialized = JsonSerializer.Serialize(color, ConfigService.SerializerOptions);
127+
Assert.AreEqual("\"200; 255; 13; 42\"", serialized);
128+
129+
var newColor = JsonSerializer.Deserialize<Color>(serialized, ConfigService.SerializerOptions);
130+
Assert.AreEqual(color, newColor);
131+
}
132+
133+
private static bool Equals<T>(T[,] array1, T[,] array2)
134+
{
135+
return array1.Rank == array2.Rank
136+
&& Enumerable.Range(0, array1.Rank).All(dimension => array1.GetLength(dimension) == array2.GetLength(dimension))
137+
&& array1.Cast<T>().SequenceEqual(array2.Cast<T>());
138+
}
139+
140+
[TestMethod]
141+
public void TestSerialization2DArrayConverter()
142+
{
143+
var options = new JsonSerializerOptions
144+
{
145+
Converters = { new Array2DJsonConverter<byte>() }
146+
};
147+
var optionsWithByteArrayConverter = new JsonSerializerOptions
148+
{
149+
Converters = { new Array2DJsonConverter<byte>(), new ByteArrayAsNormalArrayJsonConverter() }
150+
};
151+
152+
byte[,] testByteArray =
153+
{
154+
{ 1, 2, 3 },
155+
{ 255, 0, 128 }
156+
};
157+
158+
string serialized = JsonSerializer.Serialize(testByteArray, options);
159+
Assert.AreEqual("[\"AQID\",\"/wCA\"]", serialized);
160+
byte[,] deserialized = JsonSerializer.Deserialize<byte[,]>(serialized, options)!;
161+
Assert.IsTrue(Equals(testByteArray, deserialized));
162+
163+
string serialized2 = JsonSerializer.Serialize(testByteArray, optionsWithByteArrayConverter);
164+
Assert.AreEqual("[[1,2,3],[255,0,128]]", serialized2);
165+
byte[,] deserialized2 = JsonSerializer.Deserialize<byte[,]>(serialized2, optionsWithByteArrayConverter)!;
166+
Assert.IsTrue(Equals(testByteArray, deserialized2));
167+
}
95168
}
96169
}

0 commit comments

Comments
 (0)