mirror of
https://github.com/dcronqvist/DotTiled.git
synced 2025-05-09 22:16:02 +03:00
Add object Templates to Model and TmxSerializer
This commit is contained in:
parent
5193ab5b61
commit
0f6db5254d
16 changed files with 631 additions and 44 deletions
|
@ -26,7 +26,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<!-- TmxSerializer test data -->
|
||||
<EmbeddedResource Include="TmxSerializer/TestData/**/*.tmx" />
|
||||
<EmbeddedResource Include="TmxSerializer/TestData/**/*" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
94
DotTiled.Tests/TmxSerializer/TestData/Map/map-with-group.cs
Normal file
94
DotTiled.Tests/TmxSerializer/TestData/Map/map-with-group.cs
Normal file
|
@ -0,0 +1,94 @@
|
|||
namespace DotTiled.Tests;
|
||||
|
||||
public partial class TmxSerializerMapTests
|
||||
{
|
||||
private static Map MapWithGroup() => new Map
|
||||
{
|
||||
Version = "1.10",
|
||||
TiledVersion = "1.11.0",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
RenderOrder = RenderOrder.RightDown,
|
||||
Width = 5,
|
||||
Height = 5,
|
||||
TileWidth = 32,
|
||||
TileHeight = 32,
|
||||
Infinite = false,
|
||||
NextLayerID = 5,
|
||||
NextObjectID = 2,
|
||||
Layers = [
|
||||
new TileLayer
|
||||
{
|
||||
ID = 4,
|
||||
Name = "Tile Layer 2",
|
||||
Width = 5,
|
||||
Height = 5,
|
||||
Data = new Data
|
||||
{
|
||||
Encoding = DataEncoding.Csv,
|
||||
GlobalTileIDs = [
|
||||
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 = [
|
||||
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
|
||||
]
|
||||
}
|
||||
},
|
||||
new Group
|
||||
{
|
||||
ID = 3,
|
||||
Name = "Group 1",
|
||||
Layers = [
|
||||
new TileLayer
|
||||
{
|
||||
ID = 1,
|
||||
Name = "Tile Layer 1",
|
||||
Width = 5,
|
||||
Height = 5,
|
||||
Data = new Data
|
||||
{
|
||||
Encoding = DataEncoding.Csv,
|
||||
GlobalTileIDs = [
|
||||
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 = [
|
||||
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
|
||||
]
|
||||
}
|
||||
},
|
||||
new ObjectLayer
|
||||
{
|
||||
ID = 2,
|
||||
Name = "Object Layer 1",
|
||||
Objects = [
|
||||
new RectangleObject
|
||||
{
|
||||
ID = 1,
|
||||
Name = "Name",
|
||||
X = 35.5f,
|
||||
Y = 26,
|
||||
Width = 64.5f,
|
||||
Height = 64.5f,
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
26
DotTiled.Tests/TmxSerializer/TestData/Map/map-with-group.tmx
Normal file
26
DotTiled.Tests/TmxSerializer/TestData/Map/map-with-group.tmx
Normal file
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="5" height="5" tilewidth="32" tileheight="32" infinite="0" nextlayerid="5" nextobjectid="2">
|
||||
<layer id="4" name="Tile Layer 2" 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>
|
||||
<group id="3" name="Group 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>
|
||||
<objectgroup id="2" name="Object Layer 1">
|
||||
<object id="1" name="Name" x="35.5" y="26" width="64.5" height="64.5"/>
|
||||
</objectgroup>
|
||||
</group>
|
||||
</map>
|
|
@ -0,0 +1,125 @@
|
|||
namespace DotTiled.Tests;
|
||||
|
||||
public partial class TmxSerializerMapTests
|
||||
{
|
||||
private static Map MapWithObjectTemplate() => new Map
|
||||
{
|
||||
Version = "1.10",
|
||||
TiledVersion = "1.11.0",
|
||||
Orientation = MapOrientation.Orthogonal,
|
||||
RenderOrder = RenderOrder.RightDown,
|
||||
Width = 5,
|
||||
Height = 5,
|
||||
TileWidth = 32,
|
||||
TileHeight = 32,
|
||||
Infinite = false,
|
||||
NextLayerID = 3,
|
||||
NextObjectID = 3,
|
||||
Layers = [
|
||||
new TileLayer
|
||||
{
|
||||
ID = 1,
|
||||
Name = "Tile Layer 1",
|
||||
Width = 5,
|
||||
Height = 5,
|
||||
Data = new Data
|
||||
{
|
||||
Encoding = DataEncoding.Csv,
|
||||
GlobalTileIDs = [
|
||||
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 = [
|
||||
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
|
||||
]
|
||||
}
|
||||
},
|
||||
new ObjectLayer
|
||||
{
|
||||
ID = 2,
|
||||
Name = "Object Layer 1",
|
||||
Objects = [
|
||||
new RectangleObject
|
||||
{
|
||||
ID = 1,
|
||||
Template = "map-with-object-template.tx",
|
||||
Name = "Thingy 2",
|
||||
X = 94.5749f,
|
||||
Y = 33.6842f,
|
||||
Width = 37.0156f,
|
||||
Height = 37.0156f,
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Bool"] = new BoolProperty { Name = "Bool", Value = true },
|
||||
["TestClassInTemplate"] = new ClassProperty
|
||||
{
|
||||
Name = "TestClassInTemplate",
|
||||
PropertyType = "TestClass",
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Amount"] = new FloatProperty { Name = "Amount", Value = 37 },
|
||||
["Name"] = new StringProperty { Name = "Name", Value = "I am here" }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
new RectangleObject
|
||||
{
|
||||
ID = 2,
|
||||
Template = "map-with-object-template.tx",
|
||||
Name = "Thingy",
|
||||
X = 29.7976f,
|
||||
Y = 33.8693f,
|
||||
Width = 37.0156f,
|
||||
Height = 37.0156f,
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Bool"] = new BoolProperty { Name = "Bool", Value = true },
|
||||
["TestClassInTemplate"] = new ClassProperty
|
||||
{
|
||||
Name = "TestClassInTemplate",
|
||||
PropertyType = "TestClass",
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Amount"] = new FloatProperty { Name = "Amount", Value = 4.2f },
|
||||
["Name"] = new StringProperty { Name = "Name", Value = "Hello there" }
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
new RectangleObject
|
||||
{
|
||||
ID = 3,
|
||||
Template = "map-with-object-template.tx",
|
||||
Name = "Thingy 3",
|
||||
X = 5,
|
||||
Y = 5,
|
||||
Width = 37.0156f,
|
||||
Height = 37.0156f,
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Bool"] = new BoolProperty { Name = "Bool", Value = true },
|
||||
["TestClassInTemplate"] = new ClassProperty
|
||||
{
|
||||
Name = "TestClassInTemplate",
|
||||
PropertyType = "TestClass",
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Amount"] = new FloatProperty { Name = "Amount", Value = 4.2f },
|
||||
["Name"] = new StringProperty { Name = "Name", Value = "I am here 3" }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<map version="1.10" tiledversion="1.11.0" orientation="orthogonal" renderorder="right-down" width="5" height="5" tilewidth="32" tileheight="32" infinite="0" nextlayerid="3" nextobjectid="3">
|
||||
<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>
|
||||
<objectgroup id="2" name="Object Layer 1">
|
||||
<object id="1" template="map-with-object-template.tx" name="Thingy 2" x="94.5749" y="33.6842">
|
||||
<properties>
|
||||
<property name="Bool" type="bool" value="true"/>
|
||||
<property name="TestClassInTemplate" type="class" propertytype="TestClass">
|
||||
<properties>
|
||||
<property name="Amount" type="float" value="37"/>
|
||||
<property name="Name" value="I am here"/>
|
||||
</properties>
|
||||
</property>
|
||||
</properties>
|
||||
</object>
|
||||
<object id="2" template="map-with-object-template.tx" x="29.7976" y="33.8693"/>
|
||||
<object id="3" template="map-with-object-template.tx" name="Thingy 3" x="5" y="5">
|
||||
<properties>
|
||||
<property name="TestClassInTemplate" type="class" propertytype="TestClass">
|
||||
<properties>
|
||||
<property name="Name" value="I am here 3"/>
|
||||
</properties>
|
||||
</property>
|
||||
</properties>
|
||||
</object>
|
||||
</objectgroup>
|
||||
</map>
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<template>
|
||||
<object name="Thingy" width="37.0156" height="37.0156">
|
||||
<properties>
|
||||
<property name="Bool" type="bool" value="true"/>
|
||||
<property name="TestClassInTemplate" type="class" propertytype="TestClass">
|
||||
<properties>
|
||||
<property name="Amount" type="float" value="4.2"/>
|
||||
<property name="Name" value="Hello there"/>
|
||||
</properties>
|
||||
</property>
|
||||
</properties>
|
||||
</object>
|
||||
</template>
|
|
@ -15,8 +15,6 @@ public partial class TmxSerializerLayerTests
|
|||
Assert.Equal(expected.ID, actual.ID);
|
||||
Assert.Equal(expected.Name, actual.Name);
|
||||
Assert.Equal(expected.Class, actual.Class);
|
||||
Assert.Equal(expected.X, actual.X);
|
||||
Assert.Equal(expected.Y, actual.Y);
|
||||
Assert.Equal(expected.Opacity, actual.Opacity);
|
||||
Assert.Equal(expected.Visible, actual.Visible);
|
||||
Assert.Equal(expected.TintColor, actual.TintColor);
|
||||
|
@ -34,6 +32,8 @@ public partial class TmxSerializerLayerTests
|
|||
// Attributes
|
||||
Assert.Equal(expected.Width, actual.Width);
|
||||
Assert.Equal(expected.Height, actual.Height);
|
||||
Assert.Equal(expected.X, actual.X);
|
||||
Assert.Equal(expected.Y, actual.Y);
|
||||
|
||||
Assert.NotNull(actual.Data);
|
||||
TmxSerializerDataTests.AssertData(actual.Data, expected.Data);
|
||||
|
@ -43,6 +43,8 @@ public partial class TmxSerializerLayerTests
|
|||
{
|
||||
// Attributes
|
||||
Assert.Equal(expected.DrawOrder, actual.DrawOrder);
|
||||
Assert.Equal(expected.X, actual.X);
|
||||
Assert.Equal(expected.Y, actual.Y);
|
||||
|
||||
Assert.NotNull(actual.Objects);
|
||||
Assert.Equal(expected.Objects.Count, actual.Objects.Count);
|
||||
|
@ -55,8 +57,19 @@ public partial class TmxSerializerLayerTests
|
|||
// Attributes
|
||||
Assert.Equal(expected.RepeatX, actual.RepeatX);
|
||||
Assert.Equal(expected.RepeatY, actual.RepeatY);
|
||||
Assert.Equal(expected.X, actual.X);
|
||||
Assert.Equal(expected.Y, actual.Y);
|
||||
|
||||
Assert.NotNull(actual.Image);
|
||||
TmxSerializerImageTests.AssertImage(actual.Image, expected.Image);
|
||||
}
|
||||
|
||||
private static void AssertLayer(Group actual, Group expected)
|
||||
{
|
||||
// Attributes
|
||||
Assert.NotNull(actual.Layers);
|
||||
Assert.Equal(expected.Layers.Count, actual.Layers.Count);
|
||||
for (var i = 0; i < expected.Layers.Count; i++)
|
||||
AssertLayer(actual.Layers[i], expected.Layers[i]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,13 +50,18 @@ public partial class TmxSerializerMapTests
|
|||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlNoExternalTilesets_ReturnsMapWithoutThrowing_Data))]
|
||||
public void DeserializeMap_ValidXmlNoExternalTilesets_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
public void DeserializeMapFromXmlReader_ValidXmlNoExternalTilesets_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
using var reader = TmxSerializerTestData.GetReaderFor(testDataFile);
|
||||
var testDataFileText = TmxSerializerTestData.GetRawStringFor(testDataFile);
|
||||
Func<string, Tileset> externalTilesetResolver = (string s) => throw new NotSupportedException("External tilesets are not supported in this test");
|
||||
var tmxSerializer = new TmxSerializer(externalTilesetResolver);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External tilesets are not supported in this test");
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External templates are not supported in this test");
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var map = tmxSerializer.DeserializeMap(reader);
|
||||
|
@ -68,5 +73,153 @@ public partial class TmxSerializerMapTests
|
|||
|
||||
Assert.NotNull(raw);
|
||||
AssertMap(raw, expectedMap);
|
||||
|
||||
AssertMap(map, raw);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlNoExternalTilesets_ReturnsMapWithoutThrowing_Data))]
|
||||
public void DeserializeMapFromString_ValidXmlNoExternalTilesets_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
var testDataFileText = TmxSerializerTestData.GetRawStringFor(testDataFile);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External tilesets are not supported in this test");
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External templates are not supported in this test");
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var raw = tmxSerializer.DeserializeMap(testDataFileText);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(raw);
|
||||
AssertMap(raw, expectedMap);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlNoExternalTilesets_ReturnsMapWithoutThrowing_Data))]
|
||||
public void DeserializeMapFromStringFromXmlReader_ValidXmlNoExternalTilesets_Equal(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
using var reader = TmxSerializerTestData.GetReaderFor(testDataFile);
|
||||
var testDataFileText = TmxSerializerTestData.GetRawStringFor(testDataFile);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External tilesets are not supported in this test");
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
throw new NotSupportedException("External templates are not supported in this test");
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var map = tmxSerializer.DeserializeMap(reader);
|
||||
var raw = tmxSerializer.DeserializeMap(testDataFileText);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(map);
|
||||
Assert.NotNull(raw);
|
||||
|
||||
AssertMap(map, raw);
|
||||
AssertMap(map, expectedMap);
|
||||
AssertMap(raw, expectedMap);
|
||||
}
|
||||
|
||||
public static IEnumerable<object[]> DeserializeMap_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data =>
|
||||
[
|
||||
["TmxSerializer.TestData.Map.map-with-object-template.tmx", MapWithObjectTemplate()],
|
||||
["TmxSerializer.TestData.Map.map-with-group.tmx", MapWithGroup()],
|
||||
];
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data))]
|
||||
public void DeserializeMapFromXmlReader_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
using var reader = TmxSerializerTestData.GetReaderFor(testDataFile);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var tilesetReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Tileset.{s}");
|
||||
return serializer.DeserializeTileset(tilesetReader);
|
||||
};
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var templateReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Template.{s}");
|
||||
return serializer.DeserializeTemplate(templateReader);
|
||||
};
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var map = tmxSerializer.DeserializeMap(reader);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(map);
|
||||
AssertMap(map, expectedMap);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data))]
|
||||
public void DeserializeMapFromString_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
var testDataFileText = TmxSerializerTestData.GetRawStringFor(testDataFile);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var tilesetReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Tileset.{s}");
|
||||
return serializer.DeserializeTileset(tilesetReader);
|
||||
};
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var templateReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Template.{s}");
|
||||
return serializer.DeserializeTemplate(templateReader);
|
||||
};
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var map = tmxSerializer.DeserializeMap(testDataFileText);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(map);
|
||||
AssertMap(map, expectedMap);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
[MemberData(nameof(DeserializeMap_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data))]
|
||||
public void DeserializeMapFromStringFromXmlReader_ValidXmlExternalTilesetsAndTemplates_Equal(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
using var reader = TmxSerializerTestData.GetReaderFor(testDataFile);
|
||||
var testDataFileText = TmxSerializerTestData.GetRawStringFor(testDataFile);
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var tilesetReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Tileset.{s}");
|
||||
return serializer.DeserializeTileset(tilesetReader);
|
||||
};
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (TmxSerializer serializer, string s) =>
|
||||
{
|
||||
using var templateReader = TmxSerializerTestData.GetReaderFor($"TmxSerializer.TestData.Template.{s}");
|
||||
return serializer.DeserializeTemplate(templateReader);
|
||||
};
|
||||
var tmxSerializer = new TmxSerializer(
|
||||
externalTilesetResolver,
|
||||
externalTemplateResolver);
|
||||
|
||||
// Act
|
||||
var map = tmxSerializer.DeserializeMap(reader);
|
||||
var raw = tmxSerializer.DeserializeMap(testDataFileText);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(map);
|
||||
Assert.NotNull(raw);
|
||||
|
||||
AssertMap(map, raw);
|
||||
AssertMap(map, expectedMap);
|
||||
AssertMap(raw, expectedMap);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,10 +6,11 @@ public class TmxSerializerTests
|
|||
public void TmxSerializerConstructor_ExternalTilesetResolverIsNull_ThrowsArgumentNullException()
|
||||
{
|
||||
// Arrange
|
||||
Func<string, Tileset> externalTilesetResolver = null!;
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = null!;
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = null!;
|
||||
|
||||
// Act
|
||||
Action act = () => _ = new TmxSerializer(externalTilesetResolver);
|
||||
Action act = () => _ = new TmxSerializer(externalTilesetResolver, externalTemplateResolver);
|
||||
|
||||
// Assert
|
||||
Assert.Throws<ArgumentNullException>(act);
|
||||
|
@ -19,10 +20,11 @@ public class TmxSerializerTests
|
|||
public void TmxSerializerConstructor_ExternalTilesetResolverIsNotNull_DoesNotThrow()
|
||||
{
|
||||
// Arrange
|
||||
Func<string, Tileset> externalTilesetResolver = _ => new Tileset();
|
||||
Func<TmxSerializer, string, Tileset> externalTilesetResolver = (_, _) => new Tileset();
|
||||
Func<TmxSerializer, string, Template> externalTemplateResolver = (_, _) => new Template { Object = new RectangleObject { } };
|
||||
|
||||
// Act
|
||||
var tmxSerializer = new TmxSerializer(externalTilesetResolver);
|
||||
var tmxSerializer = new TmxSerializer(externalTilesetResolver, externalTemplateResolver);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(tmxSerializer);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue