Skip to main content
Glama
Singtaa
by Singtaa
TransformToolsTests.cs8.17 kB
using Newtonsoft.Json.Linq; using NUnit.Framework; using UnityEditor.SceneManagement; using UnityEngine; namespace UnityMcp.Tests { [TestFixture] public class TransformToolsTests { GameObject _testObject; [SetUp] public void SetUp() { EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); _testObject = new GameObject("TestObject"); } [TearDown] public void TearDown() { if (_testObject != null) { Object.DestroyImmediate(_testObject); } } [Test] public void Get_WorldSpace_ReturnsWorldValues() { _testObject.transform.position = new Vector3(1, 2, 3); var args = new JObject { ["target"] = "TestObject", ["space"] = "world" }; var result = Tools_Transform.Get(args); Assert.IsFalse(result.isError); var json = JObject.Parse(result.content[0].text); Assert.AreEqual("world", (string)json["space"]); var pos = json["position"] as JArray; Assert.AreEqual(1f, (float)pos[0], 0.001f); Assert.AreEqual(2f, (float)pos[1], 0.001f); Assert.AreEqual(3f, (float)pos[2], 0.001f); } [Test] public void Get_LocalSpace_ReturnsLocalValues() { var parent = new GameObject("Parent"); parent.transform.position = new Vector3(10, 0, 0); _testObject.transform.SetParent(parent.transform); _testObject.transform.localPosition = new Vector3(1, 2, 3); var args = new JObject { ["target"] = "TestObject", ["space"] = "local" }; var result = Tools_Transform.Get(args); Assert.IsFalse(result.isError); var json = JObject.Parse(result.content[0].text); Assert.AreEqual("local", (string)json["space"]); var pos = json["position"] as JArray; Assert.AreEqual(1f, (float)pos[0], 0.001f); Assert.AreEqual(2f, (float)pos[1], 0.001f); Assert.AreEqual(3f, (float)pos[2], 0.001f); Object.DestroyImmediate(parent); } [Test] public void Set_Position_MovesObject() { var args = new JObject { ["target"] = "TestObject", ["position"] = new JArray { 5, 10, 15 } }; var result = Tools_Transform.Set(args); Assert.IsFalse(result.isError); Assert.AreEqual(new Vector3(5, 10, 15), _testObject.transform.localPosition); } [Test] public void Set_Rotation_RotatesObject() { var args = new JObject { ["target"] = "TestObject", ["rotation"] = new JArray { 0, 90, 0 } }; var result = Tools_Transform.Set(args); Assert.IsFalse(result.isError); Assert.AreEqual(90f, _testObject.transform.localEulerAngles.y, 0.001f); } [Test] public void Set_Scale_ScalesObject() { var args = new JObject { ["target"] = "TestObject", ["scale"] = new JArray { 2, 3, 4 } }; var result = Tools_Transform.Set(args); Assert.IsFalse(result.isError); Assert.AreEqual(new Vector3(2, 3, 4), _testObject.transform.localScale); } [Test] public void Translate_World_MovesInWorldSpace() { _testObject.transform.position = Vector3.zero; _testObject.transform.rotation = Quaternion.Euler(0, 90, 0); var args = new JObject { ["target"] = "TestObject", ["delta"] = new JArray { 1, 0, 0 }, ["space"] = "world" }; var result = Tools_Transform.Translate(args); Assert.IsFalse(result.isError); Assert.AreEqual(1f, _testObject.transform.position.x, 0.001f); } [Test] public void Translate_Self_MovesInLocalSpace() { _testObject.transform.position = Vector3.zero; _testObject.transform.rotation = Quaternion.Euler(0, 90, 0); var args = new JObject { ["target"] = "TestObject", ["delta"] = new JArray { 1, 0, 0 }, ["space"] = "self" }; var result = Tools_Transform.Translate(args); Assert.IsFalse(result.isError); // Moving forward (local X) when rotated 90 degrees should move in world Z Assert.AreEqual(1f, _testObject.transform.position.z, 0.001f); } [Test] public void Rotate_World_RotatesInWorldSpace() { _testObject.transform.rotation = Quaternion.identity; var args = new JObject { ["target"] = "TestObject", ["euler"] = new JArray { 0, 45, 0 }, ["space"] = "world" }; var result = Tools_Transform.Rotate(args); Assert.IsFalse(result.isError); Assert.AreEqual(45f, _testObject.transform.eulerAngles.y, 0.001f); } [Test] public void Reset_ClearsTransform() { _testObject.transform.localPosition = new Vector3(1, 2, 3); _testObject.transform.localRotation = Quaternion.Euler(45, 45, 45); _testObject.transform.localScale = new Vector3(2, 2, 2); var args = new JObject { ["target"] = "TestObject" }; var result = Tools_Transform.Reset(args); Assert.IsFalse(result.isError); Assert.AreEqual(Vector3.zero, _testObject.transform.localPosition); Assert.AreEqual(Quaternion.identity, _testObject.transform.localRotation); Assert.AreEqual(Vector3.one, _testObject.transform.localScale); } [Test] public void Reset_PartialReset_OnlyResetsSpecified() { _testObject.transform.localPosition = new Vector3(1, 2, 3); _testObject.transform.localRotation = Quaternion.Euler(45, 45, 45); _testObject.transform.localScale = new Vector3(2, 2, 2); var args = new JObject { ["target"] = "TestObject", ["position"] = true, ["rotation"] = false, ["scale"] = false }; var result = Tools_Transform.Reset(args); Assert.IsFalse(result.isError); Assert.AreEqual(Vector3.zero, _testObject.transform.localPosition); Assert.AreNotEqual(Quaternion.identity, _testObject.transform.localRotation); Assert.AreEqual(new Vector3(2, 2, 2), _testObject.transform.localScale); } [Test] public void LookAt_Point_OrientsTowardPoint() { _testObject.transform.position = Vector3.zero; var args = new JObject { ["target"] = "TestObject", ["point"] = new JArray { 0, 0, 10 } }; var result = Tools_Transform.LookAt(args); Assert.IsFalse(result.isError); // Should be looking forward (0, 0, 1) approximately var forward = _testObject.transform.forward; Assert.AreEqual(0f, forward.x, 0.001f); Assert.AreEqual(0f, forward.y, 0.001f); Assert.AreEqual(1f, forward.z, 0.001f); } [Test] public void LookAt_Target_OrientsTowardTarget() { _testObject.transform.position = Vector3.zero; var target = new GameObject("LookTarget"); target.transform.position = new Vector3(0, 0, 10); var args = new JObject { ["target"] = "TestObject", ["lookAtTarget"] = "LookTarget" }; var result = Tools_Transform.LookAt(args); Assert.IsFalse(result.isError); var forward = _testObject.transform.forward; Assert.AreEqual(0f, forward.x, 0.001f); Assert.AreEqual(0f, forward.y, 0.001f); Assert.AreEqual(1f, forward.z, 0.001f); Object.DestroyImmediate(target); } } }

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/Singtaa/UnityMCP'

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