93 lines
3.6 KiB
C#
93 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Newtonsoft.Json.Linq;
|
|
using NUnit.Framework;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
using MCPForUnity.Editor.Tools;
|
|
using MCPForUnity.Editor.Helpers;
|
|
|
|
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<bool>("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<bool>("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<bool>("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<bool>("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.");
|
|
}
|
|
|
|
private static JObject ToJObject(object result)
|
|
{
|
|
if (result == null)
|
|
{
|
|
Assert.Fail("ReadConsole.HandleCommand returned null.");
|
|
return new JObject(); // Unreachable, but satisfies return type.
|
|
}
|
|
|
|
return result as JObject ?? JObject.FromObject(result);
|
|
}
|
|
}
|
|
}
|