PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/System.Reactive.Tests/System.Reactive.Linq/ObservableEventsTest.cs

https://github.com/gshackles/mono-reactive
C# | 119 lines | 102 code | 15 blank | 2 comment | 3 complexity | 506330c911901aebc80d910450228765 MD5 | raw file
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Reactive;
  5. using System.Reactive.Linq;
  6. using System.Threading;
  7. using NUnit.Framework;
  8. namespace System.Reactive.Linq.Tests
  9. {
  10. [TestFixture]
  11. public class ObservableEventsTest
  12. {
  13. public class MyEventArgs : EventArgs
  14. {
  15. public MyEventArgs (string s)
  16. {
  17. Value = s;
  18. }
  19. public string Value { get; private set; }
  20. }
  21. public delegate void MyEventHandler (string arg);
  22. public delegate void MyEventHandler2 (MyEventArgs arg);
  23. public class EventHost
  24. {
  25. public event MyEventHandler MyEvent;
  26. public event MyEventHandler2 MyEvent2;
  27. public event EventHandler<EventArgs> StandardEvent;
  28. public bool HasMyEvent {
  29. get { return MyEvent != null; }
  30. }
  31. public bool HasMyEvent2 {
  32. get { return MyEvent2 != null; }
  33. }
  34. public bool HasStandardEvent {
  35. get { return StandardEvent != null; }
  36. }
  37. public void FireMyEvent (string s)
  38. {
  39. MyEvent (s);
  40. }
  41. public void FireMyEvent2 (string s)
  42. {
  43. MyEvent2 (new MyEventArgs (s));
  44. }
  45. public void FireStandardEvent ()
  46. {
  47. StandardEvent (this, EventArgs.Empty);
  48. }
  49. }
  50. [Test]
  51. public void TestAttachAndDetach ()
  52. {
  53. var h = new EventHost ();
  54. Assert.IsFalse (h.HasStandardEvent, "#1");
  55. var source = Observable.FromEventPattern<EventArgs> (h, "StandardEvent");
  56. Assert.IsFalse (h.HasStandardEvent, "#2"); // not subscribed yet
  57. bool received = false;
  58. var dis = source.Subscribe (v => received = true);
  59. Assert.IsTrue (h.HasStandardEvent, "#3");
  60. Assert.IsFalse (received, "#4");
  61. h.FireStandardEvent ();
  62. Assert.IsTrue (received, "#5");
  63. dis.Dispose (); // unsubscribe event handler
  64. Assert.IsFalse (h.HasStandardEvent, "#6");
  65. }
  66. [Test]
  67. public void TestAttachAndDetach2 ()
  68. {
  69. var h = new EventHost ();
  70. Assert.IsFalse (h.HasMyEvent, "#1");
  71. string value = null;
  72. // FromEvent<TDelegate,TEventArgs> (Func<Action<TEventArgs>, TDelegate> conversion, Func<TDelegate> addHandler, Func<TDelegate> removeHandler)
  73. var source = Observable.FromEvent<MyEventHandler, MyEventArgs> (
  74. eh => new MyEventHandler (s => eh (new MyEventArgs (s))),
  75. ev => h.MyEvent += ev,
  76. ev => h.MyEvent -= ev);
  77. Assert.IsFalse (h.HasMyEvent, "#2"); // not subscribed yet
  78. var dis = source.Subscribe (v => value = v.Value);
  79. Assert.IsTrue (h.HasMyEvent, "#3");
  80. h.FireMyEvent ("foo");
  81. Assert.AreEqual ("foo", value, "#4");
  82. dis.Dispose (); // unsubscribe event handler
  83. Assert.IsFalse (h.HasMyEvent, "#6");
  84. }
  85. [Test]
  86. public void TestAttachAndDetach3 ()
  87. {
  88. var h = new EventHost ();
  89. Assert.IsFalse (h.HasMyEvent2, "#1");
  90. string value = null;
  91. // FromEvent<TDelegate,TEventArgs> (Func<TDelegate> addHandler, Func<TDelegate> removeHandler)
  92. var source = Observable.FromEvent<MyEventHandler2, MyEventArgs> (
  93. ev => h.MyEvent2 += ev,
  94. ev => h.MyEvent2 -= ev);
  95. Assert.IsFalse (h.HasMyEvent2, "#2"); // not subscribed yet
  96. var dis = source.Subscribe (v => value = v.Value);
  97. Assert.IsTrue (h.HasMyEvent2, "#3");
  98. h.FireMyEvent2 ("foo");
  99. Assert.AreEqual ("foo", value, "#4");
  100. dis.Dispose (); // unsubscribe event handler
  101. Assert.IsFalse (h.HasMyEvent2, "#6");
  102. }
  103. }
  104. }