public void IAsyncOperation_AsTask_StartStatus()
		{
			var operation = new MockAsyncOperation<bool>();
			Task<bool> t = operation.AsTask();

			Assert.AreEqual (TaskStatus.WaitingForActivation, t.Status);
			Assert.AreEqual (AsyncStatus.Started, operation.Status);
		}
		public void IAsyncOperation_AsTask_Error()
		{
			var error = new Exception("error");
			var operation = new MockAsyncOperation<bool>();
			Task<bool> t = operation.AsTask();

			operation.ErrorCode = error;
			operation.Status = AsyncStatus.Error;
			operation.Completed (operation, operation.Status);

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

			action.Cancel();

			Assert.Throws<AggregateException>(t.Wait);
			Assert.AreEqual (TaskStatus.Canceled, t.Status);
		}
		public void IAsyncOperation_AsTask_Completed()
		{
			var operation = new MockAsyncOperation<bool>();
			Task<bool> t = operation.AsTask();

			operation.Result = true;
			operation.Status = AsyncStatus.Completed;
			operation.Completed (operation, operation.Status);

			Assert.AreEqual (TaskStatus.RanToCompletion, t.Status);
			Assert.AreEqual (true, t.Result);
		}
		public void IAsyncOperation_StartAsTask_CreatedOnly()
		{
			var operation = new MockAsyncOperation<bool>();

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

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

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

			operation.Status = AsyncStatus.Canceled;
			Assert.Throws<InvalidOperationException>(() => operation.StartAsTask());
		}