SetHierarchyCommandTests.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. using NUnit.Framework;
  2. using UnityEngine;
  3. using LLM.Editor.Commands;
  4. using LLM.Editor.Data;
  5. using LLM.Editor.Helper;
  6. namespace LLM.Editor.Tests.Unit
  7. {
  8. [TestFixture]
  9. public class SetHierarchyCommandTests
  10. {
  11. private GameObject _childObject;
  12. private GameObject _parentObject;
  13. private CommandContext _context;
  14. [SetUp]
  15. public void SetUp()
  16. {
  17. _childObject = new GameObject("ChildObject");
  18. _parentObject = new GameObject("ParentObject");
  19. _context = new CommandContext();
  20. // Register objects with the context using their instance IDs as identifiers
  21. _context.IdentifierMap[_childObject.GetInstanceID().ToString()] = _childObject.GetInstanceID().ToString();
  22. _context.IdentifierMap[_parentObject.GetInstanceID().ToString()] = _parentObject.GetInstanceID().ToString();
  23. }
  24. [TearDown]
  25. public void TearDown()
  26. {
  27. if (_childObject != null) Object.DestroyImmediate(_childObject);
  28. if (_parentObject != null) Object.DestroyImmediate(_parentObject);
  29. }
  30. private SetHierarchyCommand CreateCommand(string childId, string parentId, int siblingIndex = -1)
  31. {
  32. var parameters = new SetHierarchyParams
  33. {
  34. childIdentifier = childId,
  35. parentIdentifier = parentId,
  36. siblingIndex = siblingIndex
  37. };
  38. return new SetHierarchyCommand(parameters.ToJson());
  39. }
  40. [Test]
  41. public void Execute_WithValidParent_SetsParentCorrectly()
  42. {
  43. // Arrange
  44. var command = CreateCommand(_childObject.GetInstanceID().ToString(), _parentObject.GetInstanceID().ToString());
  45. // Act
  46. var outcome = command.Execute(_context);
  47. // Assert
  48. Assert.AreEqual(CommandOutcome.Success, outcome);
  49. Assert.AreEqual(_parentObject.transform, _childObject.transform.parent);
  50. }
  51. [Test]
  52. public void Execute_WithNullParent_MovesToRoot()
  53. {
  54. // Arrange
  55. _childObject.transform.SetParent(_parentObject.transform); // Pre-condition
  56. var command = CreateCommand(_childObject.GetInstanceID().ToString(), null);
  57. // Act
  58. var outcome = command.Execute(_context);
  59. // Assert
  60. Assert.AreEqual(CommandOutcome.Success, outcome);
  61. Assert.IsNull(_childObject.transform.parent);
  62. }
  63. [Test]
  64. public void Execute_WithSiblingIndex_SetsOrderCorrectly()
  65. {
  66. // Arrange
  67. // Create another child to verify sibling order
  68. var otherChild = new GameObject("OtherChild");
  69. otherChild.transform.SetParent(_parentObject.transform);
  70. var command = CreateCommand(_childObject.GetInstanceID().ToString(), _parentObject.GetInstanceID().ToString(), 0);
  71. // Act
  72. var outcome = command.Execute(_context);
  73. // Assert
  74. Assert.AreEqual(CommandOutcome.Success, outcome);
  75. Assert.AreEqual(0, _childObject.transform.GetSiblingIndex());
  76. Object.DestroyImmediate(otherChild);
  77. }
  78. [Test]
  79. public void Execute_WithInvalidChildId_ReturnsError()
  80. {
  81. // Arrange
  82. var command = CreateCommand("invalid_id", _parentObject.GetInstanceID().ToString());
  83. // Act
  84. var outcome = command.Execute(_context);
  85. // Assert
  86. Assert.AreEqual(CommandOutcome.Error, outcome);
  87. Assert.IsNotNull(_context.ErrorMessage);
  88. Assert.IsTrue(_context.ErrorMessage.Contains("Could not find a valid child GameObject"));
  89. }
  90. }
  91. }