PageRenderTime 47ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/V1/trunk/Source/CAL/Composite.Tests/Modularity/ConfigurationModuleEnumeratorFixture.cs

#
C# | 182 lines | 132 code | 34 blank | 16 comment | 3 complexity | 9f3ad61ea88537345f557712fa65608a MD5 | raw file
  1. //===============================================================================
  2. // Microsoft patterns & practices
  3. // Composite Application Guidance for Windows Presentation Foundation
  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 System.Configuration;
  20. using Microsoft.Practices.Composite.Modularity;
  21. using Microsoft.Practices.Composite.Tests.Mocks;
  22. using Microsoft.VisualStudio.TestTools.UnitTesting;
  23. namespace Microsoft.Practices.Composite.Tests.Modularity
  24. {
  25. [TestClass]
  26. public class ConfigurationModuleEnumeratorFixture
  27. {
  28. [TestMethod]
  29. public void CanInitConfigModuleEnumerator()
  30. {
  31. MockConfigurationStore store = new MockConfigurationStore();
  32. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  33. Assert.IsNotNull(enumerator);
  34. }
  35. [TestMethod]
  36. [ExpectedException(typeof(ArgumentNullException))]
  37. public void NullConfigurationStoreThrows()
  38. {
  39. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(null);
  40. }
  41. [TestMethod]
  42. public void CanInitWithDefaultConstructor()
  43. {
  44. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator();
  45. Assert.IsNotNull(enumerator);
  46. }
  47. [TestMethod]
  48. public void ShouldReturnAListOfModuleInfo()
  49. {
  50. MockConfigurationStore store = new MockConfigurationStore();
  51. store.Modules = new[] { new ModuleConfigurationElement(@"MocksModules\MockModuleA.dll", "Microsoft.Composite.Tests.Mocks.Modules.MockModuleA", "MockModuleA", false) };
  52. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  53. ModuleInfo[] modules = enumerator.GetModules();
  54. Assert.IsNotNull(modules);
  55. Assert.AreEqual(1, modules.Length);
  56. Assert.IsNotNull(modules[0].AssemblyFile);
  57. Assert.IsTrue(modules[0].AssemblyFile.Contains(@"MocksModules\MockModuleA.dll"));
  58. Assert.IsNotNull(modules[0].ModuleType);
  59. Assert.AreEqual("Microsoft.Composite.Tests.Mocks.Modules.MockModuleA", modules[0].ModuleType);
  60. Assert.IsFalse(modules[0].StartupLoaded);
  61. }
  62. [TestMethod]
  63. public void GetZeroModules()
  64. {
  65. MockConfigurationStore store = new MockConfigurationStore();
  66. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  67. ModuleInfo[] modules = enumerator.GetModules();
  68. Assert.AreEqual(0, modules.Length);
  69. }
  70. [TestMethod]
  71. public void EnumeratesThreeModulesWithDependencies()
  72. {
  73. var store = new MockConfigurationStore();
  74. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  75. module1.Dependencies = new ModuleDependencyCollection(
  76. new[] { new ModuleDependencyConfigurationElement("Module2") });
  77. var module2 = new ModuleConfigurationElement("Module2.dll", "Test.Module2", "Module2", false);
  78. module2.Dependencies = new ModuleDependencyCollection(
  79. new[] { new ModuleDependencyConfigurationElement("Module3") });
  80. var module3 = new ModuleConfigurationElement("Module3.dll", "Test.Module3", "Module3", false);
  81. store.Modules = new[] { module3, module2, module1 };
  82. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  83. var modules = new List<ModuleInfo>(enumerator.GetModules());
  84. Assert.AreEqual(3, modules.Count);
  85. Assert.IsTrue(modules.Exists(module => module.ModuleName == "Module1"));
  86. Assert.IsTrue(modules.Exists(module => module.ModuleName == "Module2"));
  87. Assert.IsTrue(modules.Exists(module => module.ModuleName == "Module3"));
  88. }
  89. [TestMethod]
  90. [ExpectedException(typeof(ConfigurationErrorsException))]
  91. public void EnumerateThrowsIfDuplicateNames()
  92. {
  93. MockConfigurationStore store = new MockConfigurationStore();
  94. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  95. var module2 = new ModuleConfigurationElement("Module2.dll", "Test.Module2", "Module1", false);
  96. store.Modules = new[] { module2, module1 };
  97. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  98. ModuleInfo[] modules = enumerator.GetModules();
  99. }
  100. [TestMethod]
  101. public void EnumerateNotThrowsIfDuplicateAssemblyFile()
  102. {
  103. MockConfigurationStore store = new MockConfigurationStore();
  104. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  105. var module2 = new ModuleConfigurationElement("Module1.dll", "Test.Module2", "Module2", false);
  106. store.Modules = new[] { module2, module1 };
  107. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  108. Assert.AreEqual(2, enumerator.GetModules().Length);
  109. }
  110. [TestMethod]
  111. public void GetStartupLoadedModulesDoesntRetrieveOnDemandLoaded()
  112. {
  113. MockConfigurationStore store = new MockConfigurationStore();
  114. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  115. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  116. store.Modules = new[] { module1 };
  117. Assert.AreEqual<int>(1, enumerator.GetModules().Length);
  118. Assert.AreEqual<int>(0, enumerator.GetStartupLoadedModules().Length);
  119. }
  120. [TestMethod]
  121. public void GetModuleReturnsOnlySpecifiedModule()
  122. {
  123. MockConfigurationStore store = new MockConfigurationStore();
  124. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  125. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  126. store.Modules = new[] { module1 };
  127. var module = enumerator.GetModule("Module1");
  128. Assert.IsNotNull(module);
  129. Assert.AreEqual("Module1", module.ModuleName);
  130. }
  131. [TestMethod]
  132. public void GetModulesNotThrownIfModuleSectionIsNotDeclared()
  133. {
  134. MockNullConfigurationStore store = new MockNullConfigurationStore();
  135. IModuleEnumerator enumerator = new ConfigurationModuleEnumerator(store);
  136. var modules = enumerator.GetModules();
  137. Assert.IsNotNull(modules);
  138. Assert.AreEqual(0, modules.Length);
  139. }
  140. }
  141. internal class MockNullConfigurationStore : ConfigurationStore
  142. {
  143. public override ModulesConfigurationSection RetrieveModuleConfigurationSection()
  144. {
  145. return null;
  146. }
  147. }
  148. }