Skip to main content
Glama
ComponentResolverTests.cs6.73 kB
using System; using NUnit.Framework; using UnityEngine; using MCPForUnity.Editor.Tools; namespace MCPForUnityTests.Editor.Tools { public class ComponentResolverTests { [Test] public void TryResolve_ReturnsTrue_ForBuiltInComponentShortName() { bool result = ComponentResolver.TryResolve("Transform", out Type type, out string error); Assert.IsTrue(result, "Should resolve Transform component"); Assert.AreEqual(typeof(Transform), type, "Should return correct Transform type"); Assert.IsEmpty(error, "Should have no error message"); } [Test] public void TryResolve_ReturnsTrue_ForBuiltInComponentFullyQualifiedName() { bool result = ComponentResolver.TryResolve("UnityEngine.Rigidbody", out Type type, out string error); Assert.IsTrue(result, "Should resolve UnityEngine.Rigidbody component"); Assert.AreEqual(typeof(Rigidbody), type, "Should return correct Rigidbody type"); Assert.IsEmpty(error, "Should have no error message"); } [Test] public void TryResolve_ReturnsTrue_ForCustomComponentShortName() { bool result = ComponentResolver.TryResolve("CustomComponent", out Type type, out string error); Assert.IsTrue(result, "Should resolve CustomComponent"); Assert.IsNotNull(type, "Should return valid type"); Assert.AreEqual("CustomComponent", type.Name, "Should have correct type name"); Assert.IsTrue(typeof(Component).IsAssignableFrom(type), "Should be a Component type"); Assert.IsEmpty(error, "Should have no error message"); } [Test] public void TryResolve_ReturnsTrue_ForCustomComponentFullyQualifiedName() { bool result = ComponentResolver.TryResolve("TestNamespace.CustomComponent", out Type type, out string error); Assert.IsTrue(result, "Should resolve TestNamespace.CustomComponent"); Assert.IsNotNull(type, "Should return valid type"); Assert.AreEqual("CustomComponent", type.Name, "Should have correct type name"); Assert.AreEqual("TestNamespace.CustomComponent", type.FullName, "Should have correct full name"); Assert.IsTrue(typeof(Component).IsAssignableFrom(type), "Should be a Component type"); Assert.IsEmpty(error, "Should have no error message"); } [Test] public void TryResolve_ReturnsFalse_ForNonExistentComponent() { bool result = ComponentResolver.TryResolve("NonExistentComponent", out Type type, out string error); Assert.IsFalse(result, "Should not resolve non-existent component"); Assert.IsNull(type, "Should return null type"); Assert.IsNotEmpty(error, "Should have error message"); Assert.That(error, Does.Contain("not found"), "Error should mention component not found"); } [Test] public void TryResolve_ReturnsFalse_ForEmptyString() { bool result = ComponentResolver.TryResolve("", out Type type, out string error); Assert.IsFalse(result, "Should not resolve empty string"); Assert.IsNull(type, "Should return null type"); Assert.IsNotEmpty(error, "Should have error message"); } [Test] public void TryResolve_ReturnsFalse_ForNullString() { bool result = ComponentResolver.TryResolve(null, out Type type, out string error); Assert.IsFalse(result, "Should not resolve null string"); Assert.IsNull(type, "Should return null type"); Assert.IsNotEmpty(error, "Should have error message"); Assert.That(error, Does.Contain("null or empty"), "Error should mention null or empty"); } [Test] public void TryResolve_CachesResolvedTypes() { // First call bool result1 = ComponentResolver.TryResolve("Transform", out Type type1, out string error1); // Second call should use cache bool result2 = ComponentResolver.TryResolve("Transform", out Type type2, out string error2); Assert.IsTrue(result1, "First call should succeed"); Assert.IsTrue(result2, "Second call should succeed"); Assert.AreSame(type1, type2, "Should return same type instance (cached)"); Assert.IsEmpty(error1, "First call should have no error"); Assert.IsEmpty(error2, "Second call should have no error"); } [Test] public void TryResolve_PrefersPlayerAssemblies() { // Test that custom user scripts (in Player assemblies) are found bool result = ComponentResolver.TryResolve("CustomComponent", out Type type, out string error); Assert.IsTrue(result, "Should resolve user script from Player assembly"); Assert.IsNotNull(type, "Should return valid type"); // Verify it's not from an Editor assembly by checking the assembly name string assemblyName = type.Assembly.GetName().Name; Assert.That(assemblyName, Does.Not.Contain("Editor"), "User script should come from Player assembly, not Editor assembly"); // Verify it's from the TestAsmdef assembly (which is a Player assembly) Assert.AreEqual("TestAsmdef", assemblyName, "CustomComponent should be resolved from TestAsmdef assembly"); } [Test] public void TryResolve_HandlesDuplicateNames_WithAmbiguityError() { // This test would need duplicate component names to be meaningful // For now, test with a built-in component that should not have duplicates bool result = ComponentResolver.TryResolve("Transform", out Type type, out string error); Assert.IsTrue(result, "Transform should resolve uniquely"); Assert.AreEqual(typeof(Transform), type, "Should return correct type"); Assert.IsEmpty(error, "Should have no ambiguity error"); } [Test] public void ResolvedType_IsValidComponent() { bool result = ComponentResolver.TryResolve("Rigidbody", out Type type, out string error); Assert.IsTrue(result, "Should resolve Rigidbody"); Assert.IsTrue(typeof(Component).IsAssignableFrom(type), "Resolved type should be assignable from Component"); Assert.IsTrue(typeof(MonoBehaviour).IsAssignableFrom(type) || typeof(Component).IsAssignableFrom(type), "Should be a valid Unity component"); } } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CoplayDev/unity-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server