using System.Collections; using System.Collections.Generic; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; using UnityEngine.Tilemaps; public class TestLevelManager { private ResourceTile farm; private Tilemap tilemap; const int size = 25; const int sqrt_size = 5; [SetUp] public void SetUp() { farm = ScriptableObject.CreateInstance(); farm.name = nameof(farm); tilemap = new GameObject("Tilemap").AddComponent(); for (int i = 0; i < size; i++) { var pos = new Vector3Int(i % sqrt_size, i / sqrt_size); tilemap.SetTile(pos, farm); } } [TearDown] public void TearDown() { Object.Destroy(tilemap.gameObject); } // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use // `yield return null;` to skip a frame. [UnityTest] public IEnumerator TestLevelManagerWithEnumeratorPasses() { yield return null; Assert.AreEqual(LevelManager.Instance.Count(), size, "there should be " + size + " tiles"); for (int i = 0; i < 25; i++) { var pos = new Vector3(i % sqrt_size, i / sqrt_size); var tileExists = LevelManager.Instance.Has(t => Mathf.Approximately(Vector2.Distance(pos, t.Position), 0)); Assert.True(tileExists, "there should be a tile at position " + pos); } var newPos = new Vector3Int(-5, -5); tilemap.SetTile(newPos, farm); yield return null; var newTileExists = LevelManager.Instance.Has(t => Mathf.Approximately(Vector3.Distance(t.Position, newPos), 0)); Assert.True(newTileExists, "new tile wasn't added to level manager"); } }