FateViewer/Assets/Scripts/SimpleAnimationComponent/Tests/PlaymodeTests/ComparativeTests/ClipManagementTests.cs

203 lines
9.0 KiB
C#
Raw Normal View History

2023-10-09 00:51:40 +08:00
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Text.RegularExpressions;
public class ClipManagementTests
{
public class GetClipCount
{
[Test]
public void GetClipCount_BeforeAdd_ReturnsZero([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
Assert.AreEqual(0, animation.GetClipCount(), "Component should have no clips connected at this point");
}
[Test]
public void GetClipCount_AfterAddOne_ReturnsOne([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "test");
Assert.AreEqual(1, animation.GetClipCount(), "Component should have 1 clip connected after add");
}
[Test]
public void GetClipCount_AfterRemoveSingleClip_ReturnsZero([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "test");
animation.RemoveClip("test");
Assert.AreEqual(0, animation.GetClipCount(), "Component should have no clips after remove");
}
}
public class AddClip
{
[Test]
public void AddClip_WithNullClip_Throws_NullReferenceException([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
Assert.Throws<System.NullReferenceException> (() => { animation.AddClip(null, "test"); });
}
[Test]
public void AddClip_TwiceWithSameName_GetClipCount_ReturnsOne([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "test");
LogAssert.ignoreFailingMessages = true; //The error message here is irrelevant
animation.AddClip(clipInstance, "test");
LogAssert.ignoreFailingMessages = false;
Assert.AreEqual(1, animation.GetClipCount(), "Component should have no clips after remove");
}
[Test]
public void AddClip_TwiceDifferentName_GetClipCount_ReturnsTwo([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "test");
animation.AddClip(clipInstance, "test2");
Assert.AreEqual(2, animation.GetClipCount(), "Component should have no clips after remove");
}
[Test]
public void AddClip_WithSameName_AsClip_DoenstCreateNewClip([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, clipInstance.name);
IAnimationState state = animation.GetState(clipInstance.name);
Assert.AreEqual(clipInstance, state.clip, "Component should have no clips after remove");
}
}
public class RemoveClip_ByAnimationClip
{
[Test]
public void RemoveClip_AnimationClip_WithNullClip_Throws_NullReferenceException([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
AnimationClip clip = null;
Assert.Throws<System.NullReferenceException> (() => { animation.RemoveClip(clip); });
}
[Test]
[Description("AddClip always duplicates clips in the Animation Component, making it very hard to remove clips")]
public void RemoveClip_AnimationClip_RemovesClip([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, clipInstance.name);
animation.RemoveClip(clipInstance);
Assert.AreEqual(0, animation.GetClipCount(), "Component should have no clips after remove");
}
[Test]
public void RemoveClip_AnimationClip_DoesntRemoveUnrelatedClips([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clip2 = Resources.Load<AnimationClip>("LinearY");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
var clipInstance2 = Object.Instantiate<AnimationClip>(clip2);
clipInstance2.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, clipInstance.name);
animation.AddClip(clipInstance2, clipInstance2.name);
animation.RemoveClip(clipInstance);
Assert.AreEqual(1, animation.GetClipCount(), "Component should still have 1 connected clip after remove");
Assert.NotNull(animation.GetState(clipInstance2.name));
}
}
public class RemoveClip_ByName
{
[Test]
public void RemoveClip_ByName_WithEmptyName_Works([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "");
animation.RemoveClip("");
Assert.AreEqual(0, animation.GetClipCount(), "Component should still have 1 connected clip after remove");
}
[Test]
public void RemoveClip_ByName_DoesntRemoveOtherClips([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
var legacyClip2 = Object.Instantiate<AnimationClip>(clipInstance);
animation.AddClip(clipInstance, "test");
animation.AddClip(legacyClip2, "test2");
animation.RemoveClip("test");
Assert.AreEqual(1, animation.GetClipCount(), "Component should still have 1 connected clip after remove");
}
[Test]
public void RemoveClip_ByName_RemovesClip([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "test");
animation.RemoveClip("test");
Assert.AreEqual(0, animation.GetClipCount(), "Component should still have 1 connected clip after remove");
}
}
public class RemoveClip
{
[Test]
public void RemoveClip_Invalidates_ExistingState([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, clipInstance.name);
IAnimationState state = animation.GetState(clipInstance.name);
animation.RemoveClip(clipInstance);
Assert.IsFalse(state.isValid);
}
}
}