Ejemplo n.º 1
0
        public IEnumerator BeginSessionFailure()
        {
            var states = new List <XrSessionState>();

            MockRuntime.Instance.TestCallback = (methodName, param) =>
            {
                if (methodName == nameof(OpenXRFeature.OnSessionStateChange))
                {
                    var newState = (XrSessionState)((MockRuntime.XrSessionStateChangedParams)param).NewState;
                    states.Add(newState);
                }

                return(true);
            };

            MockRuntime.SetFunctionCallback("xrBeginSession", (name) => XrResult.RuntimeFailure);

            InitializeAndStart();

            yield return(null);

            Assert.IsTrue(base.IsRunning <XRDisplaySubsystem>());

            Assert.IsTrue(states.Contains(XrSessionState.Ready));
            Assert.IsFalse(states.Contains(XrSessionState.Synchronized));
            Assert.IsFalse(states.Contains(XrSessionState.Visible));
            Assert.IsFalse(states.Contains(XrSessionState.Focused));
        }
        public IEnumerator CreateSwapChainRuntimeError()
        {
            MockRuntime.SetFunctionCallback("xrCreateSwapchain", (func) => XrResult.RuntimeFailure);

            InitializeAndStart();

            yield return(new WaitForLoaderShutdown());

            Assert.IsTrue(OpenXRLoader.Instance == null, "OpenXR should not be initialized");
        }
        public IEnumerator CreateSessionRuntimeError()
        {
            MockRuntime.SetFunctionCallback("xrCreateSession", (func) => XrResult.RuntimeFailure);

            InitializeAndStart();

            yield return(null);

            Assert.IsTrue(DoesDiagnosticReportContain(new System.Text.RegularExpressions.Regex(@"xrCreateSession: XR_ERROR_RUNTIME_FAILURE")));
            Assert.IsTrue(OpenXRLoader.Instance.currentLoaderState == OpenXRLoaderBase.LoaderState.Stopped, "OpenXR should be stopped");
        }
Ejemplo n.º 4
0
        public IEnumerator CallbacksClearedOnLoaderShutdown()
        {
            MockRuntime.SetFunctionCallback("xrBeginSession", (func) => XrResult.Success);

            InitializeAndStart();

            yield return(new WaitForXrFrame(1));

            StopAndShutdown();

            Assert.IsTrue(OpenXRLoader.Instance == null, "OpenXR should not be running");
            Assert.IsNull(MockRuntime.GetBeforeFunctionCallback("xrBeginSession"), "Callback should have been cleared when loader shut down");
        }
Ejemplo n.º 5
0
        public IEnumerator BeforeFunctionCallbackSuccess()
        {
            var createInstanceCalled = false;

            MockRuntime.SetFunctionCallback("xrCreateInstance", (name) =>
            {
                createInstanceCalled = true;
                return(XrResult.Success);
            });

            InitializeAndStart();

            yield return(new WaitForXrFrame(1));

            Assert.IsTrue(createInstanceCalled, "xrCreateInstance callback was not called");
        }
Ejemplo n.º 6
0
        public IEnumerator AfterFunctionCallback( )
        {
            var createInstanceCalled  = false;
            var createInstanceSuccess = false;

            MockRuntime.SetFunctionCallback("xrCreateInstance", (name, result) =>
            {
                createInstanceCalled  = true;
                createInstanceSuccess = result == XrResult.Success;
            });

            InitializeAndStart();

            yield return(new WaitForXrFrame(1));

            Assert.IsTrue(createInstanceCalled, "xrCreateInstance callback was not called");
            Assert.IsTrue(createInstanceSuccess, "xrCreateInstance result was not XR_SUCCESS");
        }
Ejemplo n.º 7
0
        public void BeforeFunctionCallbackError()
        {
            var createInstanceCalled = false;

            MockRuntime.SetFunctionCallback("xrCreateInstance", (name) =>
            {
                createInstanceCalled = true;
                return(XrResult.RuntimeFailure);
            });

            LogAssert.ignoreFailingMessages = true;
            InitializeAndStart();
            LogAssert.ignoreFailingMessages = false;

            Assert.IsTrue(OpenXRLoaderBase.Instance == null, "OpenXR instance should have failed to initialize");

            Assert.IsTrue(createInstanceCalled, "xrCreateInstance callback was not called");
        }
Ejemplo n.º 8
0
        public IEnumerator BeginSessionSuccessWithValues([ValueSource("beginSessionSuccessResults")]
                                                         XrResult successResult)
        {
            var states = new List <XrSessionState>();

            MockRuntime.Instance.TestCallback = (methodName, param) =>
            {
                if (methodName == nameof(OpenXRFeature.OnSessionStateChange))
                {
                    var newState = (XrSessionState)((MockRuntime.XrSessionStateChangedParams)param).NewState;
                    states.Add(newState);
                }

                return(true);
            };

            MockRuntime.SetFunctionCallback("xrBeginSession", (name) => successResult);

            base.InitializeAndStart();

            yield return(null);

            Assert.IsTrue(base.IsRunning <XRDisplaySubsystem>());

            switch (successResult)
            {
            case XrResult.Success:
                Assert.IsTrue(states.Contains(XrSessionState.Ready));
                Assert.IsTrue(states.Contains(XrSessionState.Synchronized));
                Assert.IsTrue(states.Contains(XrSessionState.Visible));
                Assert.IsTrue(states.Contains(XrSessionState.Focused));
                break;

            case XrResult.LossPending:
                Assert.IsTrue(states.Contains(XrSessionState.Ready));
                Assert.IsFalse(states.Contains(XrSessionState.Synchronized));
                Assert.IsFalse(states.Contains(XrSessionState.Visible));
                Assert.IsFalse(states.Contains(XrSessionState.Focused));
                break;
            }
        }
Ejemplo n.º 9
0
        public IEnumerator CreateSessionFailure()
        {
            bool sawCreateSession = false;

            MockRuntime.Instance.TestCallback = (methodName, param) =>
            {
                if (methodName == nameof(OpenXRFeature.OnSessionCreate))
                {
                    sawCreateSession = true;
                }

                return(true);
            };

            MockRuntime.SetFunctionCallback("xrCreateSession", (name) => XrResult.RuntimeFailure);

            base.InitializeAndStart();

            yield return(null);

            Assert.IsFalse(sawCreateSession);
        }
        public IEnumerator CheckDisplayRestartAfterStopSendRestartEvent()
        {
            // Initialize and make sure the frame loop is running
            InitializeAndStart();
            yield return(new WaitForXrFrame());

            // Stop the session and make sure xrEndSession is called
            var endSessionCalled = false;

            MockRuntime.SetFunctionCallback("xrEndSession", (func, result) => endSessionCalled = true);

            Stop();

            Assert.IsTrue(endSessionCalled);

            // Restart the display subsystem which should force a restart
            loader.displaySubsystem.Start();

            // Wait for the restart to finish and then wait for a single Xr Frame, if things restarted
            // properly then the frame loop should be back up and running
            yield return(new WaitForLoaderRestart());

            yield return(new WaitForXrFrame());
        }