265 lines
8.6 KiB
C#
265 lines
8.6 KiB
C#
using NUnit.Framework;
|
|
using MCPForUnity.Editor.Services;
|
|
using MCPForUnity.Editor.Constants;
|
|
using UnityEditor;
|
|
|
|
namespace MCPForUnityTests.Editor.Services
|
|
{
|
|
/// <summary>
|
|
/// Unit tests for EditorConfigurationCache.
|
|
/// </summary>
|
|
[TestFixture]
|
|
public class EditorConfigurationCacheTests
|
|
{
|
|
private bool _originalUseHttpTransport;
|
|
private bool _originalDebugLogs;
|
|
private string _originalUvxPath;
|
|
|
|
[SetUp]
|
|
public void SetUp()
|
|
{
|
|
// Save original values
|
|
_originalUseHttpTransport = EditorPrefs.GetBool(EditorPrefKeys.UseHttpTransport, true);
|
|
_originalDebugLogs = EditorPrefs.GetBool(EditorPrefKeys.DebugLogs, false);
|
|
_originalUvxPath = EditorPrefs.GetString(EditorPrefKeys.UvxPathOverride, string.Empty);
|
|
|
|
// Refresh cache to ensure clean state
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
}
|
|
|
|
[TearDown]
|
|
public void TearDown()
|
|
{
|
|
// Restore original values
|
|
EditorPrefs.SetBool(EditorPrefKeys.UseHttpTransport, _originalUseHttpTransport);
|
|
EditorPrefs.SetBool(EditorPrefKeys.DebugLogs, _originalDebugLogs);
|
|
EditorPrefs.SetString(EditorPrefKeys.UvxPathOverride, _originalUvxPath);
|
|
|
|
// Refresh cache
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
}
|
|
|
|
#region Singleton Tests
|
|
|
|
[Test]
|
|
public void Instance_ReturnsSameInstance()
|
|
{
|
|
// Act
|
|
var instance1 = EditorConfigurationCache.Instance;
|
|
var instance2 = EditorConfigurationCache.Instance;
|
|
|
|
// Assert
|
|
Assert.AreSame(instance1, instance2, "Should return the same singleton instance");
|
|
}
|
|
|
|
[Test]
|
|
public void Instance_IsNotNull()
|
|
{
|
|
// Assert
|
|
Assert.IsNotNull(EditorConfigurationCache.Instance);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Read Tests
|
|
|
|
[Test]
|
|
public void UseHttpTransport_ReturnsEditorPrefsValue()
|
|
{
|
|
// Arrange
|
|
EditorPrefs.SetBool(EditorPrefKeys.UseHttpTransport, true);
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
|
|
// Assert
|
|
Assert.IsTrue(EditorConfigurationCache.Instance.UseHttpTransport);
|
|
|
|
// Arrange - change value
|
|
EditorPrefs.SetBool(EditorPrefKeys.UseHttpTransport, false);
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
|
|
// Assert
|
|
Assert.IsFalse(EditorConfigurationCache.Instance.UseHttpTransport);
|
|
}
|
|
|
|
[Test]
|
|
public void DebugLogs_ReturnsEditorPrefsValue()
|
|
{
|
|
// Arrange
|
|
EditorPrefs.SetBool(EditorPrefKeys.DebugLogs, true);
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
|
|
// Assert
|
|
Assert.IsTrue(EditorConfigurationCache.Instance.DebugLogs);
|
|
}
|
|
|
|
[Test]
|
|
public void UvxPathOverride_ReturnsEditorPrefsValue()
|
|
{
|
|
// Arrange
|
|
string testPath = "/custom/path/to/uvx";
|
|
EditorPrefs.SetString(EditorPrefKeys.UvxPathOverride, testPath);
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
|
|
// Assert
|
|
Assert.AreEqual(testPath, EditorConfigurationCache.Instance.UvxPathOverride);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Write Tests
|
|
|
|
[Test]
|
|
public void SetUseHttpTransport_UpdatesCacheAndEditorPrefs()
|
|
{
|
|
// Arrange
|
|
bool initialValue = EditorConfigurationCache.Instance.UseHttpTransport;
|
|
bool newValue = !initialValue;
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.SetUseHttpTransport(newValue);
|
|
|
|
// Assert - cache is updated
|
|
Assert.AreEqual(newValue, EditorConfigurationCache.Instance.UseHttpTransport);
|
|
|
|
// Assert - EditorPrefs is updated
|
|
Assert.AreEqual(newValue, EditorPrefs.GetBool(EditorPrefKeys.UseHttpTransport, !newValue));
|
|
}
|
|
|
|
[Test]
|
|
public void SetDebugLogs_UpdatesCacheAndEditorPrefs()
|
|
{
|
|
// Act
|
|
EditorConfigurationCache.Instance.SetDebugLogs(true);
|
|
|
|
// Assert
|
|
Assert.IsTrue(EditorConfigurationCache.Instance.DebugLogs);
|
|
Assert.IsTrue(EditorPrefs.GetBool(EditorPrefKeys.DebugLogs, false));
|
|
}
|
|
|
|
[Test]
|
|
public void SetUvxPathOverride_UpdatesCacheAndEditorPrefs()
|
|
{
|
|
// Arrange
|
|
string testPath = "/test/uvx/path";
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.SetUvxPathOverride(testPath);
|
|
|
|
// Assert
|
|
Assert.AreEqual(testPath, EditorConfigurationCache.Instance.UvxPathOverride);
|
|
Assert.AreEqual(testPath, EditorPrefs.GetString(EditorPrefKeys.UvxPathOverride, string.Empty));
|
|
}
|
|
|
|
[Test]
|
|
public void SetUvxPathOverride_NullBecomesEmptyString()
|
|
{
|
|
// Act
|
|
EditorConfigurationCache.Instance.SetUvxPathOverride(null);
|
|
|
|
// Assert
|
|
Assert.AreEqual(string.Empty, EditorConfigurationCache.Instance.UvxPathOverride);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Change Notification Tests
|
|
|
|
[Test]
|
|
public void SetUseHttpTransport_FiresOnConfigurationChanged()
|
|
{
|
|
// Arrange
|
|
string changedKey = null;
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged += (key) => changedKey = key;
|
|
bool initialValue = EditorConfigurationCache.Instance.UseHttpTransport;
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.SetUseHttpTransport(!initialValue);
|
|
|
|
// Assert
|
|
Assert.AreEqual(nameof(EditorConfigurationCache.UseHttpTransport), changedKey);
|
|
|
|
// Cleanup
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged -= (key) => changedKey = key;
|
|
}
|
|
|
|
[Test]
|
|
public void SetSameValue_DoesNotFireOnConfigurationChanged()
|
|
{
|
|
// Arrange
|
|
int eventCount = 0;
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged += (key) => eventCount++;
|
|
bool currentValue = EditorConfigurationCache.Instance.UseHttpTransport;
|
|
|
|
// Act - set same value
|
|
EditorConfigurationCache.Instance.SetUseHttpTransport(currentValue);
|
|
|
|
// Assert - no event fired
|
|
Assert.AreEqual(0, eventCount, "Should not fire event when value doesn't change");
|
|
|
|
// Cleanup
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged -= (key) => eventCount++;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region InvalidateKey Tests
|
|
|
|
[Test]
|
|
public void InvalidateKey_RefreshesSingleValue()
|
|
{
|
|
// Arrange
|
|
EditorConfigurationCache.Instance.SetDebugLogs(false);
|
|
Assert.IsFalse(EditorConfigurationCache.Instance.DebugLogs);
|
|
|
|
// Directly modify EditorPrefs (simulating external change)
|
|
EditorPrefs.SetBool(EditorPrefKeys.DebugLogs, true);
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.InvalidateKey(nameof(EditorConfigurationCache.DebugLogs));
|
|
|
|
// Assert
|
|
Assert.IsTrue(EditorConfigurationCache.Instance.DebugLogs);
|
|
}
|
|
|
|
[Test]
|
|
public void InvalidateKey_FiresOnConfigurationChanged()
|
|
{
|
|
// Arrange
|
|
string changedKey = null;
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged += (key) => changedKey = key;
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.InvalidateKey(nameof(EditorConfigurationCache.DebugLogs));
|
|
|
|
// Assert
|
|
Assert.AreEqual(nameof(EditorConfigurationCache.DebugLogs), changedKey);
|
|
|
|
// Cleanup
|
|
EditorConfigurationCache.Instance.OnConfigurationChanged -= (key) => changedKey = key;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Refresh Tests
|
|
|
|
[Test]
|
|
public void Refresh_UpdatesAllCachedValues()
|
|
{
|
|
// Arrange - directly set EditorPrefs
|
|
EditorPrefs.SetBool(EditorPrefKeys.UseHttpTransport, false);
|
|
EditorPrefs.SetBool(EditorPrefKeys.DebugLogs, true);
|
|
EditorPrefs.SetString(EditorPrefKeys.UvxPathOverride, "/refreshed/path");
|
|
|
|
// Act
|
|
EditorConfigurationCache.Instance.Refresh();
|
|
|
|
// Assert
|
|
Assert.IsFalse(EditorConfigurationCache.Instance.UseHttpTransport);
|
|
Assert.IsTrue(EditorConfigurationCache.Instance.DebugLogs);
|
|
Assert.AreEqual("/refreshed/path", EditorConfigurationCache.Instance.UvxPathOverride);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|