FateViewer/Assets/Scripts/SimpleAnimationComponent/Tests/PlaymodeTests/SimpleAnimationTests.cs

136 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.TestTools;
using Object = UnityEngine.Object;
using NUnit.Framework;
using System.Collections;
public class SimpleAnimationTests
{
static SimpleAnimation Instantiate()
{
var go = new GameObject();
return go.AddComponent<SimpleAnimation>();
}
public class GetStates
{
[Test]
public void GetStates_WithNoStates_IEnumerator_MoveNext_ReturnsFalse()
{
SimpleAnimation animation = Instantiate();
IEnumerable<SimpleAnimation.State> states = animation.GetStates();
var it = states.GetEnumerator();
Assert.IsFalse(it.MoveNext());
}
[Test]
public void GetStates_WithNoStates_IEnumerator_Current_Throws()
{
SimpleAnimation animation = Instantiate();
IEnumerable<SimpleAnimation.State> states = animation.GetStates();
var it = states.GetEnumerator();
Assert.Throws<InvalidOperationException>(() => { SimpleAnimation.State state = it.Current; });
}
[Test]
public void GetStates_WithSingleState_IEnumerator_Returns_ValidState()
{
SimpleAnimation animation = Instantiate();
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
animation.AddClip(clipInstance, "SingleClip");
IEnumerable<SimpleAnimation.State> states = animation.GetStates();
var it = states.GetEnumerator();
it.MoveNext();
SimpleAnimation.State state = it.Current;
Assert.AreEqual("SingleClip", state.name);
}
[Test]
public void GetStates_ModifyStates_IEnumerator_MoveNext_Throws()
{
SimpleAnimation animation = Instantiate();
var clip = Resources.Load<AnimationClip>("LinearX");
var clipInstance = Object.Instantiate<AnimationClip>(clip);
animation.AddClip(clipInstance, "SingleClip");
IEnumerable<SimpleAnimation.State> states = animation.GetStates();
var it = states.GetEnumerator();
animation.RemoveState("SingleClip");
Assert.Throws<InvalidOperationException>(() => { it.MoveNext(); });
}
}
public class PrefabBased
{
[UnityTest]
public IEnumerator PlayAutomatically_False_DoesNotMoveObject()
{
var prefab = Resources.Load<GameObject>("WithSimpleAnimation");
var simpleAnim = prefab.GetComponent<SimpleAnimation>();
simpleAnim.playAutomatically = false;
var instance = GameObject.Instantiate<GameObject>(prefab);
yield return new WaitForSeconds(0.1f);
Assert.Zero(instance.transform.position.magnitude);
yield return null;
}
[UnityTest]
public IEnumerator PlayAutomatically_True_DoesMoveObject()
{
var prefab = Resources.Load<GameObject>("WithSimpleAnimation");
prefab.GetComponent<SimpleAnimation>().playAutomatically = true;
var instance = GameObject.Instantiate<GameObject>(prefab);
yield return new WaitForSeconds(0.1f);
Assert.Zero(instance.transform.position.magnitude);
yield return null;
}
}
public class LegacyClips
{
[Test]
public void SetClip_WithLegacyClip_Throws_ArgumentException()
{
SimpleAnimation animation = Instantiate();
var clip = new AnimationClip();
clip.legacy = true;
Assert.Throws<ArgumentException>(() => { animation.clip = clip; });
}
[Test]
public void AddClip_WithLegacyClip_Throws_ArgumentException()
{
SimpleAnimation animation = Instantiate();
var clip = new AnimationClip();
clip.legacy = true;
Assert.Throws<ArgumentException>(() => { animation.AddClip(clip, "DefaultName");});
}
[Test]
public void AddState_WithLegacyClip_Throws_ArgumentException()
{
SimpleAnimation animation = Instantiate();
var clip = new AnimationClip();
clip.legacy = true;
Assert.Throws<ArgumentException>(() => { animation.AddState(clip, "DefaultName"); });
}
}
//Event Receiver for FiresEvent AnimationClip
public class ReceivesEvent : MonoBehaviour
{
public int eventCount;
void Event()
{
eventCount++;
}
}
}