| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| using Google.Apis.Util; |
| using System; |
| using System.Threading; |
| using System.Threading.Tasks; |
| using Xunit; |
|
|
| namespace Google.Apis.Tests.Apis.Utils |
| { |
| public class TaskExtensionsTest |
| { |
| [Fact] |
| public void WithCancellationToken_None() |
| { |
| var task = new TaskCompletionSource<int>().Task; |
| |
| var result = task.WithCancellationToken(CancellationToken.None); |
| Assert.Same(task, result); |
| } |
|
|
| [Fact] |
| public async Task WithCancellationToken_TokenIsCancelled() |
| { |
| var cts = new CancellationTokenSource(); |
| var tcs = new TaskCompletionSource<int>(); |
|
|
| var result = tcs.Task.WithCancellationToken(cts.Token); |
| cts.Cancel(); |
|
|
| await Assert.ThrowsAsync<TaskCanceledException>(() => result); |
| } |
|
|
| [Fact] |
| public async Task WithCancellationToken_TaskIsCancelled() |
| { |
| var cts = new CancellationTokenSource(); |
| var tcs = new TaskCompletionSource<int>(); |
|
|
| var result = tcs.Task.WithCancellationToken(cts.Token); |
| tcs.SetCanceled(); |
|
|
| await Assert.ThrowsAsync<TaskCanceledException>(() => result); |
| } |
|
|
| [Fact] |
| public async Task WithCancellationToken_TaskIsFaulted() |
| { |
| var cts = new CancellationTokenSource(); |
| var tcs = new TaskCompletionSource<int>(); |
|
|
| var result = tcs.Task.WithCancellationToken(cts.Token); |
| var exception = new Exception(); |
| tcs.SetException(exception); |
|
|
| var caught = await Assert.ThrowsAsync<Exception>(() => result); |
| Assert.Same(exception, caught); |
| } |
|
|
| [Fact] |
| public async Task WithCancellationToken_TaskCompletes() |
| { |
| var cts = new CancellationTokenSource(); |
| var tcs = new TaskCompletionSource<int>(); |
|
|
| var result = tcs.Task.WithCancellationToken(cts.Token); |
| tcs.SetResult(5); |
|
|
| Assert.Equal(5, await result); |
| } |
| } |
| } |
|
|