PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/V2.2/trunk/CAL/Desktop/Composite.Tests/Modularity/FileModuleRetrieverFixture.Desktop.cs

#
C# | 115 lines | 81 code | 18 blank | 16 comment | 3 complexity | 7b57a81fe30aa2eb3793b53521593fc2 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.Threading;
  19. using Microsoft.Practices.Composite.Modularity;
  20. using Microsoft.VisualStudio.TestTools.UnitTesting;
  21. namespace Microsoft.Practices.Composite.Tests.Modularity
  22. {
  23. [TestClass]
  24. public class FileModuleRetrieverFixture
  25. {
  26. [TestMethod]
  27. public void CanRetrieveModule()
  28. {
  29. var assemblyResolver = new MockAssemblyResolver();
  30. var retriever = new FileModuleTypeLoader(assemblyResolver);
  31. string assembly = CompilerHelper.GenerateDynamicModule("FileModuleA", null);
  32. var fileModuleInfo = CreateModuleInfo(assembly, "TestModules.FileModuleAClass", "ModuleA", true, null);
  33. ManualResetEvent callbackEvent = new ManualResetEvent(false);
  34. retriever.BeginLoadModuleType(fileModuleInfo, delegate
  35. {
  36. callbackEvent.Set();
  37. });
  38. callbackEvent.WaitOne(500);
  39. Assert.AreEqual(assembly, assemblyResolver.LoadAssemblyFromArgument);
  40. }
  41. [TestMethod]
  42. public void ShouldReturnErrorToCallback()
  43. {
  44. var assemblyResolver = new MockAssemblyResolver();
  45. var retriever = new FileModuleTypeLoader(assemblyResolver);
  46. var fileModuleInfo = CreateModuleInfo("NonExistentFile.dll", "NonExistentModule", "NonExistent", true, null);
  47. ManualResetEvent callbackEvent = new ManualResetEvent(false);
  48. assemblyResolver.ThrowOnLoadAssemblyFrom = true;
  49. Exception resultException = null;
  50. retriever.BeginLoadModuleType(fileModuleInfo, delegate(ModuleInfo moduleInfo, Exception error)
  51. {
  52. resultException = error;
  53. callbackEvent.Set();
  54. });
  55. callbackEvent.WaitOne(500);
  56. Assert.IsNotNull(resultException);
  57. }
  58. [TestMethod]
  59. public void CanRetrieveWithCorrectRef()
  60. {
  61. var retriever = new FileModuleTypeLoader();
  62. var moduleInfo = new ModuleInfo() { Ref = "file://somefile" };
  63. Assert.IsTrue(retriever.CanLoadModuleType(moduleInfo));
  64. }
  65. [TestMethod]
  66. public void CannotRetrieveWithIncorrectRef()
  67. {
  68. var retriever = new FileModuleTypeLoader();
  69. var moduleInfo = new ModuleInfo() { Ref = "NotForLocalRetrieval" };
  70. Assert.IsFalse(retriever.CanLoadModuleType(moduleInfo));
  71. }
  72. private static ModuleInfo CreateModuleInfo(string assemblyFile, string moduleType, string moduleName, bool startupLoaded, params string[] dependsOn)
  73. {
  74. ModuleInfo moduleInfo = new ModuleInfo(moduleName, moduleType)
  75. {
  76. InitializationMode = startupLoaded ? InitializationMode.WhenAvailable : InitializationMode.OnDemand,
  77. Ref = assemblyFile,
  78. };
  79. if (dependsOn != null)
  80. {
  81. moduleInfo.DependsOn.AddRange(dependsOn);
  82. }
  83. return moduleInfo;
  84. }
  85. }
  86. internal class MockAssemblyResolver : IAssemblyResolver
  87. {
  88. public string LoadAssemblyFromArgument;
  89. public bool ThrowOnLoadAssemblyFrom;
  90. public void LoadAssemblyFrom(string assemblyFilePath)
  91. {
  92. LoadAssemblyFromArgument = assemblyFilePath;
  93. if (ThrowOnLoadAssemblyFrom)
  94. throw new Exception();
  95. }
  96. }
  97. }