using AibisDream.FrameAnimation; using AibisDream.Utility; using NUnit.Framework; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEngine; namespace AibisDream.SystemEditor.Tests { public sealed class ActorPrefabContractTests { private const string PrefabPath = "Assets/Prefabs/FixSystemPrefabs/FrameAnimationActor.prefab"; [Test] public void FrameAnimationActor_PrefabAndSnapshotContractAreConsistent() { 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); var entry = AddressableAssetSettingsDefaultObject.Settings.FindAssetEntry( AssetDatabase.AssetPathToGUID(PrefabPath)); Assert.That(entry, Is.Not.Null); Assert.That(entry.address, Is.EqualTo(ConstRef.FrameAnimationActorPrefabName)); var actorObject = Object.Instantiate(prefab); var slotObject = new GameObject("Actor Slot"); try { var slot = slotObject.AddComponent(); slot.slotName = "test-slot"; var actor = actorObject.GetComponent(); actor.Init("TestActor", slot, ActorType.FrameAnimation); var snapshot = actor.CaptureEntry(); Assert.That(snapshot.actorName, Is.EqualTo("TestActor")); Assert.That(snapshot.slotName, Is.EqualTo("test-slot")); Assert.That(snapshot.actorType, Is.EqualTo(nameof(ActorType.FrameAnimation))); } finally { Object.DestroyImmediate(actorObject); Object.DestroyImmediate(slotObject); } } } }