chore: import upstream snapshot with attribution
This commit is contained in:
+155
@@ -0,0 +1,155 @@
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using MCPForUnity.Editor.Constants;
|
||||
using MCPForUnity.Editor.Services;
|
||||
using UnityEditor;
|
||||
|
||||
namespace MCPForUnity.Editor.Tests.EditMode.Services
|
||||
{
|
||||
[TestFixture]
|
||||
public class ToolDiscoveryServiceTests
|
||||
{
|
||||
private const string TestToolName = "test_tool_for_testing";
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
// Clean up any test preferences
|
||||
string testKey = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
if (EditorPrefs.HasKey(testKey))
|
||||
{
|
||||
EditorPrefs.DeleteKey(testKey);
|
||||
}
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
// Clean up test preferences after each test
|
||||
string testKey = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
if (EditorPrefs.HasKey(testKey))
|
||||
{
|
||||
EditorPrefs.DeleteKey(testKey);
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void SetToolEnabled_WritesToEditorPrefs()
|
||||
{
|
||||
// Arrange
|
||||
var service = new ToolDiscoveryService();
|
||||
|
||||
// Act
|
||||
service.SetToolEnabled(TestToolName, false);
|
||||
|
||||
// Assert
|
||||
string key = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
Assert.IsTrue(EditorPrefs.HasKey(key), "Preference key should exist after SetToolEnabled");
|
||||
Assert.IsFalse(EditorPrefs.GetBool(key, true), "Preference should be set to false");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsToolEnabled_ReturnsFalse_WhenToolDoesNotExist()
|
||||
{
|
||||
// Arrange - Ensure no preference exists
|
||||
string key = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
if (EditorPrefs.HasKey(key))
|
||||
{
|
||||
EditorPrefs.DeleteKey(key);
|
||||
}
|
||||
|
||||
var service = new ToolDiscoveryService();
|
||||
|
||||
// Act - For a non-existent tool, IsToolEnabled should return false
|
||||
// (since metadata.AutoRegister defaults to false for non-existent tools)
|
||||
bool result = service.IsToolEnabled(TestToolName);
|
||||
|
||||
// Assert - Non-existent tools return false (no metadata found)
|
||||
Assert.IsFalse(result, "Non-existent tool should return false");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsToolEnabled_ReturnsStoredValue_WhenPreferenceExists()
|
||||
{
|
||||
// Arrange
|
||||
string key = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
EditorPrefs.SetBool(key, false); // Store false value
|
||||
var service = new ToolDiscoveryService();
|
||||
|
||||
// Act
|
||||
bool result = service.IsToolEnabled(TestToolName);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(result, "Should return the stored preference value (false)");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsToolEnabled_ReturnsTrue_WhenPreferenceSetToTrue()
|
||||
{
|
||||
// Arrange
|
||||
string key = EditorPrefKeys.ToolEnabledPrefix + TestToolName;
|
||||
EditorPrefs.SetBool(key, true);
|
||||
var service = new ToolDiscoveryService();
|
||||
|
||||
// Act
|
||||
bool result = service.IsToolEnabled(TestToolName);
|
||||
|
||||
// Assert
|
||||
Assert.IsTrue(result, "Should return the stored preference value (true)");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ToolToggle_PersistsAcrossServiceInstances()
|
||||
{
|
||||
// Arrange
|
||||
var service1 = new ToolDiscoveryService();
|
||||
service1.SetToolEnabled(TestToolName, false);
|
||||
|
||||
// Act - Create a new service instance
|
||||
var service2 = new ToolDiscoveryService();
|
||||
bool result = service2.IsToolEnabled(TestToolName);
|
||||
|
||||
// Assert - The disabled state should persist
|
||||
Assert.IsFalse(result, "Tool state should persist across service instances");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DiscoverAllTools_DoesNotOverrideStoredFalse_ForBuiltInAutoRegisterFalseTool()
|
||||
{
|
||||
// Arrange
|
||||
var service = new ToolDiscoveryService();
|
||||
var builtInTool = service.DiscoverAllTools()
|
||||
.FirstOrDefault(tool => tool.IsBuiltIn && !tool.AutoRegister);
|
||||
|
||||
Assert.IsNotNull(builtInTool, "Expected at least one built-in tool with AutoRegister=false.");
|
||||
|
||||
string key = EditorPrefKeys.ToolEnabledPrefix + builtInTool.Name;
|
||||
bool hadOriginalKey = EditorPrefs.HasKey(key);
|
||||
bool originalValue = hadOriginalKey && EditorPrefs.GetBool(key, true);
|
||||
|
||||
try
|
||||
{
|
||||
EditorPrefs.SetBool(key, false);
|
||||
service.InvalidateCache();
|
||||
|
||||
// Act
|
||||
service.DiscoverAllTools();
|
||||
bool enabled = service.IsToolEnabled(builtInTool.Name);
|
||||
|
||||
// Assert
|
||||
Assert.IsFalse(enabled, $"Built-in tool '{builtInTool.Name}' should remain disabled when preference is false.");
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (hadOriginalKey)
|
||||
{
|
||||
EditorPrefs.SetBool(key, originalValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorPrefs.DeleteKey(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user