#if MA_VRCSDK3_AVATARS using modular_avatar_tests; using nadena.dev.modular_avatar.animation; using nadena.dev.modular_avatar.core; using nadena.dev.modular_avatar.core.editor; using nadena.dev.ndmf; using nadena.dev.ndmf.animator; using NUnit.Framework; using UnityEditor.Animations; using UnityEngine; using VRC.SDK3.Avatars.Components; using BuildContext = nadena.dev.ndmf.BuildContext; namespace UnitTests.MergeAnimatorTests { internal class MergeSingleTests : TestBase { [Test] public void NoErrorWhenAnimatorIsNull() { var av = CreateRoot("root"); var merge = av.AddComponent(); var ctx = new BuildContext(av, null); ctx.ActivateExtensionContext(); ctx.ActivateExtensionContextRecursive(); var errors = ErrorReport.CaptureErrors(() => { new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx); ctx.DeactivateAllExtensionContexts(); }); Assert.IsEmpty(errors); } [Test] public void MergeAnimationOverrideController() { var av = CreateRoot("root"); var merge = av.AddComponent(); merge.animator = LoadAsset("AOC_Override.overrideController"); var ctx = new BuildContext(av, null); ctx.ActivateExtensionContext(); ctx.ActivateExtensionContextRecursive(); var errors = ErrorReport.CaptureErrors(() => { new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx); ctx.DeactivateAllExtensionContexts(); }); ctx.DeactivateAllExtensionContexts(); Assert.IsEmpty(errors); var state = FindStateInLayer(findFxLayer(av, "Target"), "Anim1"); Assert.IsTrue(state.motion.name.StartsWith("Anim2")); } [Test] public void MergeAnimation_ForcesFirstLayerToWeightOne() { var av = CreateRoot("root"); var controller = new AnimatorController(); var stateMachine = new AnimatorStateMachine(); stateMachine.name = "test machine"; controller.AddLayer(new AnimatorControllerLayer() { name = "Base", stateMachine = stateMachine, defaultWeight = 0 }); var merge = av.AddComponent(); merge.animator = controller; merge.layerType = VRCAvatarDescriptor.AnimLayerType.FX; var ctx = new BuildContext(av, null); ctx.ActivateExtensionContext(); ctx.ActivateExtensionContextRecursive(); var errors = ErrorReport.CaptureErrors(() => { new MergeAnimatorProcessor().OnPreprocessAvatar(av, ctx); ctx.DeactivateAllExtensionContexts(); }); ctx.DeactivateAllExtensionContexts(); Assert.IsEmpty(errors); var layer = ((AnimatorController) FindFxController(av).animatorController).layers[^1]; Assert.AreEqual(1, layer.defaultWeight); } } } #endif