ExceptionHandlingTests.cs 1003 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Threading;
  3. using System.Threading.Tasks;
  4. using NUnit.Framework;
  5. namespace JBrown.TaskExtensions.Tests
  6. {
  7. [TestFixture]
  8. public class ExceptionHandlingTests
  9. {
  10. [Test]
  11. public void Can_Handle_Exceptions()
  12. {
  13. Func<int> alwaysFails = () =>
  14. {
  15. throw new OverflowException();
  16. };
  17. var task = Task.Run(alwaysFails)
  18. .Except()
  19. .On<OverflowException>(() => 2);
  20. Assert.AreEqual(2, task.Result);
  21. }
  22. [Test]
  23. public void Other_Exceptions_Pass_Through()
  24. {
  25. Func<int> alwaysFails = () =>
  26. {
  27. throw new InvalidOperationException();
  28. };
  29. var task = Task.Run(alwaysFails)
  30. .Except()
  31. .On<OverflowException>(() => 2);
  32. Assert.Throws<AggregateException>(() => task.Wait());
  33. }
  34. [Test]
  35. public void Can_Replace_Canceled_Tasks()
  36. {
  37. var ct = new CancellationToken(canceled: true);
  38. var canceled = Task.Run(() => 1, ct);
  39. var task = canceled
  40. .Except()
  41. .WhenCanceled(() => 2);
  42. Assert.AreEqual(2, task.Result);
  43. }
  44. }
  45. }