Use proper list assertion and add optional to some Data properties

This commit is contained in:
Daniel Cronqvist 2024-09-01 22:09:03 +02:00
parent 4fd887e7c8
commit df075eed8d
4 changed files with 12 additions and 20 deletions

View file

@ -18,13 +18,7 @@ public static partial class DotTiledAssert
// Data // Data
AssertEqual(expected.GlobalTileIDs, actual.GlobalTileIDs, nameof(Data.GlobalTileIDs)); AssertEqual(expected.GlobalTileIDs, actual.GlobalTileIDs, nameof(Data.GlobalTileIDs));
AssertEqual(expected.FlippingFlags, actual.FlippingFlags, nameof(Data.FlippingFlags)); AssertEqual(expected.FlippingFlags, actual.FlippingFlags, nameof(Data.FlippingFlags));
AssertOptionalsEqual(expected.Chunks, actual.Chunks, nameof(Data.Chunks), (a, b) => AssertListOrdered(a, b, nameof(Chunk), AssertChunk));
if (expected.Chunks.HasValue)
{
AssertEqual(expected.Chunks.Value.Length, actual.Chunks.Value.Length, "Chunks.Length");
for (var i = 0; i < expected.Chunks.Value.Length; i++)
AssertChunk(expected.Chunks.Value[i], actual.Chunks.Value[i]);
}
} }
private static void AssertChunk(Chunk expected, Chunk actual) private static void AssertChunk(Chunk expected, Chunk actual)

View file

@ -130,12 +130,12 @@ public class Data
/// To get an actual tile ID, you map it to a local tile ID using the correct tileset. Please refer to /// To get an actual tile ID, you map it to a local tile ID using the correct tileset. Please refer to
/// <see href="https://doc.mapeditor.org/en/stable/reference/global-tile-ids/#mapping-a-gid-to-a-local-tile-id">the documentation on how to do this</see>. /// <see href="https://doc.mapeditor.org/en/stable/reference/global-tile-ids/#mapping-a-gid-to-a-local-tile-id">the documentation on how to do this</see>.
/// </summary> /// </summary>
public uint[] GlobalTileIDs { get; set; } public Optional<uint[]> GlobalTileIDs { get; set; } = Optional<uint[]>.Empty;
/// <summary> /// <summary>
/// The parsed flipping flags for each tile in the layer. Appear in the same order as the tiles in the layer in <see cref="GlobalTileIDs"/>. /// The parsed flipping flags for each tile in the layer. Appear in the same order as the tiles in the layer in <see cref="GlobalTileIDs"/>.
/// </summary> /// </summary>
public FlippingFlags[] FlippingFlags { get; set; } public Optional<FlippingFlags[]> FlippingFlags { get; set; } = Optional<FlippingFlags[]>.Empty;
/// <summary> /// <summary>
/// If the map is infinite, it will instead contain a list of chunks. /// If the map is infinite, it will instead contain a list of chunks.

View file

@ -13,9 +13,7 @@ public abstract partial class TmjReaderBase
{ {
Chunks = chunks, Chunks = chunks,
Compression = compression, Compression = compression,
Encoding = encoding, Encoding = encoding
FlippingFlags = null,
GlobalTileIDs = null
}; };
} }
@ -34,8 +32,8 @@ public abstract partial class TmjReaderBase
Y = y, Y = y,
Width = width, Width = width,
Height = height, Height = height,
GlobalTileIDs = data.GlobalTileIDs!, GlobalTileIDs = data.GlobalTileIDs,
FlippingFlags = data.FlippingFlags! FlippingFlags = data.FlippingFlags
}; };
} }
@ -46,7 +44,7 @@ public abstract partial class TmjReaderBase
// Array of uint // Array of uint
var data = element.GetValueAsList<uint>(e => e.GetValueAs<uint>()).ToArray(); var data = element.GetValueAsList<uint>(e => e.GetValueAs<uint>()).ToArray();
var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data); var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data);
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags };
} }
else if (encoding == DataEncoding.Base64) else if (encoding == DataEncoding.Base64)
{ {
@ -56,7 +54,7 @@ public abstract partial class TmjReaderBase
{ {
var data = Helpers.ReadBytesAsInt32Array(base64Data); var data = Helpers.ReadBytesAsInt32Array(base64Data);
var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data); var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data);
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags };
} }
using var stream = new MemoryStream(base64Data); using var stream = new MemoryStream(base64Data);
@ -70,7 +68,7 @@ public abstract partial class TmjReaderBase
{ {
var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(decompressed); var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(decompressed);
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags };
} }
} }

View file

@ -30,7 +30,7 @@ public abstract partial class TmxReaderBase
var chunks = _reader var chunks = _reader
.ReadList("data", "chunk", (r) => ReadChunk(encoding, compression)) .ReadList("data", "chunk", (r) => ReadChunk(encoding, compression))
.ToArray(); .ToArray();
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = null, Chunks = chunks }; return new Data { Encoding = encoding, Compression = compression, Chunks = chunks };
} }
var usesTileChildrenInsteadOfRawData = !encoding.HasValue && !compression.HasValue; var usesTileChildrenInsteadOfRawData = !encoding.HasValue && !compression.HasValue;
@ -38,12 +38,12 @@ public abstract partial class TmxReaderBase
{ {
var tileChildrenGlobalTileIDsWithFlippingFlags = ReadTileChildrenInWrapper("data", _reader); var tileChildrenGlobalTileIDsWithFlippingFlags = ReadTileChildrenInWrapper("data", _reader);
var (tileChildrenGlobalTileIDs, tileChildrenFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(tileChildrenGlobalTileIDsWithFlippingFlags); var (tileChildrenGlobalTileIDs, tileChildrenFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(tileChildrenGlobalTileIDsWithFlippingFlags);
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = tileChildrenGlobalTileIDs, FlippingFlags = tileChildrenFlippingFlags, Chunks = null }; return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = tileChildrenGlobalTileIDs, FlippingFlags = tileChildrenFlippingFlags };
} }
var rawDataGlobalTileIDsWithFlippingFlags = ReadRawData(_reader, encoding, compression); var rawDataGlobalTileIDsWithFlippingFlags = ReadRawData(_reader, encoding, compression);
var (rawDataGlobalTileIDs, rawDataFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(rawDataGlobalTileIDsWithFlippingFlags); var (rawDataGlobalTileIDs, rawDataFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(rawDataGlobalTileIDsWithFlippingFlags);
return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = rawDataGlobalTileIDs, FlippingFlags = rawDataFlippingFlags, Chunks = null }; return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = rawDataGlobalTileIDs, FlippingFlags = rawDataFlippingFlags };
} }
internal static (uint[] GlobalTileIDs, FlippingFlags[] FlippingFlags) ReadAndClearFlippingFlagsFromGIDs(uint[] globalTileIDs) internal static (uint[] GlobalTileIDs, FlippingFlags[] FlippingFlags) ReadAndClearFlippingFlagsFromGIDs(uint[] globalTileIDs)