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

/Blocks/PolicyInjection/Tests/PolicyInjection/Configuration/PolicyInjectionSettingsFixture.cs

#
C# | 308 lines | 240 code | 58 blank | 10 comment | 16 complexity | 1f44fbb81aefba94b5d170274d894ce6 MD5 | raw file
  1. //===============================================================================
  2. // Microsoft patterns & practices Enterprise Library
  3. // Policy Injection Application Block
  4. //===============================================================================
  5. // Copyright Š 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. using System.Linq;
  12. using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
  13. using Microsoft.Practices.EnterpriseLibrary.Common.TestSupport.Configuration.ContainerModel;
  14. using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.Configuration;
  15. using Microsoft.Practices.EnterpriseLibrary.PolicyInjection.TestSupport.ObjectsUnderTest;
  16. using Microsoft.Practices.Unity.InterceptionExtension;
  17. using Microsoft.VisualStudio.TestTools.UnitTesting;
  18. namespace Microsoft.Practices.EnterpriseLibrary.PolicyInjection.Tests.Configuration
  19. {
  20. #if !SILVERLIGHT
  21. [TestClass]
  22. public class PolicyInjectionSettingsFixture
  23. {
  24. [TestMethod]
  25. [DeploymentItem("OldStyle.config")]
  26. public void SkipsInjectorsElement()
  27. {
  28. using (var source = new FileConfigurationSource("OldStyle.config", false))
  29. {
  30. PolicyInjectionSettings settings
  31. = (PolicyInjectionSettings)source.GetSection(PolicyInjectionSettings.SectionName);
  32. Assert.IsNotNull(settings);
  33. Assert.AreEqual(3, settings.Policies.Count);
  34. }
  35. }
  36. }
  37. #endif
  38. [TestClass]
  39. public class GivenAnEmptySection
  40. {
  41. private PolicyInjectionSettings settings;
  42. [TestInitialize]
  43. public void Setup()
  44. {
  45. settings = new PolicyInjectionSettings();
  46. }
  47. [TestMethod]
  48. public void WhenCreatingRegistration_ThenReturnsOnlyPolicyInjectorRegistration()
  49. {
  50. var registrations = settings.GetRegistrations(null);
  51. Assert.AreEqual(1, registrations.Count());
  52. var registration = registrations.ElementAt(0);
  53. registration.AssertForServiceType(typeof(PolicyInjector))
  54. .IsDefault()
  55. .ForImplementationType(typeof(PolicyInjector))
  56. .IsPublicName();
  57. }
  58. }
  59. [TestClass]
  60. public class GivenASectionWithAnEmptyPolicy
  61. {
  62. private PolicyInjectionSettings settings;
  63. [TestInitialize]
  64. public void Setup()
  65. {
  66. settings = new PolicyInjectionSettings();
  67. settings.Policies.Add(new PolicyData { Name = "policy 1" });
  68. }
  69. [TestMethod]
  70. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForInjectionPolicy()
  71. {
  72. var registrations = settings.GetRegistrations(null);
  73. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).Count());
  74. }
  75. [TestMethod]
  76. public void WhenCreatingRegistration_ThenReturnsNoOtherPolicies()
  77. {
  78. var registrations = settings.GetRegistrations(null);
  79. Assert.AreEqual(0, registrations.Where(tr => tr.ServiceType != typeof(InjectionPolicy) && tr.ServiceType != typeof(PolicyInjector)).Count());
  80. }
  81. [TestMethod]
  82. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyIsForRuleData()
  83. {
  84. var registrations = settings.GetRegistrations(null);
  85. registrations.ElementAt(0)
  86. .AssertForServiceType(typeof(InjectionPolicy))
  87. .ForName("policy 1")
  88. .ForImplementationType(typeof(InjectionFriendlyRuleDrivenPolicy));
  89. }
  90. [TestMethod]
  91. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyInjectsNoMatchingRulesOrHandlers()
  92. {
  93. string[] handlerNames;
  94. var registrations = settings.GetRegistrations(null);
  95. registrations.ElementAt(0)
  96. .AssertConstructor()
  97. .WithValueConstructorParameter("policy 1")
  98. .WithContainerResolvedEnumerableConstructorParameter<IMatchingRule>(new string[0])
  99. .WithValueConstructorParameter(out handlerNames)
  100. .VerifyConstructorParameters();
  101. CollectionAssert.AreEqual(new string[0], handlerNames);
  102. }
  103. }
  104. [TestClass]
  105. public class GivenASectionWithAMatchingRule
  106. {
  107. private PolicyInjectionSettings settings;
  108. [TestInitialize]
  109. public void Setup()
  110. {
  111. var policyData = new PolicyData { Name = "policy 1" };
  112. policyData.MatchingRules.Add(
  113. new TypeMatchingRuleData
  114. {
  115. Name = "matching rule 1",
  116. Matches = { new MatchData { Match = typeof(object).AssemblyQualifiedName } }
  117. });
  118. settings = new PolicyInjectionSettings();
  119. settings.Policies.Add(policyData);
  120. }
  121. [TestMethod]
  122. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForInjectionPolicy()
  123. {
  124. var registrations = settings.GetRegistrations(null);
  125. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).Count());
  126. }
  127. [TestMethod]
  128. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyIsForRuleData()
  129. {
  130. var registrations = settings.GetRegistrations(null);
  131. registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).ElementAt(0)
  132. .AssertForServiceType(typeof(InjectionPolicy))
  133. .ForName("policy 1")
  134. .ForImplementationType(typeof(InjectionFriendlyRuleDrivenPolicy));
  135. }
  136. [TestMethod]
  137. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyInjectsNoMatchingRulesOrHandlers()
  138. {
  139. string[] handlerNames;
  140. var registrations = settings.GetRegistrations(null);
  141. registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).ElementAt(0)
  142. .AssertConstructor()
  143. .WithValueConstructorParameter("policy 1")
  144. .WithContainerResolvedEnumerableConstructorParameter<IMatchingRule>(
  145. new[] { "matching rule 1-policy 1" })
  146. .WithValueConstructorParameter(out handlerNames)
  147. .VerifyConstructorParameters();
  148. CollectionAssert.AreEqual(new string[0], handlerNames);
  149. }
  150. [TestMethod]
  151. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForMatchingRule()
  152. {
  153. var registrations = settings.GetRegistrations(null);
  154. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(IMatchingRule)).Count());
  155. }
  156. [TestMethod]
  157. public void WhenCreatingRegistration_ThenRegistrationForMatchingRuleIsForConfiguredRuleWithSyntheticName()
  158. {
  159. var registrations = settings.GetRegistrations(null);
  160. registrations.Where(tr => tr.ServiceType == typeof(IMatchingRule)).ElementAt(0)
  161. .AssertForServiceType(typeof(IMatchingRule))
  162. .ForName("matching rule 1-policy 1")
  163. .ForImplementationType(typeof(TypeMatchingRule));
  164. }
  165. }
  166. [TestClass]
  167. public class GivenASectionWithAMatchingRuleAndACustomCallHandler
  168. {
  169. private PolicyInjectionSettings settings;
  170. [TestInitialize]
  171. public void Setup()
  172. {
  173. var policyData = new PolicyData { Name = "policy 1" };
  174. policyData.MatchingRules.Add(
  175. new TypeMatchingRuleData
  176. {
  177. Name = "matching rule 1",
  178. Matches = { new MatchData { Match = typeof(object).AssemblyQualifiedName } }
  179. });
  180. policyData.Handlers.Add(
  181. #if !SILVERLIGHT
  182. new CustomCallHandlerData("handler 1", typeof(CallCountHandler).AssemblyQualifiedName)
  183. #else
  184. new CallCountHandlerData("handler 1")
  185. #endif
  186. );
  187. settings = new PolicyInjectionSettings();
  188. settings.Policies.Add(policyData);
  189. }
  190. [TestMethod]
  191. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForInjectionPolicy()
  192. {
  193. var registrations = settings.GetRegistrations(null);
  194. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).Count());
  195. }
  196. [TestMethod]
  197. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyIsForRuleData()
  198. {
  199. var registrations = settings.GetRegistrations(null);
  200. registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).ElementAt(0)
  201. .AssertForServiceType(typeof(InjectionPolicy))
  202. .ForName("policy 1")
  203. .ForImplementationType(typeof(InjectionFriendlyRuleDrivenPolicy));
  204. }
  205. [TestMethod]
  206. public void WhenCreatingRegistration_ThenRegistrationForInjectionPolicyInjectsNoMatchingRulesOrHandlers()
  207. {
  208. string[] handlerNames;
  209. var registrations = settings.GetRegistrations(null);
  210. registrations.Where(tr => tr.ServiceType == typeof(InjectionPolicy)).ElementAt(0)
  211. .AssertConstructor()
  212. .WithValueConstructorParameter("policy 1")
  213. .WithContainerResolvedEnumerableConstructorParameter<IMatchingRule>(
  214. new[] { "matching rule 1-policy 1" })
  215. .WithValueConstructorParameter(out handlerNames)
  216. .VerifyConstructorParameters();
  217. CollectionAssert.AreEqual(new[] { "handler 1-policy 1" }, handlerNames);
  218. }
  219. [TestMethod]
  220. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForMatchingRule()
  221. {
  222. var registrations = settings.GetRegistrations(null);
  223. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(IMatchingRule)).Count());
  224. }
  225. [TestMethod]
  226. public void WhenCreatingRegistration_ThenRegistrationForMatchingRuleIsForConfiguredRuleWithSyntheticName()
  227. {
  228. var registrations = settings.GetRegistrations(null);
  229. registrations.Where(tr => tr.ServiceType == typeof(IMatchingRule)).ElementAt(0)
  230. .AssertForServiceType(typeof(IMatchingRule))
  231. .ForName("matching rule 1-policy 1")
  232. .ForImplementationType(typeof(TypeMatchingRule));
  233. }
  234. [TestMethod]
  235. public void WhenCreatingRegistration_ThenReturnsOneRegistrationForCallHandler()
  236. {
  237. var registrations = settings.GetRegistrations(null);
  238. Assert.AreEqual(1, registrations.Where(tr => tr.ServiceType == typeof(ICallHandler)).Count());
  239. }
  240. [TestMethod]
  241. public void WhenCreatingRegistration_ThenRegistrationForCallHandlerIsForConfiguredHandlerWithSyntheticName()
  242. {
  243. var registrations = settings.GetRegistrations(null);
  244. registrations.Where(tr => tr.ServiceType == typeof(ICallHandler)).ElementAt(0)
  245. .AssertForServiceType(typeof(ICallHandler))
  246. .ForName("handler 1-policy 1")
  247. .ForImplementationType(typeof(CallCountHandler));
  248. }
  249. }
  250. }