From e0252d263e58c734ade3d2c99399aa7d1b448431 Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Sat, 7 Sep 2024 15:47:59 +0200 Subject: [PATCH] Added test that creates class definition from C# class and uses to load map --- .../Assert/AssertCustomTypes.cs | 23 +++ .../CustomTypes/FromTypeUsedInLoaderTests.cs | 180 ++++++++++++++++++ .../CustomTypes/CustomClassDefinitionTests.cs | 12 +- .../CustomTypes/CustomEnumDefinitionTests.cs | 17 +- 4 files changed, 208 insertions(+), 24 deletions(-) create mode 100644 src/DotTiled.Tests/Assert/AssertCustomTypes.cs create mode 100644 src/DotTiled.Tests/IntegrationTests/CustomTypes/FromTypeUsedInLoaderTests.cs diff --git a/src/DotTiled.Tests/Assert/AssertCustomTypes.cs b/src/DotTiled.Tests/Assert/AssertCustomTypes.cs new file mode 100644 index 0000000..19eae5b --- /dev/null +++ b/src/DotTiled.Tests/Assert/AssertCustomTypes.cs @@ -0,0 +1,23 @@ +namespace DotTiled.Tests; + +public static partial class DotTiledAssert +{ + internal static void AssertCustomClassDefinitionEqual(CustomClassDefinition expected, CustomClassDefinition actual) + { + AssertEqual(expected.ID, actual.ID, nameof(CustomClassDefinition.ID)); + AssertEqual(expected.Name, actual.Name, nameof(CustomClassDefinition.Name)); + AssertEqual(expected.Color, actual.Color, nameof(CustomClassDefinition.Color)); + AssertEqual(expected.DrawFill, actual.DrawFill, nameof(CustomClassDefinition.DrawFill)); + AssertEqual(expected.UseAs, actual.UseAs, nameof(CustomClassDefinition.UseAs)); + AssertProperties(expected.Members, actual.Members); + } + + internal static void AssertCustomEnumDefinitionEqual(CustomEnumDefinition expected, CustomEnumDefinition actual) + { + AssertEqual(expected.ID, actual.ID, nameof(CustomEnumDefinition.ID)); + AssertEqual(expected.Name, actual.Name, nameof(CustomEnumDefinition.Name)); + AssertEqual(expected.StorageType, actual.StorageType, nameof(CustomEnumDefinition.StorageType)); + AssertEqual(expected.ValueAsFlags, actual.ValueAsFlags, nameof(CustomEnumDefinition.ValueAsFlags)); + AssertListOrdered(expected.Values, actual.Values, nameof(CustomEnumDefinition.Values)); + } +} diff --git a/src/DotTiled.Tests/IntegrationTests/CustomTypes/FromTypeUsedInLoaderTests.cs b/src/DotTiled.Tests/IntegrationTests/CustomTypes/FromTypeUsedInLoaderTests.cs new file mode 100644 index 0000000..dae9464 --- /dev/null +++ b/src/DotTiled.Tests/IntegrationTests/CustomTypes/FromTypeUsedInLoaderTests.cs @@ -0,0 +1,180 @@ +using DotTiled.Serialization; +using NSubstitute; + +namespace DotTiled.Tests; + +public class FromTypeUsedInLoaderTests +{ + private sealed class TestClass + { + public string Name { get; set; } = "John Doe"; + public int Age { get; set; } = 42; + } + + [Fact] + public void LoadMap_MapHasClassAndClassIsDefined_ReturnsCorrectMap() + { + // Arrange + var resourceReader = Substitute.For(); + resourceReader.Read("map.tmx").Returns( + """ + + + + + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0 + + + + """); + var classDefinition = CustomClassDefinition.FromClass(); + var loader = Loader.DefaultWith( + resourceReader: resourceReader, + customTypeDefinitions: [classDefinition]); + var expectedMap = new Map + { + Class = "TestClass", + Orientation = MapOrientation.Orthogonal, + Width = 5, + Height = 5, + TileWidth = 32, + TileHeight = 32, + Infinite = false, + ParallaxOriginX = 0, + ParallaxOriginY = 0, + RenderOrder = RenderOrder.RightDown, + CompressionLevel = -1, + BackgroundColor = new Color { R = 0, G = 0, B = 0, A = 0 }, + Version = "1.10", + TiledVersion = "1.11.0", + NextLayerID = 2, + NextObjectID = 1, + Layers = [ + new TileLayer + { + ID = 1, + Name = "Tile Layer 1", + Width = 5, + Height = 5, + Data = new Data + { + Encoding = DataEncoding.Csv, + GlobalTileIDs = new Optional([ + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + ]), + FlippingFlags = new Optional([ + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None + ]) + } + } + ], + Properties = [ + new StringProperty { Name = "Name", Value = "John Doe" }, + new IntProperty { Name = "Age", Value = 42 } + ] + }; + + // Act + var result = loader.LoadMap("map.tmx"); + + // Assert + DotTiledAssert.AssertMap(expectedMap, result); + } + + [Fact] + public void LoadMap_MapHasClassAndClassIsDefinedAndFieldIsOverridenFromDefault_ReturnsCorrectMap() + { + // Arrange + var resourceReader = Substitute.For(); + resourceReader.Read("map.tmx").Returns( + """ + + + + + + + + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0, + 0,0,0,0,0 + + + + """); + var classDefinition = CustomClassDefinition.FromClass(); + var loader = Loader.DefaultWith( + resourceReader: resourceReader, + customTypeDefinitions: [classDefinition]); + var expectedMap = new Map + { + Class = "TestClass", + Orientation = MapOrientation.Orthogonal, + Width = 5, + Height = 5, + TileWidth = 32, + TileHeight = 32, + Infinite = false, + ParallaxOriginX = 0, + ParallaxOriginY = 0, + RenderOrder = RenderOrder.RightDown, + CompressionLevel = -1, + BackgroundColor = new Color { R = 0, G = 0, B = 0, A = 0 }, + Version = "1.10", + TiledVersion = "1.11.0", + NextLayerID = 2, + NextObjectID = 1, + Layers = [ + new TileLayer + { + ID = 1, + Name = "Tile Layer 1", + Width = 5, + Height = 5, + Data = new Data + { + Encoding = DataEncoding.Csv, + GlobalTileIDs = new Optional([ + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0 + ]), + FlippingFlags = new Optional([ + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None + ]) + } + } + ], + Properties = [ + new StringProperty { Name = "Name", Value = "John Doe" }, + new IntProperty { Name = "Age", Value = 42 } + ] + }; + + // Act + var result = loader.LoadMap("map.tmx"); + + // Assert + DotTiledAssert.AssertMap(expectedMap, result); + } +} diff --git a/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomClassDefinitionTests.cs b/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomClassDefinitionTests.cs index 87fecbd..7e920e3 100644 --- a/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomClassDefinitionTests.cs +++ b/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomClassDefinitionTests.cs @@ -77,16 +77,6 @@ public class CustomClassDefinitionTests yield return (typeof(TestClass3WithOverridenNestedClass), ExpectedTestClass3WithOverridenNestedClassDefinition); } - private static void AssertCustomClassDefinitionEqual(CustomClassDefinition expected, CustomClassDefinition actual) - { - DotTiledAssert.AssertEqual(expected.ID, actual.ID, nameof(CustomClassDefinition.ID)); - DotTiledAssert.AssertEqual(expected.Name, actual.Name, nameof(CustomClassDefinition.Name)); - DotTiledAssert.AssertEqual(expected.Color, actual.Color, nameof(CustomClassDefinition.Color)); - DotTiledAssert.AssertEqual(expected.DrawFill, actual.DrawFill, nameof(CustomClassDefinition.DrawFill)); - DotTiledAssert.AssertEqual(expected.UseAs, actual.UseAs, nameof(CustomClassDefinition.UseAs)); - DotTiledAssert.AssertProperties(expected.Members, actual.Members); - } - public static IEnumerable CustomClassDefinitionTestData => GetCustomClassDefinitionTestData().Select(data => new object[] { data.Item1, data.Item2 }); [Theory] @@ -97,7 +87,7 @@ public class CustomClassDefinitionTests var result = CustomClassDefinition.FromClass(type); // Assert - AssertCustomClassDefinitionEqual(expected, result); + DotTiledAssert.AssertCustomClassDefinitionEqual(expected, result); } [Fact] diff --git a/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomEnumDefinitionTests.cs b/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomEnumDefinitionTests.cs index 347836a..c342f77 100644 --- a/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomEnumDefinitionTests.cs +++ b/src/DotTiled.Tests/UnitTests/Properties/CustomTypes/CustomEnumDefinitionTests.cs @@ -2,15 +2,6 @@ namespace DotTiled.Tests; public class CustomEnumDefinitionTests { - private static void AssertCustomEnumDefinitionEqual(CustomEnumDefinition expected, CustomEnumDefinition actual) - { - DotTiledAssert.AssertEqual(expected.ID, actual.ID, nameof(CustomEnumDefinition.ID)); - DotTiledAssert.AssertEqual(expected.Name, actual.Name, nameof(CustomEnumDefinition.Name)); - DotTiledAssert.AssertEqual(expected.StorageType, actual.StorageType, nameof(CustomEnumDefinition.StorageType)); - DotTiledAssert.AssertEqual(expected.ValueAsFlags, actual.ValueAsFlags, nameof(CustomEnumDefinition.ValueAsFlags)); - DotTiledAssert.AssertListOrdered(expected.Values, actual.Values, nameof(CustomEnumDefinition.Values)); - } - [Fact] public void FromEnum_Type_WhenTypeIsNotEnum_ThrowsArgumentException() { @@ -41,7 +32,7 @@ public class CustomEnumDefinitionTests var result = CustomEnumDefinition.FromEnum(type); // Assert - AssertCustomEnumDefinitionEqual(expected, result); + DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result); } [Flags] @@ -65,7 +56,7 @@ public class CustomEnumDefinitionTests var result = CustomEnumDefinition.FromEnum(type); // Assert - AssertCustomEnumDefinitionEqual(expected, result); + DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result); } [Fact] @@ -85,7 +76,7 @@ public class CustomEnumDefinitionTests var result = CustomEnumDefinition.FromEnum(); // Assert - AssertCustomEnumDefinitionEqual(expected, result); + DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result); } [Fact] @@ -105,6 +96,6 @@ public class CustomEnumDefinitionTests var result = CustomEnumDefinition.FromEnum(); // Assert - AssertCustomEnumDefinitionEqual(expected, result); + DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result); } }