diff options
Diffstat (limited to 'Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization')
2 files changed, 102 insertions, 0 deletions
diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/ColorJsonConverterTests.cs b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/ColorJsonConverterTests.cs new file mode 100644 index 0000000..ae8e1e7 --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/ColorJsonConverterTests.cs @@ -0,0 +1,66 @@ +using System; +using System.IO; +using System.Text; +using System.Text.Json; +using Microsoft.Xna.Framework; +using MonoGame.Extended.Serialization; + +namespace MonoGame.Extended.Tests.Serialization; + +public sealed class ColorJsonConverterTests +{ + private readonly ColorJsonConverter _converter = new ColorJsonConverter(); + + [Fact] + public void CanConvert_ColorType_ReturnsTrue() + { + var colorType = typeof(Color); + var result = _converter.CanConvert(colorType); + Assert.True(result); + } + + [Fact] + public void CanConvert_NonColorType_ReturnsFalse() + { + var otherType = typeof(string); + var result = _converter.CanConvert(otherType); + Assert.False(result); + } + + [Theory] + [InlineData("Red", 255, 0, 0, 255)] + [InlineData("#FF0000FF", 255, 0, 0, 255)] + public void Read_ValidColorJson_ReturnsExpectedColor(string jsonValue, byte r, byte g, byte b, byte a) + { + var json = $"\"{jsonValue}\""; + var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); + + reader.Read(); + var actual = _converter.Read(ref reader, typeof(Color), new JsonSerializerOptions()); + + var expected = new Color(r, g, b, a); + Assert.Equal(expected, actual); + } + + [Fact] + public void Write_ValidColor_WritesExpectedJson() + { + var expected = "#ff000000"; + var color = ColorHelper.FromHex(expected); + using var stream = new MemoryStream(); + using var writer = new Utf8JsonWriter(stream); + + _converter.Write(writer, color, new JsonSerializerOptions()); + writer.Flush(); + var actual = Encoding.UTF8.GetString(stream.ToArray()); + + Assert.Equal($"\"{expected}\"", actual); + } + + [Fact] + public void Write_NullWrier_ThrowArgumentNullException() + { + var color = Color.MonoGameOrange; + Assert.Throws<ArgumentNullException>(() => _converter.Write(null, color, new JsonSerializerOptions())); + } +} diff --git a/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/RectangleFJsonConverterTest.cs b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/RectangleFJsonConverterTest.cs new file mode 100644 index 0000000..96f9c4f --- /dev/null +++ b/Plugins/MonoGame.Extended/tests/MonoGame.Extended.Tests/Serialization/RectangleFJsonConverterTest.cs @@ -0,0 +1,36 @@ +using System.IO; +using System.Text.Json; +using MonoGame.Extended.Serialization; +using Xunit; + +namespace MonoGame.Extended.Tests.Serialization; + +public class RectangleFJsonConverterTest +{ + + public class TestContent + { + public RectangleF Box { get; set; } + } + + [Fact] + public void ConstructorTest() + { + var jsonData = @" +{ + ""box"": ""1 1 10 10"" +} +"; + var options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true + }; + options.Converters.Add(new RectangleFJsonConverter()); + var content = JsonSerializer.Deserialize<TestContent>(jsonData, options); + + Assert.Equal(1, content.Box.Left); + Assert.Equal(1, content.Box.Top); + Assert.Equal(10, content.Box.Width); + Assert.Equal(10, content.Box.Height); + } +} |