From 9133f8887cd0ba2be004858a4ebfec7ecfe1e36f Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Mon, 2 Sep 2024 21:11:31 +0200 Subject: [PATCH 1/6] Add loader to make it easier to start using library --- .editorconfig | 1 + src/DotTiled.Tests/DotTiled.Tests.csproj | 1 + .../DefaultResourceCacheTests.cs | 78 ++++++ .../Serialization/LoaderTests.cs | 258 ++++++++++++++++++ src/DotTiled/Optional.cs | 5 + .../Serialization/DefaultResourceCache.cs | 36 +++ .../Serialization/FileSystemResourceReader.cs | 21 ++ src/DotTiled/Serialization/IResourceCache.cs | 35 +++ src/DotTiled/Serialization/IResourceReader.cs | 14 + src/DotTiled/Serialization/Loader.cs | 102 +++++++ 10 files changed, 551 insertions(+) create mode 100644 src/DotTiled.Tests/Serialization/DefaultResourceCacheTests.cs create mode 100644 src/DotTiled.Tests/Serialization/LoaderTests.cs create mode 100644 src/DotTiled/Serialization/DefaultResourceCache.cs create mode 100644 src/DotTiled/Serialization/FileSystemResourceReader.cs create mode 100644 src/DotTiled/Serialization/IResourceCache.cs create mode 100644 src/DotTiled/Serialization/IResourceReader.cs create mode 100644 src/DotTiled/Serialization/Loader.cs diff --git a/.editorconfig b/.editorconfig index 71746d2..63da728 100644 --- a/.editorconfig +++ b/.editorconfig @@ -235,6 +235,7 @@ dotnet_diagnostic.IDE0004.severity = silent dotnet_diagnostic.IDE0005.severity = error dotnet_diagnostic.IDE0008.severity = silent dotnet_diagnostic.IDE0055.severity = silent +dotnet_diagnostic.IDE0058.severity = silent dotnet_diagnostic.IDE0160.severity = none dotnet_diagnostic.CA1707.severity = silent dotnet_diagnostic.CA1852.severity = none diff --git a/src/DotTiled.Tests/DotTiled.Tests.csproj b/src/DotTiled.Tests/DotTiled.Tests.csproj index eff4ec8..45d8f5a 100644 --- a/src/DotTiled.Tests/DotTiled.Tests.csproj +++ b/src/DotTiled.Tests/DotTiled.Tests.csproj @@ -11,6 +11,7 @@ + diff --git a/src/DotTiled.Tests/Serialization/DefaultResourceCacheTests.cs b/src/DotTiled.Tests/Serialization/DefaultResourceCacheTests.cs new file mode 100644 index 0000000..6108833 --- /dev/null +++ b/src/DotTiled.Tests/Serialization/DefaultResourceCacheTests.cs @@ -0,0 +1,78 @@ +using DotTiled.Serialization; + +namespace DotTiled.Tests; + +public class DefaultResourceCacheTests +{ + [Fact] + public void GetTemplate_TemplateDoesNotExist_ReturnsEmptyOptional() + { + // Arrange + var cache = new DefaultResourceCache(); + var path = "template.tsx"; + + // Act + var result = cache.GetTemplate(path); + + // Assert + Assert.False(result.HasValue); + } + + [Fact] + public void GetTemplate_TemplateHasBeenInserted_ReturnsTemplate() + { + // Arrange + var cache = new DefaultResourceCache(); + var path = "template.tsx"; + var template = new Template + { + Object = new EllipseObject { } + }; + + // Act + cache.InsertTemplate(path, template); + var result = cache.GetTemplate(path); + + // Assert + Assert.True(result.HasValue); + Assert.Same(template, result.Value); + } + + [Fact] + public void GetTileset_TilesetDoesNotExist_ReturnsEmptyOptional() + { + // Arrange + var cache = new DefaultResourceCache(); + var path = "tileset.tsx"; + + // Act + var result = cache.GetTileset(path); + + // Assert + Assert.False(result.HasValue); + } + + [Fact] + public void GetTileset_TilesetHasBeenInserted_ReturnsTileset() + { + // Arrange + var cache = new DefaultResourceCache(); + var path = "tileset.tsx"; + var tileset = new Tileset + { + Name = "Tileset", + TileWidth = 32, + TileHeight = 32, + TileCount = 1, + Columns = 1 + }; + + // Act + cache.InsertTileset(path, tileset); + var result = cache.GetTileset(path); + + // Assert + Assert.True(result.HasValue); + Assert.Same(tileset, result.Value); + } +} diff --git a/src/DotTiled.Tests/Serialization/LoaderTests.cs b/src/DotTiled.Tests/Serialization/LoaderTests.cs new file mode 100644 index 0000000..41fa38b --- /dev/null +++ b/src/DotTiled.Tests/Serialization/LoaderTests.cs @@ -0,0 +1,258 @@ +using System.Numerics; +using System.Runtime.CompilerServices; +using NSubstitute; + +namespace DotTiled.Tests; + +public class LoaderTests +{ + [Fact] + public void LoadMap_Always_ReadsFromResourceReader() + { + // 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 + loader.LoadMap("map.tmx"); + + // Assert + resourceReader.Received(1).Read("map.tmx"); + } + + [Fact] + public void LoadMap_MapReferencesExternalTileset_ReadsTilesetFromResourceReaderAndAttemptsToRetrieveFromCache() + { + // 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 + + + + """); + + resourceReader.Read("tileset.tsx").Returns( + """ + + + + + + + """); + + var resourceCache = Substitute.For(); + resourceCache.GetTileset(Arg.Any()).Returns(Optional.Empty); + resourceCache.GetTemplate(Arg.Any()).Returns(Optional