mirror of
https://github.com/dcronqvist/DotTiled.git
synced 2025-05-09 22:16:02 +03:00
Big properties work
This commit is contained in:
parent
1168917c23
commit
5e93716d2c
15 changed files with 820 additions and 55 deletions
|
@ -17,7 +17,7 @@ public static partial class DotTiledAssert
|
|||
Assert.Equal(expected.Visible, actual.Visible);
|
||||
Assert.Equal(expected.Template, actual.Template);
|
||||
|
||||
AssertProperties(actual.Properties, expected.Properties);
|
||||
AssertProperties(expected.Properties, actual.Properties);
|
||||
AssertObject((dynamic)expected, (dynamic)actual);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,51 +19,51 @@ public static partial class DotTiledAssert
|
|||
}
|
||||
}
|
||||
|
||||
private static void AssertProperty(IProperty actual, IProperty expected)
|
||||
private static void AssertProperty(IProperty expected, IProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Type, actual.Type);
|
||||
Assert.Equal(expected.Name, actual.Name);
|
||||
AssertProperties((dynamic)actual, (dynamic)expected);
|
||||
}
|
||||
|
||||
private static void AssertProperty(StringProperty actual, StringProperty expected)
|
||||
private static void AssertProperty(StringProperty expected, StringProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(IntProperty actual, IntProperty expected)
|
||||
private static void AssertProperty(IntProperty expected, IntProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(FloatProperty actual, FloatProperty expected)
|
||||
private static void AssertProperty(FloatProperty expected, FloatProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(BoolProperty actual, BoolProperty expected)
|
||||
private static void AssertProperty(BoolProperty expected, BoolProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(ColorProperty actual, ColorProperty expected)
|
||||
private static void AssertProperty(ColorProperty expected, ColorProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(FileProperty actual, FileProperty expected)
|
||||
private static void AssertProperty(FileProperty expected, FileProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(ObjectProperty actual, ObjectProperty expected)
|
||||
private static void AssertProperty(ObjectProperty expected, ObjectProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.Value, actual.Value);
|
||||
}
|
||||
|
||||
private static void AssertProperty(ClassProperty actual, ClassProperty expected)
|
||||
private static void AssertProperty(ClassProperty expected, ClassProperty actual)
|
||||
{
|
||||
Assert.Equal(expected.PropertyType, actual.PropertyType);
|
||||
AssertProperties(actual.Properties, expected.Properties);
|
||||
AssertProperties(expected.Properties, actual.Properties);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ namespace DotTiled.Tests;
|
|||
|
||||
public partial class TestData
|
||||
{
|
||||
public static Map MapWithObjectTemplate() => new Map
|
||||
public static Map MapWithObjectTemplate(string templateExtension) => new Map
|
||||
{
|
||||
Version = "1.10",
|
||||
TiledVersion = "1.11.0",
|
||||
|
@ -49,7 +49,7 @@ public partial class TestData
|
|||
new RectangleObject
|
||||
{
|
||||
ID = 1,
|
||||
Template = "map-with-object-template.tx",
|
||||
Template = $"map-with-object-template.{templateExtension}",
|
||||
Name = "Thingy 2",
|
||||
X = 94.5749f,
|
||||
Y = 33.6842f,
|
||||
|
@ -73,7 +73,7 @@ public partial class TestData
|
|||
new RectangleObject
|
||||
{
|
||||
ID = 2,
|
||||
Template = "map-with-object-template.tx",
|
||||
Template = $"map-with-object-template.{templateExtension}",
|
||||
Name = "Thingy",
|
||||
X = 29.7976f,
|
||||
Y = 33.8693f,
|
||||
|
@ -97,7 +97,7 @@ public partial class TestData
|
|||
new RectangleObject
|
||||
{
|
||||
ID = 3,
|
||||
Template = "map-with-object-template.tx",
|
||||
Template = $"map-with-object-template.{templateExtension}",
|
||||
Name = "Thingy 3",
|
||||
X = 5,
|
||||
Y = 5,
|
||||
|
@ -112,7 +112,7 @@ public partial class TestData
|
|||
PropertyType = "TestClass",
|
||||
Properties = new Dictionary<string, IProperty>
|
||||
{
|
||||
["Amount"] = new FloatProperty { Name = "Amount", Value = 4.2f },
|
||||
["Amount"] = new FloatProperty { Name = "Amount", Value = 0.0f },
|
||||
["Name"] = new StringProperty { Name = "Name", Value = "I am here 3" }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
[
|
||||
{
|
||||
"color": "#ffa0a0a4",
|
||||
"drawFill": true,
|
||||
"id": 1,
|
||||
"members": [
|
||||
{
|
||||
"name": "Amount",
|
||||
"type": "float",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Name",
|
||||
"type": "string",
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"name": "TestClass",
|
||||
"type": "class",
|
||||
"useAs": [
|
||||
"property"
|
||||
]
|
||||
}
|
||||
]
|
103
DotTiled.Tests/Serialization/TestData/propertytypes-2.json
Normal file
103
DotTiled.Tests/Serialization/TestData/propertytypes-2.json
Normal file
|
@ -0,0 +1,103 @@
|
|||
[
|
||||
{
|
||||
"id": 4,
|
||||
"name": "Enum0String",
|
||||
"storageType": "string",
|
||||
"type": "enum",
|
||||
"values": [
|
||||
"Enum0_1",
|
||||
"Enum0_2",
|
||||
"Enum0_3"
|
||||
],
|
||||
"valuesAsFlags": false
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Enum1Num",
|
||||
"storageType": "int",
|
||||
"type": "enum",
|
||||
"values": [
|
||||
"Enum1Num_1",
|
||||
"Enum1Num_2",
|
||||
"Enum1Num_3",
|
||||
"Enum1Num_4"
|
||||
],
|
||||
"valuesAsFlags": false
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "Enum2StringFlags",
|
||||
"storageType": "string",
|
||||
"type": "enum",
|
||||
"values": [
|
||||
"Enum2StringFlags_1",
|
||||
"Enum2StringFlags_2",
|
||||
"Enum2StringFlags_3",
|
||||
"Enum2StringFlags_4"
|
||||
],
|
||||
"valuesAsFlags": true
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "Enum3NumFlags",
|
||||
"storageType": "int",
|
||||
"type": "enum",
|
||||
"values": [
|
||||
"Enum3NumFlags_1",
|
||||
"Enum3NumFlags_2",
|
||||
"Enum3NumFlags_3",
|
||||
"Enum3NumFlags_4",
|
||||
"Enum3NumFlags_5"
|
||||
],
|
||||
"valuesAsFlags": true
|
||||
},
|
||||
{
|
||||
"color": "#ffa0a0a4",
|
||||
"drawFill": true,
|
||||
"id": 2,
|
||||
"members": [
|
||||
{
|
||||
"name": "Yep",
|
||||
"propertyType": "TestClass",
|
||||
"type": "class",
|
||||
"value": {
|
||||
}
|
||||
}
|
||||
],
|
||||
"name": "Test",
|
||||
"type": "class",
|
||||
"useAs": [
|
||||
"property",
|
||||
"map",
|
||||
"layer",
|
||||
"object",
|
||||
"tile",
|
||||
"tileset",
|
||||
"wangcolor",
|
||||
"wangset",
|
||||
"project"
|
||||
]
|
||||
},
|
||||
{
|
||||
"color": "#ffa0a0a4",
|
||||
"drawFill": true,
|
||||
"id": 1,
|
||||
"members": [
|
||||
{
|
||||
"name": "Amount",
|
||||
"type": "float",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"name": "Name",
|
||||
"type": "string",
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"name": "TestClass",
|
||||
"type": "class",
|
||||
"useAs": [
|
||||
"property"
|
||||
]
|
||||
}
|
||||
]
|
|
@ -20,17 +20,13 @@ public partial class TmjMapReaderTests
|
|||
var json = TestData.GetRawStringFor(testDataFile);
|
||||
static Template ResolveTemplate(string source)
|
||||
{
|
||||
var templateJson = TestData.GetRawStringFor($"Serialization.TestData.Template.{source}");
|
||||
//var templateReader = new TmjTemplateReader(templateJson, ResolveTemplate);
|
||||
return null;
|
||||
throw new NotSupportedException("External templates are not supported in this test.");
|
||||
}
|
||||
static Tileset ResolveTileset(string source)
|
||||
{
|
||||
var tilesetJson = TestData.GetXmlReaderFor($"Serialization.TestData.Tileset.{source}");
|
||||
//var tilesetReader = new TmjTilesetReader(tilesetJson, ResolveTileset, ResolveTemplate);
|
||||
return null;
|
||||
throw new NotSupportedException("External tilesets are not supported in this test.");
|
||||
}
|
||||
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate);
|
||||
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate, []);
|
||||
|
||||
// Act
|
||||
var map = mapReader.ReadMap();
|
||||
|
@ -42,7 +38,7 @@ public partial class TmjMapReaderTests
|
|||
|
||||
public static IEnumerable<object[]> DeserializeMap_ValidTmjExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data =>
|
||||
[
|
||||
["Serialization.TestData.Map.map-with-object-template.tmj", TestData.MapWithObjectTemplate()],
|
||||
["Serialization.TestData.Map.map-with-object-template.tmj", TestData.MapWithObjectTemplate("tj")],
|
||||
["Serialization.TestData.Map.map-with-group.tmj", TestData.MapWithGroup()],
|
||||
];
|
||||
|
||||
|
@ -51,20 +47,55 @@ public partial class TmjMapReaderTests
|
|||
public void TmxMapReaderReadMap_ValidTmjExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected(string testDataFile, Map expectedMap)
|
||||
{
|
||||
// Arrange
|
||||
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 = []
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
var json = TestData.GetRawStringFor(testDataFile);
|
||||
static Template ResolveTemplate(string source)
|
||||
Template ResolveTemplate(string source)
|
||||
{
|
||||
var templateJson = TestData.GetRawStringFor($"Serialization.TestData.Template.{source}");
|
||||
//var templateReader = new TmjTemplateReader(templateJson, ResolveTemplate);
|
||||
return null;
|
||||
using var templateReader = new TjTemplateReader(templateJson, ResolveTileset, ResolveTemplate, customTypeDefinitions);
|
||||
return templateReader.ReadTemplate();
|
||||
}
|
||||
static Tileset ResolveTileset(string source)
|
||||
Tileset ResolveTileset(string source)
|
||||
{
|
||||
var tilesetJson = TestData.GetXmlReaderFor($"Serialization.TestData.Tileset.{source}");
|
||||
//var tilesetReader = new TmjTilesetReader(tilesetJson, ResolveTileset, ResolveTemplate);
|
||||
return null;
|
||||
var tilesetJson = TestData.GetRawStringFor($"Serialization.TestData.Tileset.{source}");
|
||||
using var tilesetReader = new TsjTilesetReader(tilesetJson, ResolveTemplate, customTypeDefinitions);
|
||||
return tilesetReader.ReadTileset();
|
||||
}
|
||||
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate);
|
||||
using var mapReader = new TmjMapReader(json, ResolveTileset, ResolveTemplate, customTypeDefinitions);
|
||||
|
||||
// Act
|
||||
var map = mapReader.ReadMap();
|
||||
|
|
|
@ -116,7 +116,7 @@ public partial class TmxMapReaderTests
|
|||
|
||||
public static IEnumerable<object[]> DeserializeMap_ValidXmlExternalTilesetsAndTemplates_ReturnsMapThatEqualsExpected_Data =>
|
||||
[
|
||||
["Serialization.TestData.Map.map-with-object-template.tmx", TestData.MapWithObjectTemplate()],
|
||||
["Serialization.TestData.Map.map-with-object-template.tmx", TestData.MapWithObjectTemplate("tx")],
|
||||
["Serialization.TestData.Map.map-with-group.tmx", TestData.MapWithGroup()],
|
||||
];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue