diff --git a/src/DotTiled.Tests/UnitTests/Serialization/LoaderTests.cs b/src/DotTiled.Tests/UnitTests/Serialization/LoaderTests.cs index daf0733..d54ab9f 100644 --- a/src/DotTiled.Tests/UnitTests/Serialization/LoaderTests.cs +++ b/src/DotTiled.Tests/UnitTests/Serialization/LoaderTests.cs @@ -244,4 +244,72 @@ public class LoaderTests // Assert resourceReader.DidNotReceive().Read("template.tx"); } + + [Fact] + public void LoadMap_MapHasClassAndLoaderHasNoCustomTypes_ThrowsException() + { + // Arrange + var resourceReader = Substitute.For(); + resourceReader.Read("map.tmx").Returns( + """ + + + + + 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 + + + + """); + + var resourceCache = Substitute.For(); + var customTypeDefinitions = Enumerable.Empty(); + var loader = new Loader(resourceReader, resourceCache, customTypeDefinitions); + + // Act & Assert + Assert.Throws(() => loader.LoadMap("map.tmx")); + } + + [Fact] + public void LoadMap_MapHasClassAndLoaderHasCustomTypeWithSameName_ReturnsMapWithPropertiesFromCustomClass() + { + // Arrange + var resourceReader = Substitute.For(); + resourceReader.Read("map.tmx").Returns( + """ + + + + + 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 + + + + """); + var resourceCache = Substitute.For(); + var customClassDefinition = new CustomClassDefinition + { + Name = "TestClass", + UseAs = CustomClassUseAs.All, + Members = [ + new StringProperty { Name = "Test1", Value = "Hello" }, + new IntProperty { Name = "Test2", Value = 42 } + ] + }; + var loader = new Loader(resourceReader, resourceCache, [customClassDefinition]); + + // Act + var result = loader.LoadMap("map.tmx"); + + // Assert + DotTiledAssert.AssertProperties(customClassDefinition.Members, result.Properties); + } }