/PrismLibrary/Desktop/Prism.Tests/Modularity/ConfigurationModuleCatalogFixture.Desktop.cs

https://github.com/jeffras/Prism-4-with-WinForms · C# · 166 lines · 124 code · 26 blank · 16 comment · 4 complexity · d0b01bec5089cd166d74c106621c1104 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 System.Configuration;
  20. using System.Linq;
  21. using Microsoft.Practices.Prism.Tests.Mocks;
  22. using Microsoft.Practices.Prism.Modularity;
  23. using Microsoft.VisualStudio.TestTools.UnitTesting;
  24. namespace Microsoft.Practices.Prism.Tests.Modularity
  25. {
  26. [TestClass]
  27. public class ConfigurationModuleCatalogFixture
  28. {
  29. [TestMethod]
  30. public void CanInitConfigModuleEnumerator()
  31. {
  32. MockConfigurationStore store = new MockConfigurationStore();
  33. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog();
  34. catalog.Store = store;
  35. Assert.IsNotNull(catalog);
  36. }
  37. [TestMethod]
  38. [ExpectedException(typeof(InvalidOperationException))]
  39. public void NullConfigurationStoreThrows()
  40. {
  41. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog(){Store = null};
  42. catalog.Load();
  43. }
  44. [TestMethod]
  45. public void ShouldReturnAListOfModuleInfo()
  46. {
  47. MockConfigurationStore store = new MockConfigurationStore();
  48. store.Modules = new[] { new ModuleConfigurationElement(@"MocksModules\MockModuleA.dll", "TestModules.MockModuleAClass", "MockModuleA", false) };
  49. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog(){Store = store};
  50. catalog.Load();
  51. IEnumerable<ModuleInfo> modules = catalog.Modules;
  52. Assert.IsNotNull(modules);
  53. Assert.AreEqual(1, modules.Count());
  54. Assert.AreNotEqual(InitializationMode.WhenAvailable, modules.First().InitializationMode);
  55. Assert.IsNotNull(modules.First().Ref);
  56. StringAssert.StartsWith(modules.First().Ref, "file://");
  57. Assert.IsTrue( modules.First().Ref.Contains(@"MocksModules/MockModuleA.dll"));
  58. Assert.IsNotNull( modules.First().ModuleType);
  59. Assert.AreEqual("TestModules.MockModuleAClass", modules.First().ModuleType);
  60. }
  61. [TestMethod]
  62. public void GetZeroModules()
  63. {
  64. MockConfigurationStore store = new MockConfigurationStore();
  65. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  66. catalog.Load();
  67. Assert.AreEqual(0, catalog.Modules.Count());
  68. }
  69. [TestMethod]
  70. public void EnumeratesThreeModulesWithDependencies()
  71. {
  72. var store = new MockConfigurationStore();
  73. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  74. module1.Dependencies = new ModuleDependencyCollection(
  75. new[] { new ModuleDependencyConfigurationElement("Module2") });
  76. var module2 = new ModuleConfigurationElement("Module2.dll", "Test.Module2", "Module2", false);
  77. module2.Dependencies = new ModuleDependencyCollection(
  78. new[] { new ModuleDependencyConfigurationElement("Module3") });
  79. var module3 = new ModuleConfigurationElement("Module3.dll", "Test.Module3", "Module3", false);
  80. store.Modules = new[] { module3, module2, module1 };
  81. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  82. catalog.Load();
  83. var modules = catalog.Modules;
  84. Assert.AreEqual(3, modules.Count());
  85. Assert.IsTrue(modules.Any(module => module.ModuleName == "Module1"));
  86. Assert.IsTrue(modules.Any(module => module.ModuleName == "Module2"));
  87. Assert.IsTrue(modules.Any(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. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  98. catalog.Load();
  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. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  108. catalog.Load();
  109. Assert.AreEqual(2, catalog.Modules.Count());
  110. }
  111. [TestMethod]
  112. public void GetStartupLoadedModulesDoesntRetrieveOnDemandLoaded()
  113. {
  114. MockConfigurationStore store = new MockConfigurationStore();
  115. var module1 = new ModuleConfigurationElement("Module1.dll", "Test.Module1", "Module1", false);
  116. store.Modules = new[] { module1 };
  117. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  118. catalog.Load();
  119. Assert.AreEqual<int>(1, catalog.Modules.Count());
  120. Assert.AreEqual<int>(0, catalog.Modules.Count(m => m.InitializationMode != InitializationMode.OnDemand));
  121. }
  122. [TestMethod]
  123. public void GetModulesNotThrownIfModuleSectionIsNotDeclared()
  124. {
  125. MockNullConfigurationStore store = new MockNullConfigurationStore();
  126. ConfigurationModuleCatalog catalog = new ConfigurationModuleCatalog() { Store = store };
  127. catalog.Load();
  128. var modules = catalog.Modules;
  129. Assert.IsNotNull(modules);
  130. Assert.AreEqual(0, modules.Count());
  131. }
  132. internal class MockNullConfigurationStore : IConfigurationStore
  133. {
  134. public ModulesConfigurationSection RetrieveModuleConfigurationSection()
  135. {
  136. return null;
  137. }
  138. }
  139. }
  140. }