PageRenderTime 39ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/System.Reactive.Tests/System.Reactive.Threading.Tasks/TaskObservableExtensionsTest.cs

https://github.com/gshackles/mono-reactive
C# | 66 lines | 59 code | 5 blank | 2 comment | 5 complexity | f4e51bf2e724930ebc3d5ab8dcb2185e MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Reactive;
  6. using System.Reactive.Concurrency;
  7. using System.Reactive.Disposables;
  8. using System.Reactive.Linq;
  9. using System.Reactive.Threading.Tasks;
  10. using System.Threading;
  11. using System.Threading.Tasks;
  12. using NUnit.Framework;
  13. namespace System.Reactive.Threading.Tasks.Tests
  14. {
  15. [TestFixture]
  16. public class TaskObservableExtensionsTest
  17. {
  18. [Test]
  19. public void ToObservable ()
  20. {
  21. ToObservable (0);
  22. }
  23. [Test]
  24. public void ToObservable2 ()
  25. {
  26. ToObservable (1);
  27. }
  28. [Test]
  29. public void ToObservable3 ()
  30. {
  31. ToObservable (2);
  32. }
  33. void ToObservable (int startStage)
  34. {
  35. // stupid one.
  36. var task = new Task<int> (() => {
  37. Thread.Sleep (100);
  38. return 5;
  39. });
  40. if (startStage == 1)
  41. task.Start ();
  42. var source = task.ToObservable ();
  43. if (startStage == 2)
  44. task.Start ();
  45. int result = 0;
  46. bool done = false;
  47. source.Subscribe (v => result = v, () => done = true);
  48. Assert.IsTrue (SpinWait.SpinUntil (() => done, 200), "#1");
  49. Assert.AreEqual (5, result, "#2");
  50. }
  51. [Test]
  52. public void ToTask ()
  53. {
  54. // stupid one.
  55. var task = Observable.Range (0, 3).ToTask ();
  56. SpinWait.SpinUntil (() => task.Status == TaskStatus.RanToCompletion, 100); // should be enough to wait.
  57. Assert.AreEqual (TaskStatus.RanToCompletion, task.Status, "#1");
  58. Assert.AreEqual (2, task.Result, "#2");
  59. }
  60. }
  61. }