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"); }
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"); }
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"); }
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"); }
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"); }
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; } }
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()); }