public void WhenSandboxEntersProtectedContext_AbortsAreDeferred() { StructuredDocumentWriter writer = new StructuredDocumentWriter(); bool completed = false; Sandbox sandbox = new Sandbox(); ManualResetEvent barrier = new ManualResetEvent(false); Tasks.StartThreadTask("Wake", () => { barrier.WaitOne(); sandbox.Abort(TestOutcome.Canceled, "Canceled for testing purposes."); }); TestOutcome outcome = sandbox.Run(writer, () => { using (sandbox.Protect()) { barrier.Set(); Thread.Sleep(300); completed = true; } Thread.Sleep(300); }, "Run Description"); Assert.IsTrue(completed); Assert.AreEqual(TestOutcome.Canceled, outcome); Assert.Contains(writer.ToString(), "Canceled for testing purposes."); }
public WhenAborted(bool abortTwice) { abortedSandbox = new Sandbox(); abortedSandbox.Abort(TestOutcome.Canceled, "Abort message."); if (abortTwice) abortedSandbox.Abort(TestOutcome.Passed, "A different message."); }
public void RunCanBeAbortedInProgress() { StructuredDocumentWriter writer = new StructuredDocumentWriter(); ManualResetEvent ready = new ManualResetEvent(false); bool completed = false; Sandbox sandbox = new Sandbox(); Tasks.StartThreadTask("Background abort.", () => { ready.WaitOne(); sandbox.Abort(TestOutcome.Canceled, "Test was canceled."); }); TestOutcome outcome = sandbox.Run(writer, () => { ready.Set(); Thread.Sleep(10000); completed = true; }, "Run Description"); Assert.IsFalse(completed, "The action should have been aborted prior to completion."); Assert.AreEqual(TestOutcome.Canceled, outcome); Assert.AreEqual(TestOutcome.Canceled, sandbox.AbortOutcome); Assert.AreEqual("Test was canceled.", sandbox.AbortMessage); Assert.IsTrue(sandbox.WasAborted); Assert.Contains(writer.ToString(), "Run Description"); Assert.Contains(writer.ToString(), "Test was canceled."); }