123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- using UnityEngine;
- using UnityEngine.TestTools;
- using NUnit.Framework;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- #if ENABLE_VR || ENABLE_AR
- using UnityEngine.Experimental.XR.Interaction;
- using UnityEngine.SpatialTracking;
- namespace UnityEngine.SpatialTracking
- {
- [TestFixture]
- internal class TrackedPoseDriverTests
- {
- internal class TestTrackedPoseDriverWrapper : TrackedPoseDriver
- {
- public void FakeUpdate()
- {
- Update();
- }
- public void FakeOnBeforeRender()
- {
- OnBeforeRender();
- }
- }
- static Vector3 testpos = new Vector3(1.0f, 2.0f, 3.0f);
- static Quaternion testrot = new Quaternion(0.09853293f, 0.09853293f, 0.09853293f, 0.9853293f);
- internal class TestPoseProvider : BasePoseProvider
- {
- public PoseDataFlags flags = PoseDataFlags.Position | PoseDataFlags.Rotation;
- public override PoseDataFlags GetPoseFromProvider(out Pose output)
- {
- Pose tmp = new Pose();
- tmp.position = testpos;
- tmp.rotation = testrot;
- output = tmp;
- return flags;
- }
- }
- internal static TestTrackedPoseDriverWrapper CreateGameObjectWithTPD()
- {
- GameObject go = new GameObject();
- TestTrackedPoseDriverWrapper tpd = go.AddComponent<TestTrackedPoseDriverWrapper>();
- return tpd;
- }
- internal static BasePoseProvider CreatePoseProviderOnTPD(TestTrackedPoseDriverWrapper tpd)
- {
- TestPoseProvider tpp = tpd.gameObject.AddComponent<TestPoseProvider>();
- tpd.poseProviderComponent = tpp;
- return tpp;
- }
- [Test]
- public void TPDApiSetTest()
- {
- TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
- bool ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRDevice, TrackedPoseDriver.TrackedPose.Head);
- Assert.That(ret, Is.EqualTo(true));
- Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.Head));
- ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRDevice, TrackedPoseDriver.TrackedPose.LeftPose);
- Assert.That(ret, Is.EqualTo(false));
- Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.Head));
- ret = tpd.SetPoseSource(TrackedPoseDriver.DeviceType.GenericXRController, TrackedPoseDriver.TrackedPose.RightPose);
- Assert.That(ret, Is.EqualTo(true));
- Assert.That(tpd.poseSource, Is.EqualTo(TrackedPoseDriver.TrackedPose.RightPose));
- }
- [Test]
- public void TPDPoseProviderTest()
- {
- TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
- BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
- Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- }
- public void Reset(GameObject go)
- {
- go.transform.position = new Vector3(0.0f, 0.0f, 0.0f);
- go.transform.rotation = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f);
- }
- [Test]
- public void TPDUpdateOptionTest()
- {
- TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
- BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
- Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
- // check the update/before render case
- tpd.updateType = TrackedPoseDriver.UpdateType.BeforeRender;
- tpd.trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;
- Reset(tpd.gameObject);
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
- Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
- tpd.FakeOnBeforeRender();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- Reset(tpd.gameObject);
- tpd.updateType = TrackedPoseDriver.UpdateType.Update;
- tpd.trackingType = TrackedPoseDriver.TrackingType.RotationAndPosition;
- tpd.FakeOnBeforeRender();
- Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
- Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- // check the rot/pos case
- tpd.updateType = TrackedPoseDriver.UpdateType.UpdateAndBeforeRender;
- tpd.trackingType = TrackedPoseDriver.TrackingType.PositionOnly;
- Reset(tpd.gameObject);
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
- tpd.trackingType = TrackedPoseDriver.TrackingType.RotationOnly;
- Reset(tpd.gameObject);
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- }
- [Test]
- public void TPDPartialUpdateDataTest()
- {
- TestTrackedPoseDriverWrapper tpd = CreateGameObjectWithTPD();
- BasePoseProvider pp = CreatePoseProviderOnTPD(tpd);
- TestPoseProvider tpp = pp as TestPoseProvider;
- Assert.That(tpd.poseProviderComponent, Is.EqualTo(pp));
- tpp.flags = PoseDataFlags.Position;
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(!tpd.gameObject.transform.rotation.Equals(testrot));
- Reset(tpd.gameObject);
- tpp.flags = PoseDataFlags.Rotation;
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.Not.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- Reset(tpd.gameObject);
- tpp.flags = PoseDataFlags.Position | PoseDataFlags.Rotation;
- tpd.FakeUpdate();
- Assert.That(tpd.gameObject.transform.position, Is.EqualTo(testpos));
- Assert.That(tpd.gameObject.transform.rotation.Equals(testrot));
- }
- }
- }
- #endif
-
|