Add project files.

This commit is contained in:
2023-10-08 18:51:40 +02:00
commit 51cc9df14f
2249 changed files with 636804 additions and 0 deletions

View File

@@ -0,0 +1,288 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
public class BaseConditionsTests
{
[UnityTest]
public IEnumerator AnimatePhysics_False_DoesntApplyVelocity([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.InstantiateCube(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
var rb = animation.gameObject.AddComponent<Rigidbody>();
rb.useGravity = false;
animation.gameObject.GetComponent<BoxCollider>().enabled = false;
animation.animatePhysics = false;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return null;
yield return null;
Assert.AreEqual(0f, rb.velocity.x);
Assert.AreEqual(0f, rb.velocity.z);
}
[UnityTest]
public IEnumerator CullingMode_AlwaysAnimate_Animates_InvisibleObject([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.InstantiateCube(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.cullingMode = AnimatorCullingMode.AlwaysAnimate;
animation.AddClip(clipInstance, "test");
animation.gameObject.GetComponent<MeshRenderer>().enabled = false;
animation.Play("test");
yield return null;
yield return null;
Assert.AreNotEqual(Vector3.zero, animation.gameObject.transform.localPosition);
}
[UnityTest]
public IEnumerator CullingMode_CullCompletely_Doesnt_Animate_InvisibleObject([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.InstantiateCube(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.cullingMode = AnimatorCullingMode.CullCompletely;
animation.AddClip(clipInstance, "test");
animation.gameObject.GetComponent<MeshRenderer>().enabled = false;
animation.Play("test");
yield return null;
yield return null;
Assert.AreEqual(Vector3.zero, animation.gameObject.transform.localPosition);
}
[Test]
public void IsPlaying_BeforePlay_ReturnsFalse([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(false, animation.isPlaying);
}
[Test]
public void IsPlaying_AfterPlay_ReturnsTrue([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.Play("test");
Assert.AreEqual(true, animation.isPlaying);
}
[UnityTest]
public IEnumerator IsPlaying_AfterStop_ReturnsFalse([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.Play("test");
yield return null;
animation.Stop();
Assert.AreEqual(false, animation.isPlaying);
}
[UnityTest]
public IEnumerator IsPlaying_AfterClipDone_ReturnsFalse([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;
clipInstance.wrapMode = WrapMode.Once;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return new WaitForSeconds(2f);
Assert.AreEqual(false, animation.isPlaying);
}
[UnityTest]
public IEnumerator IsPlaying_AfterCrossfadeDone_ReturnsFalse([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;
clipInstance.wrapMode = WrapMode.Once;
animation.AddClip(clipInstance, "test");
animation.AddClip(clipInstance, "test2");
animation.Play("test");
yield return new WaitForSeconds(0.2f);
animation.CrossFade("test2", 1.5f);
yield return new WaitForSeconds(2.0f);
Assert.AreEqual(false, animation.isPlaying);
}
[Test]
public void DefaultClip_DoesntPlay_When_IsPlayingAutomatically_IsFalse([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.clip = clipInstance;
animation.playAutomatically = false;
Assert.AreEqual(false, animation.isPlaying);
Assert.AreEqual(false, animation.IsPlaying(animation.clip.name));
}
[Test]
public void DefaultClip_Plays_When_IsPlayingAutomatically_IsTrue([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.clip = clipInstance;
animation.playAutomatically = true;
var newGO = Object.Instantiate<GameObject>(animation.gameObject);
animation = newGO.GetComponent<IAnimation>();
Assert.AreEqual(true, animation.isPlaying);
var defaultName = animation.usesLegacy ? animation.clip.name : "Default";
Assert.AreEqual(true, animation.IsPlaying(defaultName));
}
[Test]
public void PlayAutomatically_HasNoEffect_WhenThereIsNo_DefaultClip([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
animation.playAutomatically = true;
var newGO = Object.Instantiate<GameObject>(animation.gameObject);
animation = newGO.GetComponent<IAnimation>();
Assert.AreEqual(false, animation.isPlaying);
}
[Test]
public void PlayAutomatically_WithNo_DefaultClip_HasNoEffect_OnOtherClips([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.playAutomatically = true;
animation.AddClip(clipInstance, clipInstance.name);
var newGO = Object.Instantiate<GameObject>(animation.gameObject);
animation = newGO.GetComponent<IAnimation>();
Assert.AreEqual(false, animation.isPlaying);
}
[Test]
public void PlayAutomatically_With_DefaultClip_HasNoEffect_OnOtherClips([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.clip = clipInstance;
animation.playAutomatically = true;
animation.AddClip(clipInstance, "OtherClip");
Assert.AreEqual(false, animation.IsPlaying("OtherClip"));
}
[Test]
public void PlayAutomatically_BeforeSet_ReturnsTrue([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
Assert.AreEqual(true, animation.playAutomatically);
}
[Test]
public void PlayAutomatically_AfterSet_True_ReturnsTrue([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
animation.playAutomatically = true;
Assert.AreEqual(true, animation.playAutomatically);
}
[Test]
public void PlayAutomatically_AfterSet_False_ReturnsFalse([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
animation.playAutomatically = false;
Assert.AreEqual(false, animation.playAutomatically);
}
[UnityTest]
public IEnumerator WrapMode_Default_UsesClipSetting([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;
clipInstance.wrapMode = WrapMode.Loop;
animation.wrapMode = WrapMode.Default;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return new WaitForSeconds(1.2f);
Assert.AreEqual(true, animation.isPlaying);
}
[UnityTest]
public IEnumerator WrapMode_OverridesClipsWithDefaultSetting([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;
clipInstance.wrapMode = WrapMode.Default;
animation.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return new WaitForSeconds(1.2f);
Assert.AreEqual(true, animation.isPlaying);
}
[UnityTest]
public IEnumerator WrapMode_DoesntOverrideClipsSetting([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;
clipInstance.wrapMode = WrapMode.Once;
animation.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return new WaitForSeconds(1.2f);
Assert.AreEqual(false, animation.isPlaying);
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 94d35051e65be294187c9630c79078d1
timeCreated: 1494560140
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,202 @@
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);
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0b00cae6d5f62bb41a1a48f5c48069fe
timeCreated: 1494560140
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
class ComparativeTestFixture
{
private static System.Type[] Sources()
{
return new Type [] { typeof(AnimationProxy), typeof(SimpleAnimationProxy) };
}
public static IAnimation Instantiate(System.Type type)
{
var go = new GameObject();
var component = go.AddComponent(type);
return component as IAnimation;
}
public static IAnimation InstantiateCube(System.Type type)
{
var go = GameObject.CreatePrimitive(PrimitiveType.Cube);
var component = go.AddComponent(type);
return component as IAnimation;
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 98de67babe968c640aa589d5b3a449c2
timeCreated: 1496940236
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,189 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Text.RegularExpressions;
public class DifferencesTests
{
[Test]
[Ignore("The Animation Component creates a new internal clip instance when a state has a different name than the name of the clip. This was deemed an undesirable behavior")]
public void AddClip_WithNewName_CreatesNewClip([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, "NewName");
IAnimationState state = animation.GetState("NewName");
Assert.AreNotEqual(clipInstance, state.clip, "AddClip should have created a new clip instance");
}
[Test]
[Ignore("This is where the new component differs. Animation won't let you remove multiple states with the same clip, because it's not possible to have the same clip twice")]
public void RemoveClip_AnimationClip_RemovesAllInstances([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");
animation.RemoveClip(clipInstance);
Assert.AreEqual(0, animation.GetClipCount(), "Component should have no clips after remove");
}
[UnityTest]
[Ignore("Time does not advance on the frame on which Rewind is called on SimpleAnimation")]
public IEnumerator Rewind_PlaysFrameZero([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
animation.Play("ValidName");
yield return new WaitForSeconds(0.5f);
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.x);
animation.Rewind("ValidName");
yield return null;
Assert.AreEqual(0f, animation.gameObject.transform.localPosition.x);
}
[Test]
[Ignore("Check were added to SimpleAnimation to prevent using invalid names")]
public void Rewind_WithInvalidName_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.Rewind("InvalidName");
}
[Test]
[Ignore("Check were added to SimpleAnimation to prevent using invalid names")]
public void Stop_WithInvalidName_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.Stop("InvalidName");
}
[Test]
[Ignore("The Animation Component accepts null as a valid name")]
public void State_Name_NullString_Throws_ArgumentNullException([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.Throws<System.ArgumentNullException>(() => { state.name = null; });
}
[UnityTest]
[Ignore("Setting time guarantees you that the next automatic evaluation will use the time you supplied with Playables, whereas Animation Component will update the frame time")]
public IEnumerator State_Time_SetTime_PreventsUpdatingTimeAutomatically([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
float time = Time.time;
state.time = 0.1f; //empty run for the Animation component, probably a side effect of reenabling the component
yield return null;
state.time = 0.1f;
yield return null;
Assert.AreEqual(0.1f, state.time);
}
[UnityTest]
[Ignore("The Animation Component doesn't advance on the first frame")]
public IEnumerator State_Time_IsSynchronizedWith_GameTime([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
float previousTime = Time.time;
yield return null;
yield return null;
yield return null;
float elapsedTime = Time.time - previousTime;
Assert.AreEqual(elapsedTime, state.time, 0.001f, "State time should be equal to elapsed time");
}
[UnityTest]
[Ignore("In the Animation Component, RemoveClip doesn't remove queued instances of the removed clip, whereas Stop stops both the queued instances and the playing instances. This inconsistency was deemed undesirable")]
public IEnumerator Queue_RemoveClip_StopsQueuedClips([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, "PlayAndQueue");
animation.Play("PlayAndQueue");
animation.PlayQueued("PlayAndQueue", QueueMode.CompleteOthers);
yield return null;
animation.RemoveClip("PlayAndQueue");
Assert.IsFalse(animation.isPlaying);
yield return null;
Assert.IsFalse(animation.isPlaying);
}
[UnityTest]
[Ignore("States that play backwards should still be Queue-compatible, which is not the case in the Animation Component")]
public IEnumerator NegativeSpeed_Does_Trigger_Crossfade([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, "PlayBackwards");
animation.AddClip(clipInstance, "Crossfade");
IAnimationState state = animation.GetState("PlayBackwards");
state.enabled = true;
state.time = 0.5f;
state.speed = -1f;
animation.PlayQueued("Crossfade", QueueMode.CompleteOthers);
yield return new WaitForSeconds(0.5f);
Assert.IsTrue(state.enabled);
Assert.IsTrue(animation.IsPlaying("Crossfade"));
}
[UnityTest]
[Ignore("The Animation Component doesn't apply velocities to rigidbodies with AnimatePhysics on")]
public IEnumerator AnimatePhysics_True_AppliesVelocity([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.InstantiateCube(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
var rb = animation.gameObject.AddComponent<Rigidbody>();
rb.useGravity = false;
animation.animatePhysics = true;
animation.AddClip(clipInstance, "test");
animation.Play("test");
yield return null;
yield return new WaitForSeconds(0.3f);
Assert.AreNotEqual(rb.velocity, Vector3.zero);
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 0b19f00406c66144ab1f66fe9c78fabb
timeCreated: 1499370755
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,57 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Text.RegularExpressions;
public class MiscTests
{
[UnityTest]
public IEnumerator StateSpeed_Affects_WhenCrossfadeHappens([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, "PlaySlowly");
animation.AddClip(clipInstance, "Queued");
IAnimationState state = animation.GetState("PlaySlowly");
state.enabled = true;
state.speed = 0.1f;
animation.PlayQueued("Queued", QueueMode.CompleteOthers);
//Wait for the original length of PlaySlowly
yield return new WaitForSeconds(1.1f);
Assert.IsFalse(animation.IsPlaying("Queued"), "Clip 'Queued' should not be playing yet. Speed is probably applied wrong.");
state.speed = 1000.0f;
yield return null;
yield return null;
Assert.IsTrue(animation.IsPlaying("Queued"), "Clip 'PlaySlowly' should now be done, and clip 'Queued' should have started playing.");
}
[UnityTest]
public IEnumerator PlayQueue_WithLoopedAnimation_Prevents_StateAccess_OfOriginalState_FromWorking_Correctly([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
var loopedClipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
loopedClipInstance.legacy = animation.usesLegacy;
loopedClipInstance.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "FirstClip");
animation.AddClip(loopedClipInstance, "LoopedClip");
animation.Play("FirstClip");
animation.PlayQueued("LoopedClip", QueueMode.CompleteOthers);
yield return new WaitForSeconds(1.1f);
Assert.IsTrue(animation.IsPlaying("LoopedClip"), "Clip 'LoopedClip' should be playing");
IAnimationState state = animation.GetState("LoopedClip");
Assert.IsFalse(state.enabled, "We should be playing a copy of LoopedClip, not the LoopedClip State");
yield return new WaitForSeconds(1.1f);
state = animation.GetState("LoopedClip");
Assert.IsFalse(state.enabled, "We should still be playing a copy of LoopedClip, not the LoopedClip State");
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d6e209b2d0c68024ebd0ce0df3d50480
timeCreated: 1499452822
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,806 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Text.RegularExpressions;
public class PlaybackTests
{
public class Play
{
[Test]
public void Play_WithInvalidName_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.Play("WrongState");
}
[Test]
public void Play_ValidName_IsPlaying_ReturnsTrue([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, "RightName");
animation.Play("RightName");
Assert.IsTrue(animation.isPlaying, "The clip RightName should be playing");
}
[UnityTest]
public IEnumerator Play_ValidName_MovesObject([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, "ValidName");
animation.Play("ValidName");
//TODO: replace by Seek(time)
yield return null;
yield return null;
yield return null;
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.x, "LocalPosition.x should have been moved by the clip");
}
[UnityTest]
public IEnumerator Play_OtherClip_IsPlaying_ReturnsFalse([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 clipInstance2 = Object.Instantiate<AnimationClip>(clipInstance);
clipInstance2.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "ClipToPlayOver");
animation.AddClip(clipInstance2, "ClipThatPlaysOver");
animation.Play("ClipToPlayOver");
yield return null;
animation.Play("ClipThatPlaysOver");
Assert.IsFalse(animation.IsPlaying("ClipToPlayOver"), "ClipToPlayOver should be stopped by playing ClipThatPlaysOver");
Assert.IsTrue(animation.IsPlaying("ClipThatPlaysOver"), "ClipThatPlaysOver should now be the only playing clip");
yield return null;
}
[UnityTest]
public IEnumerator Play_SameClip_StateTime_DoesntChange([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.Play("test");
yield return null;
float time = animation.GetState("test").time;
animation.Play("test");
Assert.AreEqual(time, animation.GetState("test").time);
}
[UnityTest]
public IEnumerator Play_SameClip_Done_StateTime_Resets([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.Play("test");
yield return new WaitForSeconds(1.1f);
float time = animation.GetState("test").time;
animation.Play("test");
Assert.AreEqual(0f, animation.GetState("test").time);
}
}
public class PlayQueue_CompleteOthers
{
[Test]
public void PlayQueue_WithInvalidName_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.PlayQueued("InvalidName", QueueMode.CompleteOthers);
}
[UnityTest]
public IEnumerator PlayQueue_WithNoClipPlaying_IsStatePlaying_ReturnsTrue([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, "ToPlayQueue");
animation.PlayQueued("ToPlayQueue", QueueMode.CompleteOthers);
yield return null;
Assert.IsTrue(animation.IsPlaying("ToPlayQueue"));
}
[UnityTest]
public IEnumerator PlayQueue_WithClipPlaying_IsStatePlaying_ReturnsFalse([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, "ToPlay");
animation.AddClip(clipInstance, "ToPlayQueue");
animation.Play("ToPlay");
animation.PlayQueued("ToPlayQueue", QueueMode.CompleteOthers);
Assert.IsFalse(animation.IsPlaying("ToPlayQueue"));
yield return null;
}
[UnityTest]
public IEnumerator PlayQueue_WithClipPlaying_IsStatePlaying_AfterOriginalClipDone_ReturnsTrue([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, "ToPlay");
animation.AddClip(clipInstance, "ToPlayQueue");
animation.Play("ToPlay");
animation.PlayQueued("ToPlayQueue", QueueMode.CompleteOthers);
yield return new WaitForSeconds(1.1f);
Assert.IsTrue(animation.IsPlaying("ToPlayQueue"));
yield return null;
}
[UnityTest]
public IEnumerator PlayQueue_Queueing_SameClip_AfterFirstClipIsDone_IsPlaying_ReturnsTrue([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, "ToPlayAndPlayQueue");
animation.Play("ToPlayAndPlayQueue");
animation.PlayQueued("ToPlayAndPlayQueue", QueueMode.CompleteOthers);
yield return new WaitForSeconds(1.1f);
Assert.IsTrue(animation.IsPlaying("ToPlayAndPlayQueue"));
yield return null;
}
}
public class PlayQueue_PlayNow
{
}
public class Crossfade
{
[Test]
public void Crossfade_WithInvalidName_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.CrossFade("InvalidName", 0);
}
[Test]
public void Crossfade_WithValidName_IsPlaying_ReturnsTrue([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, "ToCrossfade");
animation.CrossFade("ToCrossfade", 0f);
Assert.IsTrue(animation.IsPlaying("ToCrossfade"));
}
[UnityTest]
public IEnumerator Crossfade_WithValidName_MovesObject([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, "ToCrossfade");
animation.CrossFade("ToCrossfade", 0f);
yield return new WaitForSeconds(0.2f);
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.x);
}
[Test]
public void Crossfade_LengthZero_StopsOtherClips([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, "ToPlay");
animation.AddClip(clipInstance, "ToCrossfade");
animation.CrossFade("ToPlay", 0f);
animation.CrossFade("ToCrossfade", 0.0f);
Assert.IsFalse(animation.IsPlaying("ToPlay"));
}
[Test]
public void Crossfade_DoesntStopOtherClips([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, "ToPlay");
animation.AddClip(clipInstance, "ToCrossfade");
animation.CrossFade("ToPlay", 0f);
animation.CrossFade("ToCrossfade", 0.2f);
Assert.IsTrue(animation.IsPlaying("ToPlay"));
}
[UnityTest]
public IEnumerator CrossfadedOut_Clips_AreStopped([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, "ToPlay");
animation.AddClip(clipInstance, "ToCrossfade");
animation.Play("ToPlay");
animation.CrossFade("ToCrossfade", 0.1f);
yield return new WaitForSeconds(0.2f);
Assert.IsFalse(animation.IsPlaying("ToPlay"));
}
[UnityTest]
public IEnumerator CrossfadedOut_Clips_AreTimeReset([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, "ToPlay");
animation.AddClip(clipInstance, "ToCrossfade");
animation.Play("ToPlay");
animation.CrossFade("ToCrossfade", 0.1f);
yield return new WaitForSeconds(0.2f);
Assert.AreEqual(0.0f, animation.GetState("ToPlay").normalizedTime);
}
[UnityTest]
public IEnumerator Crossfade_MultipleTimes_DoesntReset_Crossfade_Duration([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);
var clipInstance2 = Object.Instantiate<AnimationClip>(clip2);
clipInstance.legacy = animation.usesLegacy;
clipInstance2.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "ToPlay");
animation.AddClip(clipInstance2, "ToCrossfade");
animation.Play("ToPlay");
animation.CrossFade("ToCrossfade", 0.2f);
yield return new WaitForSeconds(0.1f);
animation.CrossFade("ToCrossfade", 0.2f);
yield return new WaitForSeconds(0.11f);
Assert.AreEqual(0.0f, animation.GetState("ToPlay").weight);
Assert.AreEqual(1.0f, animation.GetState("ToCrossfade").weight);
}
[UnityTest]
[Ignore("Wrong Assumption; clips don't get kept alive by crossfade")]
public IEnumerator Crossfade_FromFinishingClip_KeepsClipAlive_UntilCrossfadeDone([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var xClip = Object.Instantiate<AnimationClip>(clipX);
var yClip = Object.Instantiate<AnimationClip>(clipY);
xClip.legacy = animation.usesLegacy;
yClip.legacy = animation.usesLegacy;
animation.AddClip(xClip, "ToPlay");
animation.AddClip(yClip, "ToCrossfade");
animation.Play("ToPlay");
yield return new WaitForSeconds(0.9f);
Assert.IsTrue(animation.IsPlaying("ToPlay"));
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.y);
animation.CrossFade("ToCrossfade", 0.5f);
yield return new WaitForSeconds(0.3f);
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.y);
Assert.IsTrue(animation.IsPlaying("ToCrossfade"));
yield return null;
}
[UnityTest]
[Ignore("Wrong Assumption; clips don't get kept alive by crossfade")]
public IEnumerator Crossfade_LongerThanClip_KeepsClipAlive_UntilCrossfadeDone([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var xClip = Object.Instantiate<AnimationClip>(clipX);
var yClip = Object.Instantiate<AnimationClip>(clipY);
xClip.legacy = animation.usesLegacy;
yClip.legacy = animation.usesLegacy;
animation.AddClip(yClip, "ToPlay");
animation.AddClip(xClip, "ToCrossfade");
animation.Play("ToPlay");
yield return new WaitForSeconds(0.9f);
Assert.IsTrue(animation.IsPlaying("ToPlay"));
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.y);
animation.CrossFade("ToCrossfade", 1.2f);
yield return new WaitForSeconds(1.5f);
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.y);
Assert.IsTrue(animation.IsPlaying("ToCrossfade"));
}
}
public class CrossfadeQueue
{
[Test]
public void CrossfadeQueue_WithNoClipAttached_FailsOnCall([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
LogAssert.Expect(LogType.Error, new Regex(""));
animation.CrossFadeQueued("UnknownState", 0f, QueueMode.CompleteOthers);
}
[UnityTest]
public IEnumerator CrossfadeQueue_WithInvalidName_FailsOnCall([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, "ToPlay");
LogAssert.Expect(LogType.Error, new Regex(""));
animation.CrossFadeQueued("invalidName", 0f, QueueMode.CompleteOthers);
yield return null;
}
[UnityTest]
public IEnumerator CrossfadeQueue_WithNoClipPlaying_IsStatePlaying_ReturnsTrue([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, "ToPlay");
animation.CrossFadeQueued("ToPlay", 0f, QueueMode.CompleteOthers);
yield return null;
Assert.IsTrue(animation.IsPlaying("ToPlay"));
}
[UnityTest]
public IEnumerator CrossfadeQueue_WithClipPlaying_IsStatePlaying_ReturnsFalse([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
var clipInstanceY = Object.Instantiate<AnimationClip>(clipY);
clipInstanceX.legacy = animation.usesLegacy;
clipInstanceY.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceY, "ToPlay");
animation.AddClip(clipInstanceX, "ToCrossfade");
animation.Play("ToPlay");
animation.CrossFadeQueued("ToCrossfade", 0.5f, QueueMode.CompleteOthers);
yield return null;
Assert.IsFalse(animation.IsPlaying("ToCrossfade"));
}
[UnityTest]
public IEnumerator CrossfadeQueue_WithClipPlaying_IsStatePlaying_AfterOriginalClipDone_ReturnsTrue([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
var clipInstanceY = Object.Instantiate<AnimationClip>(clipY);
clipInstanceX.legacy = animation.usesLegacy;
clipInstanceY.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceY, "ToPlay");
animation.AddClip(clipInstanceX, "ToCrossfade");
animation.Play("ToPlay");
animation.CrossFadeQueued("ToCrossfade", 0.0f, QueueMode.CompleteOthers);
yield return new WaitForSeconds(1.1f);
Assert.IsTrue(animation.IsPlaying("ToCrossfade"));
}
}
public class Stop
{
[UnityTest]
public IEnumerator Stop_ValidName_NotPlaying_IsPlaying_ReturnsFalse([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
yield return null;
animation.Stop("ValidName");
Assert.IsFalse(animation.IsPlaying("ValidName"));
}
[UnityTest]
public IEnumerator Stop_ValidName_Playing_IsPlaying_ReturnsFalse([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
animation.Play("ValidName");
yield return null;
animation.Stop("ValidName");
Assert.IsFalse(animation.IsPlaying("ValidName"));
}
[UnityTest]
public IEnumerator Stop_ValidName_DoesntMoveObject([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
animation.Play("ValidName");
yield return null;
Vector3 localPos = animation.gameObject.transform.localPosition;
animation.Stop("ValidName");
Assert.AreEqual(localPos, animation.gameObject.transform.localPosition);
}
[UnityTest]
public IEnumerator Stop_WithName_OtherClip_IsPlaying_DoesntChange([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
var clipInstanceY = Object.Instantiate<AnimationClip>(clipY);
clipInstanceX.legacy = animation.usesLegacy;
clipInstanceY.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceY, "ClipToStop");
animation.AddClip(clipInstanceX, "OtherClip");
var stateToStop = animation.GetState("ClipToStop");
var otherState = animation.GetState("OtherClip");
stateToStop.weight = 1f;
stateToStop.enabled = true;
otherState.weight = 1f;
otherState.enabled = true;
yield return null;
animation.Stop("ClipToStop");
Assert.IsFalse(animation.IsPlaying("ClipToStop"));
Assert.IsTrue(animation.IsPlaying("OtherClip"));
}
[UnityTest]
public IEnumerator Stop_WithoutName_IsPlaying_ReturnsFalse([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipY = Resources.Load<AnimationClip>("LinearY");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
var clipInstanceY = Object.Instantiate<AnimationClip>(clipY);
clipInstanceX.legacy = animation.usesLegacy;
clipInstanceY.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceY, "clip1");
animation.AddClip(clipInstanceX, "clip2");
animation.GetState("clip1").enabled = true;
animation.GetState("clip1").weight = 0.5f;
animation.GetState("clip2").enabled = true;
animation.GetState("clip2").weight = 0.5f;
Assert.IsTrue(animation.IsPlaying("clip1"));
Assert.IsTrue(animation.IsPlaying("clip2"));
yield return null;
animation.Stop();
Assert.IsFalse(animation.IsPlaying("clip1"));
Assert.IsFalse(animation.IsPlaying("clip2"));
}
[UnityTest]
public IEnumerator Stop_Playing_StoppedState_DoesntFire_AnyEvents([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var eventReceiver = animation.gameObject.AddComponent<SimpleAnimationTests.ReceivesEvent>();
var clip = Resources.Load<AnimationClip>("FiresEvent");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "FiresEvent");
animation.Play("FiresEvent");
yield return new WaitForSeconds(0.6f);
Assert.AreEqual(1, eventReceiver.eventCount, "Event at 0.5 should have fired");
animation.Stop("FiresEvent");
animation.Play("FiresEvent");
Assert.AreEqual(0.0f, animation.GetState("FiresEvent").time, "Time should have reset to 0");
Assert.AreEqual(1, eventReceiver.eventCount, "No new event should have fired");
yield return null;
Assert.AreEqual(1, eventReceiver.eventCount, "No new event should have fired after update");
}
}
public class Rewind
{
[Test]
public void Rewind_ValidName_NotPlaying_StateTime_IsZero([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.time = 0.5f;
animation.Rewind("ValidName");
Assert.AreEqual(0f, state.time);
}
[UnityTest]
public IEnumerator Rewind_ValidName_Playing_StateTime_IsZero([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ValidName");
animation.Play("ValidName");
yield return new WaitForSeconds(0.5f);
animation.Rewind("ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreEqual(0f, state.time);
}
[Test]
public void Rewind_WithName_OtherClip_Time_DoesntChange([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, "ToRewind");
animation.AddClip(clipInstance, "ToLeaveAlone");
IAnimationState toRewind = animation.GetState("ToRewind");
toRewind.time = 0.5f;
IAnimationState toLeaveAlone = animation.GetState("ToLeaveAlone");
toLeaveAlone.time = 0.5f;
animation.Rewind("ToRewind");
Assert.AreNotEqual(0f, toLeaveAlone.time);
}
[Test]
public void Rewind_WithoutName_AllStateTimes_AreZero([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, "ToRewind");
animation.AddClip(clipInstance, "ToRewindToo");
IAnimationState toRewind = animation.GetState("ToRewind");
toRewind.time = 0.5f;
IAnimationState toRewindToo = animation.GetState("ToRewindToo");
toRewindToo.time = 0.5f;
animation.Rewind();
Assert.AreEqual(0f, toRewind.time);
Assert.AreEqual(0f, toRewindToo.time);
}
}
public class Sample
{
[Test]
public void Sample_DoesntChange_StateTime([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "clip1");
animation.GetState("clip1").enabled = true;
animation.GetState("clip1").weight = 1f;
animation.GetState("clip1").time = 0.5f;
animation.Sample();
Assert.AreEqual(0.5f, animation.gameObject.transform.localPosition.x);
Assert.IsTrue(Mathf.Approximately(0.5f, animation.GetState("clip1").time));
}
[Test]
public void Sample_EvaluatesAt_StateTime([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ToSample");
IAnimationState state = animation.GetState("ToSample");
state.enabled = true;
state.weight = 1f;
state.time = 0.5f;
animation.Sample();
Assert.AreEqual(0.5f, animation.gameObject.transform.localPosition.x);
}
}
public class Blend
{
[Test]
public void Blend_AfterBlend_Instant_State_IsPlaying([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ToBlend");
animation.Blend("ToBlend", 1, 0);
Assert.IsTrue(animation.IsPlaying("ToBlend"));
}
[Test]
public void Blend_AfterBlend_NonInstant_State_IsPlaying([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ToBlend");
animation.Blend("ToBlend", 1, 0.5f);
Assert.IsTrue(animation.IsPlaying("ToBlend"));
}
[Test]
public void Blend_DoesntChange_OtherState_Weight([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstance1 = Object.Instantiate<AnimationClip>(clipX);
var clipInstance2 = Object.Instantiate<AnimationClip>(clipX);
clipInstance1.legacy = animation.usesLegacy;
clipInstance2.legacy = animation.usesLegacy;
animation.AddClip(clipInstance1, "ToBlend");
animation.AddClip(clipInstance2, "ToLeaveAlone");
animation.Play("ToLeaveAlone");
animation.Blend("ToBlend", 1f, 0f);
Assert.AreEqual(1f, animation.GetState("ToLeaveAlone").weight);
}
[UnityTest]
public IEnumerator Blend_Instant_WithWeightZero_State_DoesntStop_State([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
animation.AddClip(clipInstanceX, "ToBlend");
animation.Blend("ToBlend", 0, 0);
yield return null;
Assert.IsTrue(animation.IsPlaying("ToBlend"));
}
}
public class PlayQueued
{
[UnityTest]
public IEnumerator PlayQueued_Only_Plays_QueuedAnimations_Once([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clipX = Resources.Load<AnimationClip>("LinearX");
var clipInstanceX = Object.Instantiate<AnimationClip>(clipX);
clipInstanceX.legacy = animation.usesLegacy;
var clipInstanceXOnce = Object.Instantiate<AnimationClip>(clipX);
clipInstanceXOnce.legacy = animation.usesLegacy;
clipInstanceXOnce.wrapMode = WrapMode.Once;
animation.AddClip(clipInstanceX, "A");
animation.AddClip(clipInstanceX, "B");
animation.AddClip(clipInstanceX, "C");
animation.Play("A");
animation.PlayQueued("B", QueueMode.CompleteOthers);
animation.PlayQueued("C", QueueMode.CompleteOthers);
yield return new WaitForSeconds(2.8f);
Assert.IsTrue(animation.IsPlaying("C"));
yield return new WaitForSeconds(0.3f);
Assert.IsFalse(animation.isPlaying);
}
//TODO: Crossfade and Play clears queued animations
//TODO: Stop clears queued animations
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 2fd08db4a0ee3ce47b1e4f8a0913f89d
timeCreated: 1494560140
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,61 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using System.Text.RegularExpressions;
public class QueueTests
{
[UnityTest]
public IEnumerator Queue_Stop_Clip_StopsQueuedClip([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, "PlayAndQueue");
animation.Play("PlayAndQueue");
animation.PlayQueued("PlayAndQueue", QueueMode.CompleteOthers);
yield return null;
animation.Stop("PlayAndQueue");
Assert.IsFalse(animation.isPlaying);
yield return null;
//Queued animation would have started if it was going to.
Assert.IsFalse(animation.isPlaying);
}
[UnityTest]
public IEnumerator State_Enabled_DoesntCover_QueuedState([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, "PlayAndQueue");
animation.Play("PlayAndQueue");
animation.PlayQueued("PlayAndQueue", QueueMode.CompleteOthers);
IAnimationState state = animation.GetState("PlayAndQueue");
Assert.IsTrue(state.enabled);
yield return new WaitForSeconds(1.1f);
Assert.IsFalse(state.enabled);
}
[UnityTest]
public IEnumerator Queue_Looped_Clips_Block_QueuedAnimations([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;
clipInstance.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "Play");
animation.AddClip(clipInstance, "Queued");
animation.Play("Play");
animation.PlayQueued("Queued", QueueMode.CompleteOthers);
yield return new WaitForSeconds(1.1f);
Assert.IsFalse(animation.IsPlaying("Queued"));
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 92ce3265af6ad694c9d214d1b4fd6adc
timeCreated: 1499439871
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,693 @@
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
public class StateAccessTests
{
public class BaseTests
{
[Test]
public void GetState_WithNoState_ReturnsNull([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
IAnimationState state = animation.GetState("InvalidName");
Assert.AreEqual(null, state);
}
[Test]
public void GetState_WithState_ReturnsState([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreNotEqual(null, state);
Assert.AreEqual("ValidName", state.name);
}
}
public class TimeTests
{
[Test]
public void State_Time_Equals_Zero_BeforePlay([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreEqual(0f, state.time);
}
[Test]
public void State_Time_Equals_Zero_AfterPlay([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
Assert.AreEqual(0f, state.time);
}
[Test]
public void State_Time_Affects_ClipPlayback([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
state.weight = 1f;
state.time = 0.5f;
animation.Sample();
Assert.AreEqual(animation.gameObject.transform.localPosition.x, state.time, "Sampling should have updated the position of the object at time 0.5");
}
[UnityTest]
public IEnumerator State_Time_ChangesWith_GameTime([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
float previousTime = Time.time;
yield return null;
yield return null; //Since the Animation Component doesn't update the time on the first frame, we must wait two frames to see an effect
float elapsedTime = Time.time - previousTime;
Assert.AreNotEqual(elapsedTime, state.time, "State time should have changed");
}
[UnityTest]
public IEnumerator State_Time_SetPast_ClipEnd_StopsState_AfterOneFrame([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.time = 2.0f;
yield return null;
Assert.IsFalse(state.enabled, "State should be disabled");
Assert.IsFalse(animation.IsPlaying(state.name), "State should be disabled");
Assert.IsFalse(animation.isPlaying, "State should be disabled");
}
[UnityTest]
public IEnumerator State_Time_SetPast_ClipEnd_ThenBack_DoesntStopState([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.time = 2.0f;
state.time = 0.2f;
yield return null;
Assert.IsTrue(state.enabled, "State should be enabled");
Assert.IsTrue(animation.IsPlaying(state.name), "State should be playing");
Assert.IsTrue(animation.isPlaying, "Component should be playing");
}
[Test]
public void State_Time_SetPast_ClipEnd_Doesnt_Immediately_StopState([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.time = 2.0f;
Assert.IsTrue(state.enabled, "State should be enabled");
Assert.IsTrue(animation.IsPlaying(state.name), "State should be playing");
Assert.IsTrue(animation.isPlaying, "Component should be playing");
}
[UnityTest]
public IEnumerator State_Time_SetTime_DoesntStartState([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.time = 2.0f;
state.time = 0.2f;
yield return null;
Assert.IsTrue(state.enabled, "State should be disabled");
Assert.IsTrue(animation.IsPlaying(state.name), "State should be disabled");
Assert.IsTrue(animation.isPlaying, "State should be disabled");
}
[UnityTest]
public IEnumerator State_Time_SetTime_DoesntPlayEvents([ValueSource(typeof(ComparativeTestFixture), "Sources")]System.Type type)
{
IAnimation animation = ComparativeTestFixture.Instantiate(type);
var clip = Resources.Load<AnimationClip>("FiresEvent");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
clipInstance.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "ValidName");
var eventReceiver = animation.gameObject.AddComponent<SimpleAnimationTests.ReceivesEvent>();
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.time = 0.1f;
yield return null;
Assert.AreEqual(0, eventReceiver.eventCount, "Event should not have been received");
state.time = 0.6f;
yield return null;
Assert.AreEqual(0, eventReceiver.eventCount, "Event should have been received after setting the time on the state");
}
}
public class NormalizedTime
{
[Test]
public void State_NormalizedTime_AffectsTime([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;
//Create event to extend clip
var evt = new AnimationEvent();
evt.time = 2.0f;
clipInstance.AddEvent(evt);
animation.AddClip(clipInstance, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.normalizedTime = 0.5f;
Assert.AreEqual(state.normalizedTime*state.length, state.time);
}
[Test]
public void State_Time_AffectsNormalizedTime([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;
//Create event to extend clip
var evt = new AnimationEvent();
evt.time = 2.0f;
clipInstance.AddEvent(evt);
animation.AddClip(clipInstance, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.time = 0.5f;
Assert.AreEqual(state.time / state.length, state.normalizedTime);
}
}
public class Enabled
{
[Test]
public void State_Enabled_InitialValue_False([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.IsFalse(state.enabled);
}
[Test]
public void State_Enabled_SetTrue_ReturnsTrue([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
Assert.IsTrue(state.enabled);
}
[Test]
public void State_Enabled_AfterPlay_ReturnsTrue([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
Assert.IsTrue(state.enabled);
}
[Test]
public void State_Enabled_AfterStop_ReturnsFalse([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
animation.Stop(state.name);
Assert.IsFalse(state.enabled);
}
[UnityTest]
public IEnumerator State_Enabled_AfterStateEnd_ReturnsFalse([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
yield return new WaitForSeconds(1.1f);
Assert.IsFalse(state.enabled);
}
[UnityTest]
public IEnumerator State_Enabled_AfterSetTime_ToStateEnd_ReturnsFalse([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
state.time = 2f;
yield return null;
Assert.IsFalse(state.enabled);
}
[Test]
public void State_Enabled_False_IsPlaying_ReturnsFalse([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
animation.Play(state.name);
state.enabled = false;
Assert.IsFalse(animation.isPlaying);
Assert.IsFalse(animation.IsPlaying(state.name));
}
}
public class Speed
{
[UnityTest]
public IEnumerator State_Speed_SetTo_Zero_Time_DoesntAdvance([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.speed = 0f;
state.enabled = true;
yield return null;
yield return null; //Second frame to allow Animation Component to advance time
Assert.AreEqual(0f, state.time);
}
[UnityTest]
public IEnumerator State_Speed_Negative_StopsState_WhenTime_Reaches_Negative([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.speed = -1f;
state.enabled = true;
yield return null;
yield return null; //Second frame to allow Animation Component to advance time
Assert.IsFalse(state.enabled);
}
[UnityTest]
public IEnumerator State_Speed_Negative_DoesntStopsState_WhenTime_Reaches_Negative_OnLoopedClip([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;
clipInstance.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.speed = -1f;
state.enabled = true;
yield return null;
yield return null; //Second frame to allow Animation Component to advance time
Assert.IsTrue(state.enabled);
}
[Test]
public void State_Speed_DoesntAffect_NormalizedTime([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;
clipInstance.wrapMode = WrapMode.Loop;
animation.AddClip(clipInstance, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.time = 0.5f;
float normalizedTime = state.normalizedTime;
state.speed = 10.0f;
Assert.AreEqual(normalizedTime, state.normalizedTime);
}
}
public class Name
{
[Test]
public void State_Name_Equals_AddClip_Name([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreEqual("ValidName", state.name);
}
[Test]
public void State_Name_ChangingName_Name_Equals_NewName([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.name = "NewName";
Assert.AreEqual("NewName", state.name);
}
[Test]
public void State_Name_ChangingName_DoesntInvalidate_State([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.name = "NewName";
Assert.IsTrue(state.isValid);
}
[Test]
public void State_Name_RenamedState_CantBeFound_ByOldName([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.name = "NewName";
state = animation.GetState("ValidName");
Assert.IsNull(state);
}
[Test]
public void State_Name_RenamedState_CanBeFound_ByNewName([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.name = "NewName";
state = animation.GetState("NewName");
Assert.IsNotNull(state);
}
[Test]
public void State_Name_EmptyString_CanBeFound([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.name = "";
state = animation.GetState("");
Assert.IsNotNull(state);
}
}
public class Weight
{
[UnityTest]
public IEnumerator State_Weight_EqualZero_DoesntWrite([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
state.weight = 0f;
state.time = 0.5f; //Seek the clip so that values should be written;
yield return null;
Assert.AreEqual(0f, animation.gameObject.transform.localPosition.x);
}
[UnityTest]
public IEnumerator State_Weight_FlipFlopTest([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
state.weight = 0f;
state.time = 0.5f; //Seek the clip so that values should be written;
yield return null;
Assert.AreEqual(0f, animation.gameObject.transform.localPosition.x);
state.weight = 1f;
yield return null;
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.x);
}
[UnityTest]
public IEnumerator State_Weight_Normalizes([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);
var clipInstance2 = Object.Instantiate<AnimationClip>(clip2);
clipInstance.legacy = animation.usesLegacy;
clipInstance2.legacy = animation.usesLegacy;
animation.AddClip(clipInstance, "State1");
animation.AddClip(clipInstance2, "State2");
IAnimationState state1 = animation.GetState("State1");
IAnimationState state2 = animation.GetState("State2");
state1.enabled = true;
state2.enabled = true;
state1.weight = 1f;
state2.weight = 1f;
state1.time = 0.5f; //Seek the clip so that values should be written;
state2.time = 0.5f; //Seek the clip so that values should be written;
yield return null;
Assert.AreEqual(0.25f, animation.gameObject.transform.localPosition.x);
Assert.AreEqual(0.25f, animation.gameObject.transform.localPosition.y);
}
[UnityTest]
public IEnumerator State_Weight_NonZero_Writes([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
state.weight = 1f;
state.time = 0.5f; //Seek the clip so that values should be written;
yield return null;
Assert.AreNotEqual(0f, animation.gameObject.transform.localPosition.x);
}
[Test]
public void State_Weight_SetWeight_Equals_GetWeight([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.weight = 1f;
Assert.AreEqual(1f, state.weight);
}
[Test]
public void State_Weight_InitialValue_IsZero([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreEqual(0f, state.weight);
}
[Test]
public void State_Weight_SetEnable_DoesntChange_Weight([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.enabled = true;
Assert.AreEqual(0f, state.weight);
state.weight = 1f;
state.enabled = false;
Assert.AreEqual(1f, state.weight);
}
[Test]
public void State_Weight_SetWeight_DoesntChange_Enable([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
state.weight = 1f;
Assert.IsFalse(state.enabled);
state.enabled = true;
state.weight = 0f;
Assert.IsTrue(state.enabled);
}
}
public class Length
{
[Test]
public void State_Length_Equals_ClipLength([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, "ValidName");
IAnimationState state = animation.GetState("ValidName");
Assert.AreEqual(clipInstance.length, state.length);
}
}
public class Clip
{
[Test]
public void State_Clip_Equals_SetClip([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);
}
}
public class WrapModeTests
{
[Test]
public void WrapMode_Equals_Clip_WrapMode([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.wrapMode, state.wrapMode);
}
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: 8cb3c934bf3f0534a8b954abe8c4984d
timeCreated: 1498676303
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: