AxisStateTests.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System.Collections;
  2. using NUnit.Framework;
  3. using Cinemachine;
  4. using UnityEngine;
  5. namespace Tests.Editor
  6. {
  7. public class AxisStateTests
  8. {
  9. struct TestAxisProvider : AxisState.IInputAxisProvider
  10. {
  11. public float value;
  12. public TestAxisProvider(float value)
  13. {
  14. this.value = value;
  15. }
  16. public float GetAxisValue(int axis)
  17. {
  18. return value;
  19. }
  20. }
  21. static IEnumerable AxisStateTestCases
  22. {
  23. get
  24. {
  25. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.1f).Returns(1.0f);
  26. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.5f).Returns(5.0f);
  27. yield return new TestCaseData(-100f, 100f, false, 1f, 0.5f, 0.5f, false, 1.0f).Returns(1.0f);
  28. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 100.0f).Returns(10.0f);
  29. yield return new TestCaseData(-13f, 5f, false, 10f, 0.5f, 0.5f, false, 100.0f).Returns(5.0f);
  30. yield return new TestCaseData(-13f, 5f, true, 10f, 0.5f, 0.5f, false, 100.0f).Returns(-12.0f);
  31. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, true, 0.1f).Returns(-1.0f);
  32. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, true, 0.5f).Returns(-5.0f);
  33. yield return new TestCaseData(-100f, 100f, false, 1f, 0.5f, 0.5f, true, 1.0f).Returns(-1.0f);
  34. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, true, 100.0f).Returns(-10.0f);
  35. yield return new TestCaseData(-13f, 5f, false, 10f, 0.5f, 0.5f, true, 100.0f).Returns(-13.0f);
  36. yield return new TestCaseData(-13f, 5f, true, 10f, 0.5f, 0.5f, true, 100.0f).Returns(4.0f);
  37. }
  38. }
  39. [Test, TestCaseSource(nameof(AxisStateTestCases))]
  40. public float TestAxisState(float minValue, float maxValue, bool wrap,
  41. float maxSpeed, float accelTime, float decelTime,
  42. bool invert, float axisValue)
  43. {
  44. var axisState = new AxisState(minValue, maxValue, wrap, false, maxSpeed, accelTime, decelTime, null, invert);
  45. axisState.SetInputAxisProvider(0, new TestAxisProvider(axisValue));
  46. axisState.Validate();
  47. var success = axisState.Update(1.0f);
  48. Assert.IsTrue(success, "Update had no effect");
  49. return axisState.Value;
  50. }
  51. static IEnumerable RecenteringTestCases
  52. {
  53. get
  54. {
  55. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.1f, true, 0.01f, 0.0f);
  56. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.1f, true, 5f, 0.180375189f);
  57. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.1f, false, 0.01f, 1.0f);
  58. yield return new TestCaseData(-100f, 100f, false, 10f, 0.5f, 0.5f, false, 0.1f, false, 5f, 1.0f);
  59. }
  60. }
  61. [Test, TestCaseSource(nameof(RecenteringTestCases))]
  62. public void TestRecentering(float minValue, float maxValue, bool wrap,
  63. float maxSpeed, float accelTime, float decelTime, bool invert, float axisValue,
  64. bool enabled, float recenteringTime, float expectedValue)
  65. {
  66. var axisState = new AxisState(minValue, maxValue, wrap, false, maxSpeed, accelTime, decelTime, null, invert);
  67. axisState.SetInputAxisProvider(0, new TestAxisProvider(axisValue));
  68. axisState.Validate();
  69. var success = axisState.Update(1.0f);
  70. Assert.IsTrue(success, "Update had no effect");
  71. }
  72. }
  73. }