using DotTiled.Model; namespace DotTiled.Tests; public static partial class DotTiledAssert { internal static void AssertProperties(Dictionary? expected, Dictionary? actual) { if (expected is null) { Assert.Null(actual); return; } Assert.NotNull(actual); AssertEqual(expected.Count, actual.Count, "Properties.Count"); foreach (var kvp in expected) { Assert.Contains(kvp.Key, actual.Keys); AssertProperty((dynamic)kvp.Value, (dynamic)actual[kvp.Key]); } } internal static void AssertPropertiesList(IList? expected, IList? actual) { if (expected is null) { Assert.Null(actual); return; } Assert.NotNull(actual); AssertEqual(expected.Count, actual.Count, "Properties.Count"); foreach (var prop in expected) { Assert.Contains(actual, p => p.Name == prop.Name); var actualProp = actual.First(p => p.Name == prop.Name); AssertProperty((dynamic)prop, (dynamic)actualProp); } } private static void AssertProperty(IProperty expected, IProperty actual) { AssertEqual(expected.Type, actual.Type, "Property.Type"); AssertEqual(expected.Name, actual.Name, "Property.Name"); AssertProperties((dynamic)actual, (dynamic)expected); } private static void AssertProperty(StringProperty expected, StringProperty actual) => AssertEqual(expected.Value, actual.Value, "StringProperty.Value"); private static void AssertProperty(IntProperty expected, IntProperty actual) => AssertEqual(expected.Value, actual.Value, "IntProperty.Value"); private static void AssertProperty(FloatProperty expected, FloatProperty actual) => AssertEqual(expected.Value, actual.Value, "FloatProperty.Value"); private static void AssertProperty(BoolProperty expected, BoolProperty actual) => AssertEqual(expected.Value, actual.Value, "BoolProperty.Value"); private static void AssertProperty(ColorProperty expected, ColorProperty actual) => AssertEqual(expected.Value, actual.Value, "ColorProperty.Value"); private static void AssertProperty(FileProperty expected, FileProperty actual) => AssertEqual(expected.Value, actual.Value, "FileProperty.Value"); private static void AssertProperty(ObjectProperty expected, ObjectProperty actual) => AssertEqual(expected.Value, actual.Value, "ObjectProperty.Value"); private static void AssertProperty(ClassProperty expected, ClassProperty actual) { AssertEqual(expected.PropertyType, actual.PropertyType, "ClassProperty.PropertyType"); AssertPropertiesList(expected.Value, actual.Value); } }