using AibisDream.FrameAnimation; using AibisDream.SaveSystem; using AibisDream.Utility; using NUnit.Framework; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEngine; namespace AibisDream.SystemEditor.Tests { public sealed class FrameAnimationActorIntegrationTests { private const string PrefabPath = "Assets/Prefabs/FixSystemPrefabs/FrameAnimationActor.prefab"; [Test] public void ActorType_AppendsFrameAnimationWithoutChangingExistingValues() { Assert.That((int)ActorType.Sprite, Is.EqualTo(0)); Assert.That((int)ActorType.Anima, Is.EqualTo(1)); Assert.That((int)ActorType.AnimaEx, Is.EqualTo(2)); Assert.That((int)ActorType.FrameAnimation, Is.EqualTo(3)); Assert.That( System.Enum.TryParse("FrameAnimation", out ActorType parsed), Is.True); Assert.That(parsed, Is.EqualTo(ActorType.FrameAnimation)); } [Test] public void Prefab_HasRequiredComponentsAndPersistentAddress() { var prefab = AssetDatabase.LoadAssetAtPath(PrefabPath); Assert.That(prefab, Is.Not.Null); Assert.That(prefab.GetComponent(), Is.Not.Null); Assert.That(prefab.GetComponent(), Is.Not.Null); Assert.That(prefab.GetComponent(), Is.Not.Null); Assert.That(prefab.GetComponent().PlayOnEnable, Is.False); Assert.That(prefab.GetComponent().Graph, Is.Null); var guid = AssetDatabase.AssetPathToGUID(PrefabPath); var entry = AddressableAssetSettingsDefaultObject.Settings.FindAssetEntry(guid); Assert.That(entry, Is.Not.Null); Assert.That(entry.address, Is.EqualTo(ConstRef.FrameAnimationActorPrefabName)); } [Test] public void CaptureEntry_ReusesActorSnapshotFieldsWithoutSchemaChange() { var prefab = AssetDatabase.LoadAssetAtPath(PrefabPath); var actorObject = Object.Instantiate(prefab); var slotObject = new GameObject("Slot"); try { var slot = slotObject.AddComponent(); slot.slotName = "test-slot"; slot.sortingLayer = 0; slot.sortingOrder = 17; var actor = actorObject.GetComponent(); actor.Init("TestActor", slot, ActorType.FrameAnimation); actor.Show(); ActorEntrySnapshotDto entry = actor.CaptureEntry(); Assert.That(entry.actorName, Is.EqualTo("TestActor")); Assert.That(entry.slotName, Is.EqualTo("test-slot")); Assert.That(entry.actorType, Is.EqualTo(nameof(ActorType.FrameAnimation))); Assert.That(entry.alpha, Is.EqualTo(1f)); Assert.That(entry.stateName, Is.Empty); Assert.That(SaveSnapshotSchema.CurrentVersion, Is.EqualTo(1)); } finally { Object.DestroyImmediate(actorObject); Object.DestroyImmediate(slotObject); } } } }