| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- using System;
- using Microsoft.Xna.Framework.Graphics;
- using MonoGame.Extended.Tilemaps;
- namespace MonoGame.Extended.Tests;
- public sealed class TilemapTileTests
- {
- private Texture2D CreateDummyTexture()
- {
- // TODO: setup with xvfb later
- return null;
- }
- private TilemapTilesetCollection CreateTestTilesets()
- {
- var collection = new TilemapTilesetCollection();
- var tileset1 = new TilemapTileset("Tileset1", CreateDummyTexture(), 32, 32, 100, 10);
- tileset1.FirstGlobalId = 1;
- var tileset2 = new TilemapTileset("Tileset2", CreateDummyTexture(), 32, 32, 50, 5);
- tileset2.FirstGlobalId = 101;
- collection.Add(tileset1);
- collection.Add(tileset2);
- return collection;
- }
- [Fact]
- public void Constructor_SetsProperties()
- {
- var tile = new TilemapTile(42, TilemapTileFlipFlags.FlipHorizontally);
- Assert.Equal(42, tile.GlobalId);
- Assert.Equal(TilemapTileFlipFlags.FlipHorizontally, tile.FlipFlags);
- }
- [Fact]
- public void Constructor_DefaultFlipFlags_SetsToNone()
- {
- var tile = new TilemapTile(42);
- Assert.Equal(42, tile.GlobalId);
- Assert.Equal(TilemapTileFlipFlags.None, tile.FlipFlags);
- }
- [Fact]
- public void GetTileset_WithValidGid_ReturnsTileset()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(50);
- var tileset = tile.GetTileset(tilesets);
- Assert.NotNull(tileset);
- Assert.Equal("Tileset1", tileset.Name);
- }
- [Fact]
- public void GetTileset_WithGidInSecondTileset_ReturnsSecondTileset()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(125);
- var tileset = tile.GetTileset(tilesets);
- Assert.NotNull(tileset);
- Assert.Equal("Tileset2", tileset.Name);
- }
- [Fact]
- public void GetTileset_WithInvalidGid_ReturnsNull()
- {
- var tilesets = CreateTestTilesets();
- // Beyond any tileset
- var tile = new TilemapTile(999);
- var tileset = tile.GetTileset(tilesets);
- Assert.Null(tileset);
- }
- [Fact]
- public void GetLocalId_WithValidGid_ReturnsCorrectLocalId()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(50);
- var localId = tile.GetLocalId(tilesets);
- // Assert
- // 50 - 1 = 49
- Assert.Equal(49, localId);
- }
- [Fact]
- public void GetLocalId_WithFirstGid_ReturnsZero()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(1);
- var localId = tile.GetLocalId(tilesets);
- // Assert
- // 1 - 1 = 0
- Assert.Equal(0, localId);
- }
- [Fact]
- public void GetLocalId_WithGidInSecondTileset_ReturnsCorrectLocalId()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(125);
- var localId = tile.GetLocalId(tilesets);
- // 125 - 101 = 24
- Assert.Equal(24, localId);
- }
- [Fact]
- public void GetLocalId_WithInvalidGid_ThrowsInvalidOperationException()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(999);
- Assert.Throws<InvalidOperationException>(() => tile.GetLocalId(tilesets));
- }
- [Fact]
- public void GetLocalId_WithOutParameter_ReturnsTilesetAndLocalId()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(125);
- var localId = tile.GetLocalId(tilesets, out var tileset);
- Assert.Equal(24, localId);
- Assert.NotNull(tileset);
- Assert.Equal("Tileset2", tileset.Name);
- }
- [Fact]
- public void GetLocalId_WithOutParameter_AndInvalidGid_ThrowsException()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(999);
- Assert.Throws<InvalidOperationException>(() => tile.GetLocalId(tilesets, out _));
- }
- [Fact]
- public void GetTileData_WithValidGid_ReturnsTileData()
- {
- var tilesets = CreateTestTilesets();
- var tileData = new TilemapTileData(49) { Class = "Water" };
- tilesets[0].AddTileData(tileData);
- var tile = new TilemapTile(50); // Tileset1 FirstGlobalId=1, so localId=49
- var retrieved = tile.GetTileData(tilesets);
- Assert.NotNull(retrieved);
- Assert.Equal("Water", retrieved.Class);
- }
- [Fact]
- public void GetTileData_WithNoTileData_ReturnsNull()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(50);
- var retrieved = tile.GetTileData(tilesets);
- Assert.Null(retrieved);
- }
- [Fact]
- public void GetTileData_WithInvalidGid_ReturnsNull()
- {
- var tilesets = CreateTestTilesets();
- var tile = new TilemapTile(999);
- var retrieved = tile.GetTileData(tilesets);
- Assert.Null(retrieved);
- }
- [Theory]
- [InlineData(TilemapTileFlipFlags.None)]
- [InlineData(TilemapTileFlipFlags.FlipHorizontally)]
- [InlineData(TilemapTileFlipFlags.FlipVertically)]
- [InlineData(TilemapTileFlipFlags.FlipDiagonally)]
- [InlineData(TilemapTileFlipFlags.FlipHorizontally | TilemapTileFlipFlags.FlipVertically)]
- public void FlipFlags_PreservesValue(TilemapTileFlipFlags flags)
- {
- var tile = new TilemapTile(42, flags);
- Assert.Equal(flags, tile.FlipFlags);
- }
- }
|