PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/System.Reactive.Tests/System.Reactive.Subjects/ReplaySubjectTest.cs

https://github.com/gshackles/mono-reactive
C# | 78 lines | 73 code | 5 blank | 0 comment | 0 complexity | 771bf1c858de0796f42953efbadec6f1 MD5 | raw file
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Reactive;
  5. using System.Reactive.Concurrency;
  6. using System.Reactive.Disposables;
  7. using System.Reactive.Linq;
  8. using System.Reactive.Subjects;
  9. using System.Threading;
  10. using NUnit.Framework;
  11. namespace System.Reactive.Subjects.Tests
  12. {
  13. [TestFixture]
  14. public class ReplaySubjectTest
  15. {
  16. class MyException : Exception
  17. {
  18. }
  19. class ErrorScheduler : IScheduler
  20. {
  21. public DateTimeOffset Now { get { return DateTimeOffset.Now; } }
  22. public IDisposable Schedule<TState> (TState state, Func<IScheduler, TState, IDisposable> action)
  23. {
  24. throw new MyException ();
  25. }
  26. public IDisposable Schedule<TState> (TState state, DateTimeOffset dueTime, Func<IScheduler, TState, IDisposable> action)
  27. {
  28. throw new MyException ();
  29. }
  30. public IDisposable Schedule<TState> (TState state, TimeSpan dueTime, Func<IScheduler, TState, IDisposable> action)
  31. {
  32. throw new MyException ();
  33. }
  34. }
  35. [Test]
  36. public void OnNextThenSubscription ()
  37. {
  38. var sub = new ReplaySubject<string> ();
  39. sub.OnNext ("X");
  40. string s1 = null, s2 = null, s3 = null;
  41. sub.Subscribe (s => s1 += s);
  42. sub.OnNext ("Y");
  43. sub.Subscribe (s => s2 += s);
  44. sub.OnNext ("Z");
  45. sub.OnCompleted ();
  46. sub.Subscribe (s => s3 += s);
  47. Assert.AreEqual ("XYZ", s1, "#1");
  48. Assert.AreEqual ("XYZ", s2, "#2");
  49. Assert.AreEqual ("XYZ", s3, "#3");
  50. }
  51. [Test]
  52. public void OnErrorThenOnNextAndSubscription ()
  53. {
  54. var sub = new ReplaySubject<string> ();
  55. sub.OnNext ("X");
  56. string s1 = null, s2 = null;
  57. bool error = false;
  58. sub.Subscribe (s => s1 += s, ex => error = true);
  59. sub.OnError (new Exception ());
  60. sub.OnNext ("Y"); // ignored.
  61. Assert.IsTrue (error, "#1");
  62. sub.Subscribe (s => s2 += s, ex => error = true);
  63. Assert.AreEqual ("X", s1, "#2");
  64. Assert.AreEqual ("X", s2, "#3");
  65. }
  66. [Test]
  67. public void SchedulerUsage ()
  68. {
  69. var sub = new ReplaySubject<int> (new ErrorScheduler ());
  70. sub.Subscribe (Console.WriteLine);
  71. }
  72. }
  73. }