LinqTests.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.Threading.Tasks;
  3. using NUnit.Framework;
  4. namespace JBrown.TaskExtensions.Tests
  5. {
  6. [TestFixture]
  7. public class LinqTests
  8. {
  9. [Test(Description = "LINQ 'select' syntax works")]
  10. public void Select_Syntax_Works()
  11. {
  12. var projected =
  13. from x in Task.FromResult(2)
  14. select x * 2;
  15. Assert.AreEqual(4, projected.Result);
  16. }
  17. [Test(Description = "LINQ chained 'select' syntax works")]
  18. public void Chained_Select_Syntax_Works()
  19. {
  20. var projected =
  21. from x in Task.FromResult(2)
  22. from y in Task.FromResult(x)
  23. select x * y;
  24. Assert.AreEqual(4, projected.Result);
  25. }
  26. [Test(Description = "LINQ nested 'select' syntax works")]
  27. public void Nested_Select_Syntax_Works()
  28. {
  29. var projected =
  30. from x in Task.FromResult(2)
  31. select
  32. (from y in Task.FromResult(3)
  33. select x + y);
  34. Assert.AreEqual(5, projected.Result);
  35. }
  36. [Test(Description = "Failures propagate correctly")]
  37. public void Failures_Propagate_Correctly()
  38. {
  39. Func<int> alwaysThrows = () =>
  40. {
  41. throw new Exception("always fails");
  42. };
  43. var task =
  44. from x in Task.Run(alwaysThrows)
  45. select x * 2;
  46. Assert.Throws<AggregateException>(() => task.Wait());
  47. }
  48. }
  49. }