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

/V1/spikes/AGCompositeApplicationLibrary/AGComposite.Tests/Events/EventSubscriptionFixture.cs

#
C# | 265 lines | 196 code | 53 blank | 16 comment | 0 complexity | f5cc7538701991a9769eba43fdc8fde7 MD5 | raw file
  1. //===============================================================================
  2. // Microsoft patterns & practices
  3. // Composite Application Guidance for Windows Presentation Foundation and Silverlight
  4. //===============================================================================
  5. // Copyright (c) Microsoft Corporation. All rights reserved.
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
  7. // OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
  8. // LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  9. // FITNESS FOR A PARTICULAR PURPOSE.
  10. //===============================================================================
  11. // The example companies, organizations, products, domain names,
  12. // e-mail addresses, logos, people, places, and events depicted
  13. // herein are fictitious. No association with any real company,
  14. // organization, product, domain name, email address, logo, person,
  15. // places, or events is intended or should be inferred.
  16. //===============================================================================
  17. using System;
  18. using System.Collections.Generic;
  19. using Microsoft.Practices.Composite.Events;
  20. using Microsoft.Practices.Composite.Tests.Mocks;
  21. using Microsoft.VisualStudio.TestTools.UnitTesting;
  22. namespace Microsoft.Practices.Composite.Tests.Events
  23. {
  24. [TestClass]
  25. public class EventSubscriptionFixture
  26. {
  27. [TestMethod]
  28. [ExpectedException(typeof(ArgumentException))]
  29. public void NullTargetInActionThrows()
  30. {
  31. var actionDelegateReference = new MockDelegateReference()
  32. {
  33. Target = null
  34. };
  35. var filterDelegateReference = new MockDelegateReference()
  36. {
  37. Target = (Predicate<object>)(arg =>
  38. {
  39. return true;
  40. })
  41. };
  42. var eventSubscription = new EventSubscription<object>(actionDelegateReference,
  43. filterDelegateReference);
  44. }
  45. [TestMethod]
  46. [ExpectedException(typeof(ArgumentException))]
  47. public void DifferentTargetTypeInActionThrows()
  48. {
  49. var actionDelegateReference = new MockDelegateReference()
  50. {
  51. Target = (Action<object>)delegate { }
  52. };
  53. var filterDelegateReference = new MockDelegateReference()
  54. {
  55. Target = (Predicate<string>)(arg =>
  56. {
  57. return true;
  58. })
  59. };
  60. var eventSubscription = new EventSubscription<string>(actionDelegateReference,
  61. filterDelegateReference);
  62. }
  63. [TestMethod]
  64. [ExpectedException(typeof(ArgumentNullException))]
  65. public void NullActionThrows()
  66. {
  67. var filterDelegateReference = new MockDelegateReference()
  68. {
  69. Target = (Predicate<object>)(arg =>
  70. {
  71. return true;
  72. })
  73. };
  74. var eventSubscription = new EventSubscription<object>(null,
  75. filterDelegateReference);
  76. }
  77. [TestMethod]
  78. [ExpectedException(typeof(ArgumentException))]
  79. public void NullTargetInFilterThrows()
  80. {
  81. var actionDelegateReference = new MockDelegateReference()
  82. {
  83. Target = (Action<object>)delegate { }
  84. };
  85. var filterDelegateReference = new MockDelegateReference()
  86. {
  87. Target = null
  88. };
  89. var eventSubscription = new EventSubscription<object>(actionDelegateReference,
  90. filterDelegateReference);
  91. }
  92. [TestMethod]
  93. [ExpectedException(typeof(ArgumentException))]
  94. public void DifferentTargetTypeInFilterThrows()
  95. {
  96. var actionDelegateReference = new MockDelegateReference()
  97. {
  98. Target = (Action<string>)delegate { }
  99. };
  100. var filterDelegateReference = new MockDelegateReference()
  101. {
  102. Target = (Predicate<object>)(arg =>
  103. {
  104. return true;
  105. })
  106. };
  107. var eventSubscription = new EventSubscription<string>(actionDelegateReference,
  108. filterDelegateReference);
  109. }
  110. [TestMethod]
  111. [ExpectedException(typeof(ArgumentNullException))]
  112. public void NullFilterThrows()
  113. {
  114. var actionDelegateReference = new MockDelegateReference()
  115. {
  116. Target = (Action<object>)delegate { }
  117. };
  118. var eventSubscription = new EventSubscription<object>(actionDelegateReference,
  119. null);
  120. }
  121. [TestMethod]
  122. public void CanInitEventSubscription()
  123. {
  124. var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { });
  125. var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { return true; });
  126. var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference);
  127. var subscriptionToken = new SubscriptionToken();
  128. eventSubscription.SubscriptionToken = subscriptionToken;
  129. Assert.AreSame(actionDelegateReference.Target, eventSubscription.Action);
  130. Assert.AreSame(filterDelegateReference.Target, eventSubscription.Filter);
  131. Assert.AreSame(subscriptionToken, eventSubscription.SubscriptionToken);
  132. }
  133. [TestMethod]
  134. public void GetPublishActionReturnsDelegateThatExecutesTheFilterAndThenTheAction()
  135. {
  136. var executedDelegates = new List<string>();
  137. var actionDelegateReference =
  138. new MockDelegateReference((Action<object>)delegate { executedDelegates.Add("Action"); });
  139. var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate
  140. {
  141. executedDelegates.Add(
  142. "Filter");
  143. return true;
  144. });
  145. var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference);
  146. var publishAction = eventSubscription.GetExecutionStrategy();
  147. Assert.IsNotNull(publishAction);
  148. publishAction.Invoke(null);
  149. Assert.AreEqual(2, executedDelegates.Count);
  150. Assert.AreEqual("Filter", executedDelegates[0]);
  151. Assert.AreEqual("Action", executedDelegates[1]);
  152. }
  153. [TestMethod]
  154. public void GetPublishActionReturnsNullIfActionIsNull()
  155. {
  156. var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { });
  157. var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { return true; });
  158. var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference);
  159. var publishAction = eventSubscription.GetExecutionStrategy();
  160. Assert.IsNotNull(publishAction);
  161. actionDelegateReference.Target = null;
  162. publishAction = eventSubscription.GetExecutionStrategy();
  163. Assert.IsNull(publishAction);
  164. }
  165. [TestMethod]
  166. public void GetPublishActionReturnsNullIfFilterIsNull()
  167. {
  168. var actionDelegateReference = new MockDelegateReference((Action<object>)delegate { });
  169. var filterDelegateReference = new MockDelegateReference((Predicate<object>)delegate { return true; });
  170. var eventSubscription = new EventSubscription<object>(actionDelegateReference, filterDelegateReference);
  171. var publishAction = eventSubscription.GetExecutionStrategy();
  172. Assert.IsNotNull(publishAction);
  173. filterDelegateReference.Target = null;
  174. publishAction = eventSubscription.GetExecutionStrategy();
  175. Assert.IsNull(publishAction);
  176. }
  177. [TestMethod]
  178. public void GetPublishActionDoesNotExecuteActionIfFilterReturnsFalse()
  179. {
  180. bool actionExecuted = false;
  181. var actionDelegateReference = new MockDelegateReference()
  182. {
  183. Target = (Action<int>)delegate { actionExecuted = true; }
  184. };
  185. var filterDelegateReference = new MockDelegateReference((Predicate<int>)delegate
  186. {
  187. return false;
  188. });
  189. var eventSubscription = new EventSubscription<int>(actionDelegateReference, filterDelegateReference);
  190. var publishAction = eventSubscription.GetExecutionStrategy();
  191. publishAction.Invoke(new object[] { null });
  192. Assert.IsFalse(actionExecuted);
  193. }
  194. [TestMethod]
  195. public void StrategyPassesArgumentToDelegates()
  196. {
  197. string passedArgumentToAction = null;
  198. string passedArgumentToFilter = null;
  199. var actionDelegateReference = new MockDelegateReference((Action<string>)(obj => passedArgumentToAction = obj));
  200. var filterDelegateReference = new MockDelegateReference((Predicate<string>)(obj =>
  201. {
  202. passedArgumentToFilter = obj;
  203. return true;
  204. }));
  205. var eventSubscription = new EventSubscription<string>(actionDelegateReference, filterDelegateReference);
  206. var publishAction = eventSubscription.GetExecutionStrategy();
  207. publishAction.Invoke(new[] { "TestString" });
  208. Assert.AreEqual("TestString", passedArgumentToAction);
  209. Assert.AreEqual("TestString", passedArgumentToFilter);
  210. }
  211. }
  212. }