using System; using Newtonsoft.Json.Linq; using NUnit.Framework; using UnityEngine; using MCPForUnity.Editor.Tools; using static MCPForUnityTests.Editor.TestUtilities; namespace MCPForUnityTests.Editor.Tools { public class ReadConsoleTests { [Test] public void HandleCommand_Clear_Works() { // Arrange // Ensure there's something to clear Debug.Log("Log to clear"); // Verify content exists before clear var getBefore = ToJObject(ReadConsole.HandleCommand(new JObject { ["action"] = "get", ["types"] = new JArray { "error", "warning", "log" }, ["count"] = 10 })); Assert.IsTrue(getBefore.Value("success"), getBefore.ToString()); var entriesBefore = getBefore["data"] as JArray; // Ideally we'd assert count > 0, but other tests/system logs might affect this. // Just ensuring the call doesn't fail is a baseline, but let's try to be stricter if possible. // Since we just logged, there should be at least one entry. Assert.IsTrue(entriesBefore != null && entriesBefore.Count > 0, "Setup failed: console should have logs."); // Act var result = ToJObject(ReadConsole.HandleCommand(new JObject { ["action"] = "clear" })); // Assert Assert.IsTrue(result.Value("success"), result.ToString()); // Verify clear effect var getAfter = ToJObject(ReadConsole.HandleCommand(new JObject { ["action"] = "get", ["types"] = new JArray { "error", "warning", "log" }, ["count"] = 10 })); Assert.IsTrue(getAfter.Value("success"), getAfter.ToString()); var entriesAfter = getAfter["data"] as JArray; Assert.IsTrue(entriesAfter == null || entriesAfter.Count == 0, "Console should be empty after clear."); } [Test] public void HandleCommand_Get_Works() { // Arrange string uniqueMessage = $"Test Log Message {Guid.NewGuid()}"; Debug.Log(uniqueMessage); var paramsObj = new JObject { ["action"] = "get", ["types"] = new JArray { "error", "warning", "log" }, ["format"] = "detailed", ["count"] = 1000 // Fetch enough to likely catch our message }; // Act var result = ToJObject(ReadConsole.HandleCommand(paramsObj)); // Assert Assert.IsTrue(result.Value("success"), result.ToString()); var data = result["data"] as JArray; Assert.IsNotNull(data, "Data array should not be null."); Assert.IsTrue(data.Count > 0, "Should retrieve at least one log entry."); // Verify content bool found = false; foreach (var entry in data) { if (entry["message"]?.ToString().Contains(uniqueMessage) == true) { found = true; break; } } Assert.IsTrue(found, $"The unique log message '{uniqueMessage}' was not found in retrieved logs."); } } }