public void IAsyncAction_StartAsTask_CreatedOnly()
		{
			var action = new MockAsyncAction();

			action.Status = AsyncStatus.Error;
			Assert.Throws<InvalidOperationException>(() => action.StartAsTask());

			action.Status = AsyncStatus.Started;
			Assert.Throws<InvalidOperationException>(() => action.StartAsTask());

			action.Status = AsyncStatus.Completed;
			Assert.Throws<InvalidOperationException>(() => action.StartAsTask());

			action.Status = AsyncStatus.Canceled;
			Assert.Throws<InvalidOperationException>(() => action.StartAsTask());
		}
		public void IAsyncAction_StartAsTask_StartStatus()
		{
			var action = new MockAsyncAction();
			Task t = action.StartAsTask();

			Assert.AreEqual (TaskStatus.WaitingForActivation, t.Status);
			Assert.AreEqual (AsyncStatus.Started, action.Status);
		}
		public void IAsyncAction_StartAsTask_Canceled()
		{
			var action = new MockAsyncAction();
			Task t = action.StartAsTask();

			action.Cancel();

			Assert.Throws<AggregateException> (() => t.Wait());
			Assert.AreEqual (TaskStatus.Canceled, t.Status);
		}
		public void IAsyncAction_StartAsTask_Error()
		{
			var error = new Exception ("error");
			var action = new MockAsyncAction();
			Task t = action.StartAsTask();

			action.ErrorCode = error;
			action.Status = AsyncStatus.Error;
			action.Completed (action);

			Assert.IsTrue (t.IsFaulted);
			Assert.AreSame (error, t.Exception.InnerExceptions.First());
			Assert.Throws<AggregateException> (() => t.Wait());
		}
		public void IAsyncAction_StartAsTask_Completed()
		{
			var action = new MockAsyncAction();
			Task t = action.StartAsTask();

			action.Status = AsyncStatus.Completed;
			action.Completed (action);

			Assert.AreEqual (TaskStatus.RanToCompletion, t.Status);
		}