TrackedPoseDriverTests.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. using UnityEngine;
  2. using UnityEngine.TestTools;
  3. using NUnit.Framework;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. #if ENABLE_VR || ENABLE_AR
  8. using UnityEngine.Experimental.XR.Interaction;
  9. using UnityEngine.SpatialTracking;
  10. namespace UnityEngine.SpatialTracking
  11. {
  12. [TestFixture]
  13. internal class TrackedPoseDriverTests
  14. {
  15. internal class TestTrackedPoseDriverWrapper : TrackedPoseDriver
  16. {
  17. public void FakeUpdate()
  18. {
  19. Update();
  20. }
  21. public void FakeOnBeforeRender()
  22. {
  23. OnBeforeRender();
  24. }
  25. }
  26. static Vector3 testpos = new Vector3(1.0f, 2.0f, 3.0f);
  27. static Quaternion testrot = new Quaternion(0.09853293f, 0.09853293f, 0.09853293f, 0.9853293f);
  28. internal class TestPoseProvider : BasePoseProvider
  29. {
  30. public PoseDataFlags flags = PoseDataFlags.Position | PoseDataFlags.Rotation;
  31. public override PoseDataFlags GetPoseFromProvider(out Pose output)
  32. {
  33. Pose tmp = new Pose();
  34. tmp.position = testpos;
  35. tmp.rotation = testrot;
  36. output = tmp;
  37. return flags;
  38. }
  39. }
  40. internal static TestTrackedPoseDriverWrapper CreateGameObjectWithTPD()
  41. {
  42. GameObject go = new GameObject();
  43. TestTrackedPoseDriverWrapper tpd = go.AddComponent<TestTrackedPoseDriverWrapper>();
  44. return tpd;
  45. }
  46. internal static BasePoseProvider CreatePoseProviderOnTPD(TestTrackedPoseDriverWrapper tpd)
  47. {
  48. TestPoseProvider tpp = tpd.gameObject.AddComponent<TestPoseProvider>();
  49. tpd.poseProviderComponent = tpp;
  50. return tpp;
  51. }
  52. [Test]
  53. public void TPDApiSetTest()
  54. {
  55. TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
  56. bool ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRDevice, TrackedPoseDriver.TrackedPose.Head);
  57. Assert.That(ret, Is.EqualTo(true));
  58. Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.Head));
  59. ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRDevice, TrackedPoseDriver.TrackedPose.LeftPose);
  60. Assert.That(ret, Is.EqualTo(false));
  61. Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.Head));
  62. ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRController, TrackedPoseDriver.TrackedPose.RightPose);
  63. Assert.That(ret, Is.EqualTo(true));
  64. Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.RightPose));
  65. }
  66. [Test]
  67. public void TPDPoseProviderTest()
  68. {
  69. TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
  70. BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
  71. Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
  72. tpd.FakeUpdate();
  73. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  74. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  75. }
  76. public void Reset(GameObject go)
  77. {
  78. go.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
  79. go.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f);
  80. }
  81. [Test]
  82. public void TPDUpdateOptionTest()
  83. {
  84. TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
  85. BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
  86. Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
  87. // check the update/before render case
  88. tpd.updateType = TrackedPoseDriver.UpdateType.BeforeRender;
  89. tpd.trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;
  90. Reset(tpd.gameObject);
  91. tpd.FakeUpdate();
  92. Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
  93. Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
  94. tpd.FakeOnBeforeRender();
  95. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  96. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  97. Reset(tpd.gameObject);
  98. tpd.updateType = TrackedPoseDriver.UpdateType.Update;
  99. tpd.trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;
  100. tpd.FakeOnBeforeRender();
  101. Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
  102. Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
  103. tpd.FakeUpdate();
  104. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  105. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  106. // check the rot/pos case
  107. tpd.updateType = TrackedPoseDriver.UpdateType.UpdateAndBeforeRender;
  108. tpd.trackingType = TrackedPoseDriver.TrackingType.PositionOnly;
  109. Reset(tpd.gameObject);
  110. tpd.FakeUpdate();
  111. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  112. Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
  113. tpd.trackingType = TrackedPoseDriver.TrackingType.RotationOnly;
  114. Reset(tpd.gameObject);
  115. tpd.FakeUpdate();
  116. Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
  117. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  118. }
  119. [Test]
  120. public void TPDPartialUpdateDataTest()
  121. {
  122. TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
  123. BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
  124. TestPoseProvider tpp = pp as TestPoseProvider;
  125. Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
  126. tpp.flags = PoseDataFlags.Position;
  127. tpd.FakeUpdate();
  128. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  129. Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
  130. Reset(tpd.gameObject);
  131. tpp.flags = PoseDataFlags.Rotation;
  132. tpd.FakeUpdate();
  133. Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
  134. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  135. Reset(tpd.gameObject);
  136. tpp.flags = PoseDataFlags.Position | PoseDataFlags.Rotation;
  137. tpd.FakeUpdate();
  138. Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
  139. Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
  140. }
  141. }
  142. }
  143. #endif