TilemapTilesetCollectionTests.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using System;
  2. using System.Linq;
  3. using Microsoft.Xna.Framework.Graphics;
  4. using MonoGame.Extended.Tilemaps;
  5. namespace MonoGame.Extended.Tests;
  6. public sealed class TilemapTilesetCollectionTests
  7. {
  8. private Texture2D CreateDummyTexture()
  9. {
  10. // TODO: setup with xvfb later
  11. return null;
  12. }
  13. [Fact]
  14. public void Count_InitiallyZero()
  15. {
  16. var collection = new TilemapTilesetCollection();
  17. Assert.Empty(collection);
  18. }
  19. [Fact]
  20. public void Indexer_ReturnsCorrectTileset()
  21. {
  22. var collection = new TilemapTilesetCollection();
  23. var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
  24. var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
  25. collection.Add(tileset1);
  26. collection.Add(tileset2);
  27. Assert.Equal(tileset1, collection[0]);
  28. Assert.Equal(tileset2, collection[1]);
  29. }
  30. [Fact]
  31. public void GetTilesetForGid_WithSingleTileset_ReturnsCorrectTileset()
  32. {
  33. var collection = new TilemapTilesetCollection();
  34. var tileset = new TilemapTileset("Tileset", CreateDummyTexture(), 32, 32, 100, 10);
  35. tileset.FirstGlobalId = 1;
  36. collection.Add(tileset);
  37. var result = collection.GetTilesetForGid(50);
  38. Assert.Equal(tileset, result);
  39. }
  40. [Fact]
  41. public void GetTilesetForGid_WithMultipleTilesets_ReturnsCorrectTileset()
  42. {
  43. var collection = new TilemapTilesetCollection();
  44. var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
  45. tileset1.FirstGlobalId = 1;
  46. var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
  47. // After tileset1
  48. tileset2.FirstGlobalId = 101;
  49. var tileset3 = new TilemapTileset("Tileset3", CreateDummyTexture(), 32, 32, 25, 5);
  50. // After tileset2
  51. tileset3.FirstGlobalId = 151;
  52. collection.Add(tileset1);
  53. collection.Add(tileset2);
  54. collection.Add(tileset3);
  55. Assert.Equal(tileset1, collection.GetTilesetForGid(1)); // Fist tile of tileset1
  56. Assert.Equal(tileset1, collection.GetTilesetForGid(50)); // Mid tileset 1
  57. Assert.Equal(tileset1, collection.GetTilesetForGid(100)); // Last tile of tileset1
  58. Assert.Equal(tileset2, collection.GetTilesetForGid(101)); // First tile of tileset2
  59. Assert.Equal(tileset2, collection.GetTilesetForGid(125)); // Mid of tileset2
  60. Assert.Equal(tileset2, collection.GetTilesetForGid(150)); // Last tile of tileset2
  61. Assert.Equal(tileset3, collection.GetTilesetForGid(151)); // First tile of tileset3
  62. Assert.Equal(tileset3, collection.GetTilesetForGid(175)); // Last tile of tileset3
  63. }
  64. [Fact]
  65. public void GetTilesetForGid_WithGidBeforeFirstTileset_ReturnsNull()
  66. {
  67. var collection = new TilemapTilesetCollection();
  68. var tileset = new TilemapTileset("Tileset", CreateDummyTexture(), 32, 32, 100, 10);
  69. tileset.FirstGlobalId = 10;
  70. collection.Add(tileset);
  71. var result = collection.GetTilesetForGid(5);
  72. Assert.Null(result);
  73. }
  74. [Fact]
  75. public void GetTilesetForGid_WithEmptyCollection_ReturnsNull()
  76. {
  77. var collection = new TilemapTilesetCollection();
  78. var result = collection.GetTilesetForGid(1);
  79. Assert.Null(result);
  80. }
  81. [Fact]
  82. public void GetLocalId_WithValidGid_ReturnsCorrectLocalId()
  83. {
  84. var collection = new TilemapTilesetCollection();
  85. var tileset = new TilemapTileset("Tileset", CreateDummyTexture(), 32, 32, 100, 10);
  86. tileset.FirstGlobalId = 1;
  87. collection.Add(tileset);
  88. var localId = collection.GetLocalId(50, out var outTileset);
  89. // 50 - 1 = 49
  90. Assert.Equal(49, localId);
  91. Assert.Equal(tileset, outTileset);
  92. }
  93. [Fact]
  94. public void GetLocalId_WithFirstGid_ReturnsZero()
  95. {
  96. var collection = new TilemapTilesetCollection();
  97. var tileset = new TilemapTileset("Tileset", CreateDummyTexture(), 32, 32, 100, 10);
  98. tileset.FirstGlobalId = 100;
  99. collection.Add(tileset);
  100. var localId = collection.GetLocalId(100, out var outTileset);
  101. // 100 - 100 = 0
  102. Assert.Equal(0, localId);
  103. Assert.Equal(tileset, outTileset);
  104. }
  105. [Fact]
  106. public void GetLocalId_WithMultipleTilesets_ReturnsCorrectLocalId()
  107. {
  108. var collection = new TilemapTilesetCollection();
  109. var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
  110. tileset1.FirstGlobalId = 1;
  111. var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
  112. tileset2.FirstGlobalId = 101;
  113. collection.Add(tileset1);
  114. collection.Add(tileset2);
  115. var localId1 = collection.GetLocalId(50, out var outTileset1);
  116. var localId2 = collection.GetLocalId(125, out var outTileset2);
  117. // Assert
  118. Assert.Equal(49, localId1);
  119. Assert.Equal(tileset1, outTileset1);
  120. Assert.Equal(24, localId2);
  121. Assert.Equal(tileset2, outTileset2);
  122. }
  123. [Fact]
  124. public void GetLocalId_WithInvalidGid_ThrowsInvalidOperationException()
  125. {
  126. var collection = new TilemapTilesetCollection();
  127. var tileset = new TilemapTileset("Tileset", CreateDummyTexture(), 32, 32, 100, 10);
  128. tileset.FirstGlobalId = 10;
  129. collection.Add(tileset);
  130. Assert.Throws<InvalidOperationException>(() => collection.GetLocalId(5, out _));
  131. }
  132. [Fact]
  133. public void Enumeration_ReturnsAllTilesets()
  134. {
  135. var collection = new TilemapTilesetCollection();
  136. var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
  137. var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
  138. collection.Add(tileset1);
  139. collection.Add(tileset2);
  140. var list = collection.ToList();
  141. Assert.Equal(2, list.Count);
  142. Assert.Contains(tileset1, list);
  143. Assert.Contains(tileset2, list);
  144. }
  145. }