public void InitializationExceptionsAreWrapped() { Assembly asm = CompilerHelper.CompileFileAndLoadAssembly("Microsoft.Practices.Composite.Tests.Mocks.Modules.MockModuleThrowingException.cs", @".\MocksModulesThwrowing\MockModuleThrowingException.dll"); ModuleLoader loader = new ModuleLoader(new MockContainerAdapter(), new MockLogger()); ModuleInfo info = new ModuleInfo(asm.CodeBase.Replace(@"file:///", ""), "Microsoft.Practices.Composite.Tests.Mocks.Modules.MockModuleThrowingException", "MockModuleThrowingException"); loader.Initialize(new[] { info }); }
public void FailWhenLoadingModulesWithCyclicDependencies() { List<string> assemblies = new List<string>(); // Create several modules with this dependency graph (X->Y meaning Y depends on X) // 1->2, 2->3, 3->4, 4->5, 4->2 assemblies.Add(CompilerHelper.GenerateDynamicModule("Module1", "Module1")); assemblies.Add(CompilerHelper.GenerateDynamicModule("Module2", "Module2", "Module1", "Module4")); assemblies.Add(CompilerHelper.GenerateDynamicModule("Module3", "Module3", "Module2")); assemblies.Add(CompilerHelper.GenerateDynamicModule("Module4", "Module4", "Module3")); assemblies.Add(CompilerHelper.GenerateDynamicModule("Module5", "Module5", "Module4")); List<ModuleInfo> modules = new List<ModuleInfo>(); modules.Add(new ModuleInfo(assemblies[0], "Module1.TestModules.Module1Class", "Module1")); modules.Add(new ModuleInfo(assemblies[1], "Module2.TestModules.Module2Class", "Module2", "Module1", "Module4")); modules.Add(new ModuleInfo(assemblies[2], "Module3.TestModules.Module3Class", "Module3", "Module2")); modules.Add(new ModuleInfo(assemblies[3], "Module4.TestModules.Module4Class", "Module4", "Module3")); modules.Add(new ModuleInfo(assemblies[4], "Module5.TestModules.Module5Class", "Module5", "Module4")); ModuleLoader loader = new ModuleLoader(new MockContainerAdapter(), new MockLogger()); loader.Initialize(modules.ToArray()); }
public void ShouldResolveModuleAndInitializeSingleModule() { IContainerFacade containerFacade = new MockContainerAdapter(); var service = new ModuleLoader(containerFacade, new MockLogger()); FirstTestModule.wasInitializedOnce = false; var info = new ModuleInfo(typeof(FirstTestModule).Assembly.Location, typeof(FirstTestModule).FullName, "FirstTestModule"); service.Initialize(new[] { info }); Assert.IsTrue(FirstTestModule.wasInitializedOnce); }
public void FailWhenDependingOnMissingModule() { string assembly = CompilerHelper.GenerateDynamicModule("ModuleK", null, "ModuleL"); ModuleInfo module = new ModuleInfo(assembly, "ModuleK.TestsModules.ModuleKClass", "ModuleK", "ModuleL"); ModuleLoader loader = new ModuleLoader(new MockContainerAdapter(), new MockLogger()); loader.Initialize(new[] { module }); }
public void NullLoggerThrows() { ModuleLoader loader = new ModuleLoader(new MockContainerAdapter(), null); }
public void NullContainerThrows() { ModuleLoader loader = new ModuleLoader(null, new MockLogger()); }
public void ShouldNotInitializeIfAlreadyLoaded() { ModuleLoadTracker.ModuleLoadStack.Clear(); IContainerFacade containerFacade = new MockContainerAdapter(); var service = new ModuleLoader(containerFacade, new MockLogger()); FirstTestModule.wasInitializedOnce = false; SecondTestModule.wasInitializedOnce = false; var firstModuleInfo = new ModuleInfo(typeof(FirstTestModule).Assembly.Location, typeof(FirstTestModule).FullName, "FirstTestModule"); service.Initialize(new[] { firstModuleInfo }); Assert.AreEqual(1, ModuleLoadTracker.ModuleLoadStack.Count, "ModuleLoadStack should only contain 1 module"); service.Initialize(new[] { firstModuleInfo }); Assert.AreEqual(1, ModuleLoadTracker.ModuleLoadStack.Count, "ModuleLoadStack should not have module that has already been loaded"); }
public void ShouldLogModuleInitializationError() { IContainerFacade containerFacade = new MockContainerAdapter(); var logger = new MockLogger(); var service = new ModuleLoader(containerFacade, logger); ExceptionThrowingModule.wasInitializedOnce = false; var exceptionModule = new ModuleInfo(typeof(ExceptionThrowingModule).Assembly.Location, typeof(ExceptionThrowingModule).FullName, "ExceptionThrowingModule"); try { service.Initialize(new[] { exceptionModule }); } catch (ModuleLoadException) { } Assert.IsNotNull(logger.LastMessage); StringAssert.Contains(logger.LastMessage, "ExceptionThrowingModule"); }
public void ShouldInitializeModulesInOrder() { IContainerFacade containerFacade = new MockContainerAdapter(); var service = new ModuleLoader(containerFacade, new MockLogger()); ModuleLoadTracker.ModuleLoadStack.Clear(); var dependencyModule = new ModuleInfo(typeof(DependencyModule).Assembly.Location, typeof(DependencyModule).FullName, "DependencyModule"); var dependantModule = new ModuleInfo(typeof(DependantModule).Assembly.Location, typeof(DependantModule).FullName, "DependantModule", new[] { "DependencyModule" }); service.Initialize(new[] { dependantModule, dependencyModule }); Assert.AreEqual(typeof(DependantModule), ModuleLoadTracker.ModuleLoadStack.Pop()); Assert.AreEqual(typeof(DependencyModule), ModuleLoadTracker.ModuleLoadStack.Pop()); }
public void ShouldResolveAndInitializeMultipleModules() { IContainerFacade containerFacade = new MockContainerAdapter(); var service = new ModuleLoader(containerFacade, new MockLogger()); FirstTestModule.wasInitializedOnce = false; SecondTestModule.wasInitializedOnce = false; var firstModuleInfo = new ModuleInfo(typeof(FirstTestModule).Assembly.FullName, typeof(FirstTestModule).FullName, "FirstTestModule"); var secondModuleInfo = new ModuleInfo(typeof(SecondTestModule).Assembly.FullName, typeof(SecondTestModule).FullName, "SecondTestModule"); //var firstModuleInfo = new ModuleInfo(typeof(FirstTestModule).Assembly.Location, typeof(FirstTestModule).FullName, "FirstTestModule"); //var secondModuleInfo = new ModuleInfo(typeof(SecondTestModule).Assembly.Location, typeof(SecondTestModule).FullName, "SecondTestModule"); service.Initialize(new[] { firstModuleInfo, secondModuleInfo }); Assert.IsTrue(FirstTestModule.wasInitializedOnce); Assert.IsTrue(SecondTestModule.wasInitializedOnce); }