12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using NUnit.Framework;
- using UnityEngine;
- using UnityEditor;
- using System.IO;
- using LLM.Editor.Commands;
- using LLM.Editor.Data;
- using LLM.Editor.Helper;
- namespace LLM.Editor.Tests.Unit
- {
- [TestFixture]
- public class InstantiatePrefabCommandTests
- {
- private const string TestPrefabName = "TempTestPrefab.prefab";
- private string _testPrefabPath;
- private GameObject _prefabObject;
- private CommandContext _context;
- private GameObject _instantiatedObject;
- [SetUp]
- public void SetUp()
- {
- _context = new CommandContext();
-
- // Create a dummy prefab asset
- _testPrefabPath = Path.Combine("Assets", TestPrefabName);
- var sourceObject = new GameObject("MyPrefab");
- _prefabObject = PrefabUtility.SaveAsPrefabAsset(sourceObject, _testPrefabPath);
- Object.DestroyImmediate(sourceObject);
-
- Assert.IsNotNull(_prefabObject, "Setup failed: Could not create test prefab.");
-
- // Register the prefab asset with the context
- var guid = AssetDatabase.AssetPathToGUID(_testPrefabPath);
- _context.IdentifierMap["my_prefab_1"] = guid;
- }
- [TearDown]
- public void TearDown()
- {
- // Clean up the instantiated object and the prefab asset
- if (_instantiatedObject != null)
- {
- Object.DestroyImmediate(_instantiatedObject);
- }
- if (File.Exists(_testPrefabPath))
- {
- AssetDatabase.DeleteAsset(_testPrefabPath);
- }
- }
- [Test]
- public void Execute_WithValidPrefabId_InstantiatesObjectAndCreatesNewLogicalName()
- {
- // Arrange
- var parameters = new InstantiatePrefabParams { prefabIdentifier = "my_prefab_1" };
- var command = new InstantiatePrefabCommand(parameters.ToJson());
- // Act
- var outcome = command.Execute(_context);
-
- // Assert
- Assert.AreEqual(CommandOutcome.Success, outcome);
-
- // Check that a *new* logical name for the instance was created
- Assert.IsNotNull(_context.CurrentSubject);
- var newLogicalName = (string)_context.CurrentSubject;
- Assert.AreNotEqual("my_prefab_1", newLogicalName);
- Assert.IsTrue(newLogicalName.StartsWith("my_prefab_1_instance_"));
- Assert.IsTrue(_context.IdentifierMap.ContainsKey(newLogicalName));
- // Find the instantiated object using the path registered by the command itself
- var instancePath = _context.IdentifierMap[newLogicalName];
- _instantiatedObject = GameObject.Find(instancePath);
- Assert.IsNotNull(_instantiatedObject, "Prefab should be instantiated and found via its registered path.");
- }
- [Test]
- public void Execute_WithInvalidPrefabId_ReturnsError()
- {
- // Arrange
- var parameters = new InstantiatePrefabParams { prefabIdentifier = "invalid_prefab_id" };
- var command = new InstantiatePrefabCommand(parameters.ToJson());
- // Act
- var outcome = command.Execute(_context);
- // Assert
- Assert.AreEqual(CommandOutcome.Error, outcome);
- Assert.IsNotNull(_context.ErrorMessage);
- Assert.IsTrue(_context.ErrorMessage.Contains("Could not resolve prefab"));
- }
- }
- }
|