DotTiled/DotTiled.Tests/Serialization/Tmj/TmjMapReaderTests.cs

108 lines
3.9 KiB
C#
Raw Normal View History

2024-08-06 22:39:50 +02:00
namespace DotTiled.Tests;
public partial class TmjMapReaderTests
{
2024-08-09 23:12:45 +02:00
public static IEnumerable<object[]> DeserializeMap_ValidTmjNoExternalTilesets_ReturnsMapWithoutThrowing_Data =>
[
["Serialization.TestData.Map.empty-map-csv.tmj", TestData.EmptyMapWithEncodingAndCompression(DataEncoding.Csv, null)],
["Serialization.TestData.Map.empty-map-base64.tmj", TestData.EmptyMapWithEncodingAndCompression(DataEncoding.Base64, null)],
["Serialization.TestData.Map.empty-map-base64-gzip.tmj", TestData.EmptyMapWithEncodingAndCompression(DataEncoding.Base64, DataCompression.GZip)],
["Serialization.TestData.Map.empty-map-base64-zlib.tmj", TestData.EmptyMapWithEncodingAndCompression(DataEncoding.Base64, DataCompression.ZLib)],
["Serialization.TestData.Map.simple-tileset-embed.tmj", TestData.SimpleMapWithEmbeddedTileset()],
["Serialization.TestData.Map.empty-map-properties.tmj", TestData.EmptyMapWithProperties()],
];
[Theory]
[MemberData(nameof(DeserializeMap_ValidTmjNoExternalTilesets_ReturnsMapWithoutThrowing_Data))]
public void TmxMapReaderReadMap_ValidTmjNoExternalTilesets_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
{
// Arrange
var json = TestData.GetRawStringFor(testDataFile);
static Template ResolveTemplate(string source)
{
2024-08-10 19:18:33 +02:00
throw new NotSupportedException("External templates are not supported in this test.");
2024-08-09 23:12:45 +02:00
}
static Tileset ResolveTileset(string source)
{
2024-08-10 19:18:33 +02:00
throw new NotSupportedException("External tilesets are not supported in this test.");
2024-08-09 23:12:45 +02:00
}
2024-08-10 19:18:33 +02:00
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate, []);
2024-08-09 23:12:45 +02:00
// Act
var map = mapReader.ReadMap();
// Assert
Assert.NotNull(map);
DotTiledAssert.AssertMap(expectedMap, map);
}
public static IEnumerable<object[]> DeserializeMap_ValidTmjExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data =>
[
2024-08-10 19:18:33 +02:00
["Serialization.TestData.Map.map-with-object-template.tmj", TestData.MapWithObjectTemplate("tj")],
2024-08-09 23:12:45 +02:00
["Serialization.TestData.Map.map-with-group.tmj", TestData.MapWithGroup()],
];
[Theory]
[MemberData(nameof(DeserializeMap_ValidTmjExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data))]
public void TmxMapReaderReadMap_ValidTmjExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
2024-08-06 22:39:50 +02:00
{
// Arrange
2024-08-10 19:18:33 +02:00
CustomTypeDefinition[] customTypeDefinitions = [
new CustomClassDefinition
{
Name = "TestClass",
ID = 1,
UseAs = CustomClassUseAs.Property,
Members = [
new StringProperty
{
Name = "Name",
Value = ""
},
new FloatProperty
{
Name = "Amount",
Value = 0f
}
]
},
new CustomClassDefinition
{
Name = "Test",
ID = 2,
UseAs = CustomClassUseAs.All,
Members = [
new ClassProperty
{
Name = "Yep",
PropertyType = "TestClass",
Properties = []
}
]
}
];
2024-08-09 23:12:45 +02:00
var json = TestData.GetRawStringFor(testDataFile);
2024-08-10 19:18:33 +02:00
Template ResolveTemplate(string source)
2024-08-09 23:12:45 +02:00
{
var templateJson = TestData.GetRawStringFor($"Serialization.TestData.Template.{source}");
2024-08-10 19:18:33 +02:00
using var templateReader = new TjTemplateReader(templateJson, ResolveTileset, ResolveTemplate, customTypeDefinitions);
return templateReader.ReadTemplate();
2024-08-09 23:12:45 +02:00
}
2024-08-10 19:18:33 +02:00
Tileset ResolveTileset(string source)
2024-08-06 22:39:50 +02:00
{
2024-08-10 19:18:33 +02:00
var tilesetJson = TestData.GetRawStringFor($"Serialization.TestData.Tileset.{source}");
using var tilesetReader = new TsjTilesetReader(tilesetJson, ResolveTemplate, customTypeDefinitions);
return tilesetReader.ReadTileset();
2024-08-06 22:39:50 +02:00
}
2024-08-10 19:18:33 +02:00
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate, customTypeDefinitions);
2024-08-06 22:39:50 +02:00
// Act
2024-08-09 23:12:45 +02:00
var map = mapReader.ReadMap();
2024-08-06 22:39:50 +02:00
// Assert
2024-08-09 23:12:45 +02:00
Assert.NotNull(map);
DotTiledAssert.AssertMap(expectedMap, map);
2024-08-06 22:39:50 +02:00
}
}