using System.Collections; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; namespace MCPForUnityTests.PlayMode { /// /// Basic PlayMode tests to verify the MCP test runner handles PlayMode correctly. /// These tests exercise coroutine-based testing which requires Play mode. /// public class PlayModeBasicTests { [UnityTest] public IEnumerator GameObjectCreation_InPlayMode_Succeeds() { var go = new GameObject("TestObject"); Assert.IsNotNull(go); Assert.AreEqual("TestObject", go.name); yield return null; // Wait one frame Assert.IsTrue(go != null); // Still exists after frame Object.Destroy(go); } [UnityTest] public IEnumerator WaitForSeconds_CompletesAfterDelay() { float startTime = Time.time; yield return new WaitForSeconds(0.1f); float elapsed = Time.time - startTime; Assert.GreaterOrEqual(elapsed, 0.09f, "Should have waited at least 0.09 seconds"); } [UnityTest] public IEnumerator MultipleFrames_ProgressCorrectly() { int frameCount = Time.frameCount; yield return null; yield return null; yield return null; int newFrameCount = Time.frameCount; Assert.Greater(newFrameCount, frameCount, "Frame count should have advanced"); } [UnityTest] public IEnumerator Component_AddAndRemove_InPlayMode() { var go = new GameObject("ComponentTest"); yield return null; var rb = go.AddComponent(); Assert.IsNotNull(rb); Assert.IsTrue(go.GetComponent() != null); yield return null; Object.Destroy(rb); yield return null; Assert.IsTrue(go.GetComponent() == null); Object.Destroy(go); } [UnityTest] public IEnumerator Coroutine_CanYieldMultipleTimes() { int counter = 0; for (int i = 0; i < 5; i++) { counter++; yield return null; } Assert.AreEqual(5, counter); } } }