public async Task RunAction_Should_Raise_ActionCompleted_Event_Appropriately(bool cancelAction, bool expectedEventRaised, string message) { // ARRANGE var eventRaised = false; Func <CancellationTokenSource, Task> provider = (tokenSource) => Task.Factory.StartNew(() => { Thread.Sleep(500); tokenSource.Token.ThrowIfCancellationRequested(); }, tokenSource.Token); Func <bool> cancelCondition = () => cancelAction; var wrapper = new CancellableActionWrapper(provider, cancelCondition); wrapper.ActionCompleted += delegate(object source, EventArgs e) { eventRaised = true; }; // ACT await wrapper.RunAction(); // ASSERT eventRaised.Should().Be(expectedEventRaised, message); }
public async Task RunAction_Should_Cancel_Action_Appropriately(int actionDelay, int cancelDelay, bool expectedCompletion, string message) { // ARRANGE var actionCompleted = false; Func <CancellationTokenSource, Task> provider = (tokenSource) => Task.Factory.StartNew(() => { Thread.Sleep(actionDelay); tokenSource.Token.ThrowIfCancellationRequested(); actionCompleted = true; }, tokenSource.Token); Func <bool> cancelCondition = () => { Thread.Sleep(cancelDelay); return(true); }; var wrapper = new CancellableActionWrapper(provider, cancelCondition); // ACT await wrapper.RunAction(); // ASSERT actionCompleted.Should().Be(expectedCompletion, message); }
public async Task RunAction_Should_Raise_ActionFaulted_Event_Appropriately(bool faultAction, bool expectedEventRaised, string message) { // ARRANGE var errorMessage = Guid.NewGuid().ToString(); var eventRaised = false; AggregateException exception = null; Func <CancellationTokenSource, Task> provider = (tokenSource) => Task.Factory.StartNew(() => { Thread.Sleep(500); if (faultAction) { throw new Exception(errorMessage); } }, tokenSource.Token); Func <bool> cancelCondition = () => false; var wrapper = new CancellableActionWrapper(provider, cancelCondition); wrapper.ActionFaulted += delegate(object source, FaultedEventArgs e) { eventRaised = true; exception = e.Exception; }; // ACT await wrapper.RunAction(); // ASSERT eventRaised.Should().Be(expectedEventRaised, message); if (faultAction) { exception.Should().NotBeNull(); exception.InnerException.Message.Should().Be(errorMessage); } else { exception.Should().BeNull(); } }
public async Task RunAction_Should_Ran_To_Completion_If_Not_Cancelled() { // ARRANGE var actionCompleted = false; Func <CancellationTokenSource, Task> provider = (tokenSource) => Task.Factory.StartNew(() => { Thread.Sleep(1000); tokenSource.Token.ThrowIfCancellationRequested(); actionCompleted = true; }, tokenSource.Token); Func <bool> cancelCondition = () => false; var wrapper = new CancellableActionWrapper(provider, cancelCondition); // ACT await wrapper.RunAction(); // ASSERT actionCompleted.Should().BeTrue(); }