ChainingTests.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 ChainingTests
  9. {
  10. [Test]
  11. public void Actions_Chained_To_Canceled_Tasks_Dont_Run()
  12. {
  13. var counter = 1;
  14. var ct = new CancellationToken(canceled: true);
  15. var task = Task.Run(() => 1, ct);
  16. var t = task.Then(() => { counter += 1; });
  17. Assert.Throws<AggregateException>(() => t.Wait());
  18. Assert.AreEqual(1, counter);
  19. }
  20. [Test]
  21. public void Actions_Chained_To_Failed_Tasks_Dont_Run()
  22. {
  23. var counter = 1;
  24. var task = new Task(() =>
  25. {
  26. throw new Exception("always fails");
  27. });
  28. var t = task.Then(() => { counter += 1; });
  29. task.Start();
  30. Assert.Throws<AggregateException>(() => t.Wait());
  31. Assert.AreEqual(1, counter);
  32. }
  33. [Test]
  34. public void Actions_Can_Be_Chained_To_Tasks()
  35. {
  36. var dummy = false;
  37. var counter = 1;
  38. var task = new Task(() => dummy = true);
  39. var t = task.Then(() => { counter += 1; });
  40. task.Start();
  41. t.Wait();
  42. Assert.AreEqual(2, counter);
  43. }
  44. [Test]
  45. public void Actions_Can_Be_Chained_To_Completed_Tasks()
  46. {
  47. var dummy = false;
  48. var counter = 1;
  49. var task = Task.Run(() => dummy = true);
  50. task.Wait();
  51. task.Then(() => counter += 1).Wait();
  52. Assert.AreEqual(2, counter);
  53. }
  54. }
  55. }