PageRenderTime 23ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/src/TecX/TecX.Event.Test/EventAggregatorFixture.cs

http://tecx.codeplex.com
C# | 145 lines | 93 code | 51 blank | 1 comment | 0 complexity | c644217314553b128cde8bba3b54ae43 MD5 | raw file
Possible License(s): LGPL-2.1
  1. namespace TecX.Event.Test
  2. {
  3. using System;
  4. using System.Threading;
  5. using System.Windows.Threading;
  6. using Microsoft.VisualStudio.TestTools.UnitTesting;
  7. using TecX.Event.Test.TestObjects;
  8. using TecX.TestTools;
  9. [TestClass]
  10. public class EventAggregatorFixture
  11. {
  12. [TestMethod]
  13. public void CanPublishMessageOnSameThread()
  14. {
  15. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  16. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  17. SimpleSubscriber subscriber = new SimpleSubscriber();
  18. eventAggregator.Subscribe(subscriber);
  19. eventAggregator.Publish(new SimpleMessage());
  20. DispatcherUtil.DoEvents();
  21. Assert.IsTrue(subscriber.MessageReceived);
  22. Assert.AreEqual(1, subscriber.MessageCounter);
  23. }
  24. [TestMethod]
  25. public void CanPublishMessageOnDifferentThread()
  26. {
  27. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  28. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  29. SimpleSubscriber subscriber = new SimpleSubscriber();
  30. eventAggregator.Subscribe(subscriber);
  31. ManualResetEvent manualResetEvent = new ManualResetEvent(false);
  32. ParameterizedThreadStart start = parameter =>
  33. {
  34. IEventAggregator ea =
  35. parameter as IEventAggregator;
  36. Assert.IsNotNull(ea);
  37. ea.Publish(new SimpleMessage());
  38. manualResetEvent.Set();
  39. };
  40. Thread thread = new Thread(start);
  41. thread.Start(eventAggregator);
  42. manualResetEvent.WaitOne(1000, false);
  43. DispatcherUtil.DoEvents();
  44. Assert.IsTrue(subscriber.MessageReceived);
  45. Assert.AreEqual(1, subscriber.MessageCounter);
  46. }
  47. [TestMethod]
  48. public void WhenSubscribingMultipleTimes_RepeatedSubscriptionsAreIgnored()
  49. {
  50. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  51. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  52. SimpleSubscriber subscriber = new SimpleSubscriber();
  53. eventAggregator.Subscribe(subscriber);
  54. //try to subscribe for the second time
  55. eventAggregator.Subscribe(subscriber);
  56. eventAggregator.Publish(new SimpleMessage());
  57. DispatcherUtil.DoEvents();
  58. Assert.IsTrue(subscriber.MessageReceived);
  59. Assert.AreEqual(1, subscriber.MessageCounter);
  60. }
  61. [TestMethod]
  62. public void WhenPublishingWithCancelOption_CancellationTokenIsReturned()
  63. {
  64. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  65. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  66. CancelingSubscriber subscriber = new CancelingSubscriber();
  67. eventAggregator.Subscribe(subscriber);
  68. CancelMessage token = eventAggregator.Publish(new CancelMessage());
  69. DispatcherUtil.DoEvents();
  70. Assert.IsTrue(token.Cancel);
  71. }
  72. [TestMethod]
  73. public void WhenUnsubscribing_SubscriberIsRemoved()
  74. {
  75. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  76. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  77. OneTimeSubscriber subscriber = new OneTimeSubscriber();
  78. eventAggregator.Subscribe(subscriber);
  79. eventAggregator.Publish(new SimpleMessage());
  80. eventAggregator.Unsubscribe(subscriber);
  81. eventAggregator.Publish(new SimpleMessage());
  82. DispatcherUtil.DoEvents();
  83. Assert.AreEqual(1, subscriber.Counter);
  84. }
  85. [TestMethod]
  86. [ExpectedException(typeof(ArgumentException))]
  87. public void WhenSubscribingObjectThatDoesNotImplementHandlerInterface_ExceptionIsThrown()
  88. {
  89. Dispatcher dispatcher = Dispatcher.CurrentDispatcher;
  90. IEventAggregator eventAggregator = new EventAggregator(dispatcher);
  91. eventAggregator.Subscribe(new object());
  92. }
  93. }
  94. }