mirror of
https://github.com/dcronqvist/DotTiled.git
synced 2025-02-05 08:52:50 +02:00
Added test that creates class definition from C# class and uses to load map
This commit is contained in:
parent
d23eec4433
commit
e0252d263e
4 changed files with 208 additions and 24 deletions
23
src/DotTiled.Tests/Assert/AssertCustomTypes.cs
Normal file
23
src/DotTiled.Tests/Assert/AssertCustomTypes.cs
Normal file
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
|
@ -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<IResourceReader>();
|
||||||
|
resourceReader.Read("map.tmx").Returns(
|
||||||
|
"""
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<map version="1.10" tiledversion="1.11.0" class="TestClass" orientation="orthogonal" renderorder="right-down" width="5" height="5" tilewidth="32" tileheight="32" infinite="0" nextlayerid="2" nextobjectid="1">
|
||||||
|
<layer id="1" name="Tile Layer 1" width="5" height="5">
|
||||||
|
<data encoding="csv">
|
||||||
|
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
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
</map>
|
||||||
|
""");
|
||||||
|
var classDefinition = CustomClassDefinition.FromClass<TestClass>();
|
||||||
|
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<uint[]>([
|
||||||
|
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[]>([
|
||||||
|
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<IResourceReader>();
|
||||||
|
resourceReader.Read("map.tmx").Returns(
|
||||||
|
"""
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<map version="1.10" tiledversion="1.11.0" class="TestClass" orientation="orthogonal" renderorder="right-down" width="5" height="5" tilewidth="32" tileheight="32" infinite="0" nextlayerid="2" nextobjectid="1">
|
||||||
|
<properties>
|
||||||
|
<property name="Name" value="John Doe"/>
|
||||||
|
</properties>
|
||||||
|
<layer id="1" name="Tile Layer 1" width="5" height="5">
|
||||||
|
<data encoding="csv">
|
||||||
|
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
|
||||||
|
</data>
|
||||||
|
</layer>
|
||||||
|
</map>
|
||||||
|
""");
|
||||||
|
var classDefinition = CustomClassDefinition.FromClass<TestClass>();
|
||||||
|
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<uint[]>([
|
||||||
|
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[]>([
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -77,16 +77,6 @@ public class CustomClassDefinitionTests
|
||||||
yield return (typeof(TestClass3WithOverridenNestedClass), ExpectedTestClass3WithOverridenNestedClassDefinition);
|
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<object[]> CustomClassDefinitionTestData =>
|
public static IEnumerable<object[]> CustomClassDefinitionTestData =>
|
||||||
GetCustomClassDefinitionTestData().Select(data => new object[] { data.Item1, data.Item2 });
|
GetCustomClassDefinitionTestData().Select(data => new object[] { data.Item1, data.Item2 });
|
||||||
[Theory]
|
[Theory]
|
||||||
|
@ -97,7 +87,7 @@ public class CustomClassDefinitionTests
|
||||||
var result = CustomClassDefinition.FromClass(type);
|
var result = CustomClassDefinition.FromClass(type);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertCustomClassDefinitionEqual(expected, result);
|
DotTiledAssert.AssertCustomClassDefinitionEqual(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
@ -2,15 +2,6 @@ namespace DotTiled.Tests;
|
||||||
|
|
||||||
public class CustomEnumDefinitionTests
|
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]
|
[Fact]
|
||||||
public void FromEnum_Type_WhenTypeIsNotEnum_ThrowsArgumentException()
|
public void FromEnum_Type_WhenTypeIsNotEnum_ThrowsArgumentException()
|
||||||
{
|
{
|
||||||
|
@ -41,7 +32,7 @@ public class CustomEnumDefinitionTests
|
||||||
var result = CustomEnumDefinition.FromEnum(type);
|
var result = CustomEnumDefinition.FromEnum(type);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertCustomEnumDefinitionEqual(expected, result);
|
DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
@ -65,7 +56,7 @@ public class CustomEnumDefinitionTests
|
||||||
var result = CustomEnumDefinition.FromEnum(type);
|
var result = CustomEnumDefinition.FromEnum(type);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertCustomEnumDefinitionEqual(expected, result);
|
DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -85,7 +76,7 @@ public class CustomEnumDefinitionTests
|
||||||
var result = CustomEnumDefinition.FromEnum<TestEnum1>();
|
var result = CustomEnumDefinition.FromEnum<TestEnum1>();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertCustomEnumDefinitionEqual(expected, result);
|
DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
@ -105,6 +96,6 @@ public class CustomEnumDefinitionTests
|
||||||
var result = CustomEnumDefinition.FromEnum<TestEnum2>();
|
var result = CustomEnumDefinition.FromEnum<TestEnum2>();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
AssertCustomEnumDefinitionEqual(expected, result);
|
DotTiledAssert.AssertCustomEnumDefinitionEqual(expected, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue