TilemapTileTests.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. using System;
  2. using Microsoft.Xna.Framework.Graphics;
  3. using MonoGame.Extended.Tilemaps;
  4. namespace MonoGame.Extended.Tests;
  5. public sealed class TilemapTileTests
  6. {
  7. private Texture2D CreateDummyTexture()
  8. {
  9. // TODO: setup with xvfb later
  10. return null;
  11. }
  12. private TilemapTilesetCollection CreateTestTilesets()
  13. {
  14. var collection = new TilemapTilesetCollection();
  15. var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
  16. tileset1.FirstGlobalId = 1;
  17. var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
  18. tileset2.FirstGlobalId = 101;
  19. collection.Add(tileset1);
  20. collection.Add(tileset2);
  21. return collection;
  22. }
  23. [Fact]
  24. public void Constructor_SetsProperties()
  25. {
  26. var tile = new TilemapTile(42, TilemapTileFlipFlags.FlipHorizontally);
  27. Assert.Equal(42, tile.GlobalId);
  28. Assert.Equal(TilemapTileFlipFlags.FlipHorizontally, tile.FlipFlags);
  29. }
  30. [Fact]
  31. public void Constructor_DefaultFlipFlags_SetsToNone()
  32. {
  33. var tile = new TilemapTile(42);
  34. Assert.Equal(42, tile.GlobalId);
  35. Assert.Equal(TilemapTileFlipFlags.None, tile.FlipFlags);
  36. }
  37. [Fact]
  38. public void GetTileset_WithValidGid_ReturnsTileset()
  39. {
  40. var tilesets = CreateTestTilesets();
  41. var tile = new TilemapTile(50);
  42. var tileset = tile.GetTileset(tilesets);
  43. Assert.NotNull(tileset);
  44. Assert.Equal("Tileset1", tileset.Name);
  45. }
  46. [Fact]
  47. public void GetTileset_WithGidInSecondTileset_ReturnsSecondTileset()
  48. {
  49. var tilesets = CreateTestTilesets();
  50. var tile = new TilemapTile(125);
  51. var tileset = tile.GetTileset(tilesets);
  52. Assert.NotNull(tileset);
  53. Assert.Equal("Tileset2", tileset.Name);
  54. }
  55. [Fact]
  56. public void GetTileset_WithInvalidGid_ReturnsNull()
  57. {
  58. var tilesets = CreateTestTilesets();
  59. // Beyond any tileset
  60. var tile = new TilemapTile(999);
  61. var tileset = tile.GetTileset(tilesets);
  62. Assert.Null(tileset);
  63. }
  64. [Fact]
  65. public void GetLocalId_WithValidGid_ReturnsCorrectLocalId()
  66. {
  67. var tilesets = CreateTestTilesets();
  68. var tile = new TilemapTile(50);
  69. var localId = tile.GetLocalId(tilesets);
  70. // Assert
  71. // 50 - 1 = 49
  72. Assert.Equal(49, localId);
  73. }
  74. [Fact]
  75. public void GetLocalId_WithFirstGid_ReturnsZero()
  76. {
  77. var tilesets = CreateTestTilesets();
  78. var tile = new TilemapTile(1);
  79. var localId = tile.GetLocalId(tilesets);
  80. // Assert
  81. // 1 - 1 = 0
  82. Assert.Equal(0, localId);
  83. }
  84. [Fact]
  85. public void GetLocalId_WithGidInSecondTileset_ReturnsCorrectLocalId()
  86. {
  87. var tilesets = CreateTestTilesets();
  88. var tile = new TilemapTile(125);
  89. var localId = tile.GetLocalId(tilesets);
  90. // 125 - 101 = 24
  91. Assert.Equal(24, localId);
  92. }
  93. [Fact]
  94. public void GetLocalId_WithInvalidGid_ThrowsInvalidOperationException()
  95. {
  96. var tilesets = CreateTestTilesets();
  97. var tile = new TilemapTile(999);
  98. Assert.Throws<InvalidOperationException>(() => tile.GetLocalId(tilesets));
  99. }
  100. [Fact]
  101. public void GetLocalId_WithOutParameter_ReturnsTilesetAndLocalId()
  102. {
  103. var tilesets = CreateTestTilesets();
  104. var tile = new TilemapTile(125);
  105. var localId = tile.GetLocalId(tilesets, out var tileset);
  106. Assert.Equal(24, localId);
  107. Assert.NotNull(tileset);
  108. Assert.Equal("Tileset2", tileset.Name);
  109. }
  110. [Fact]
  111. public void GetLocalId_WithOutParameter_AndInvalidGid_ThrowsException()
  112. {
  113. var tilesets = CreateTestTilesets();
  114. var tile = new TilemapTile(999);
  115. Assert.Throws<InvalidOperationException>(() => tile.GetLocalId(tilesets, out _));
  116. }
  117. [Fact]
  118. public void GetTileData_WithValidGid_ReturnsTileData()
  119. {
  120. var tilesets = CreateTestTilesets();
  121. var tileData = new TilemapTileData(49) { Class = "Water" };
  122. tilesets[0].AddTileData(tileData);
  123. var tile = new TilemapTile(50); // Tileset1 FirstGlobalId=1, so localId=49
  124. var retrieved = tile.GetTileData(tilesets);
  125. Assert.NotNull(retrieved);
  126. Assert.Equal("Water", retrieved.Class);
  127. }
  128. [Fact]
  129. public void GetTileData_WithNoTileData_ReturnsNull()
  130. {
  131. var tilesets = CreateTestTilesets();
  132. var tile = new TilemapTile(50);
  133. var retrieved = tile.GetTileData(tilesets);
  134. Assert.Null(retrieved);
  135. }
  136. [Fact]
  137. public void GetTileData_WithInvalidGid_ReturnsNull()
  138. {
  139. var tilesets = CreateTestTilesets();
  140. var tile = new TilemapTile(999);
  141. var retrieved = tile.GetTileData(tilesets);
  142. Assert.Null(retrieved);
  143. }
  144. [Theory]
  145. [InlineData(TilemapTileFlipFlags.None)]
  146. [InlineData(TilemapTileFlipFlags.FlipHorizontally)]
  147. [InlineData(TilemapTileFlipFlags.FlipVertically)]
  148. [InlineData(TilemapTileFlipFlags.FlipDiagonally)]
  149. [InlineData(TilemapTileFlipFlags.FlipHorizontally | TilemapTileFlipFlags.FlipVertically)]
  150. public void FlipFlags_PreservesValue(TilemapTileFlipFlags flags)
  151. {
  152. var tile = new TilemapTile(42, flags);
  153. Assert.Equal(flags, tile.FlipFlags);
  154. }
  155. }