public void CreateRequiresAssemblyRepository() { PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin1>(); Dictionary <string, object> settings = new Dictionary <string, object>(); IPluginCreator tested = PluginCreator.GetCreator(); DoAssert.Throws <ArgumentNullException>(() => tested.Create(descriptor, null, settings)); }
public void CreateShouldThrowIfMissingRequiredSettings() { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin2>(); DoAssert.Throws <PluginSettingException>(() => tested.Create(descriptor, repository, null)); }
public void CreateShouldCreatePluginInstance() { IAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin1>(); object plugin = tested.Create(descriptor, repository, null); Assert.IsNotNull(plugin); }
public void CreateShouldLogCatchedPluginExceptionAsError() { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(); MockLog mocklog = new MockLog((ILogWriter)tested); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin2>(); Exception ex = DoAssert.Throws <PluginSettingException>(() => tested.Create(descriptor, repository, null)); Assert.IsTrue(mocklog.Any(x => x.Level == MockLog.Level.Error && x.Message.Contains(ex.Message))); }
public void CreateShouldResolveMissingAssemblies() { using (MockDomain domain = new MockDomain()) { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(domain); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin1>(); object instance = tested.Create(descriptor, repository, null); Assert.IsNotNull(instance); Assert.IsTrue(repository.Fetched.Keys.Contains(typeof(MockPlugin1).Assembly.FullName)); } }
public void ShouldLogInfoMessageWhenPluginIsCreated() { using (MockDomain domain = new MockDomain()) { MockAssemblyRepository repository = new MockAssemblyRepository(); var creator = PluginCreator.GetCreator(domain); MockLog mocklog = new MockLog(creator as ILogWriter); var descriptor = MockPluginDescriptor.For <MockPlugin1>(); creator.Create(descriptor, repository, null); Assert.IsTrue(mocklog.Any(x => x.Level == MockLog.Level.Info && x.Message.Contains(typeof(MockPlugin1).FullName))); } }
public void CreateShouldThrowIfSettingIsWrongType() { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin2>(); Dictionary <string, object> settings = new Dictionary <string, object>() { { "NamedSetting", "not int" } }; DoAssert.Throws <PluginSettingException>(() => tested.Create(descriptor, repository, settings)); }
public void CreateShouldApplySettings() { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(); PluginDescriptor descriptor = MockPluginDescriptor.For <MockPlugin2>(); Dictionary <string, object> settings = new Dictionary <string, object>() { { "NamedSetting", 42 } }; MockPlugin2 plugin = tested.Create(descriptor, repository, settings) as MockPlugin2; Assert.AreEqual(42, plugin.Setting); }
public void ShouldLogAsInfoOnPluginRemoved() { var mockPluginSource = new Mock <IPluginSource>(); PluginRepository tested = new PluginRepository(); tested.AddPluginSource(mockPluginSource.Object); MockLog log = new MockLog(tested); mockPluginSource.Raise(x => x.PluginRemoved += null, new PluginEventArgs(MockPluginDescriptor.For <MockPlugin1>())); Assert.IsTrue( log.Any( x => x.Level == MockLog.Level.Info && x.Message.Contains("Removed") && x.Message.Contains(typeof(MockPlugin1).FullName))); }
public void CreateShouldLogCatchedExceptionAsError() { using (MockDomain domain = new MockDomain()) { MockAssemblyRepository repository = new MockAssemblyRepository(); QualifiedName fakeName = new QualifiedName( typeof(string).FullName.Replace("mscorlib", "NonExistingAssemblyName"), typeof(string).Assembly.FullName.Replace("mscorlib", "NonExistingAssemblyName")); IPluginCreator tested = PluginCreator.GetCreator(domain); MockLog mocklog = new MockLog((ILogWriter)tested); PluginDescriptor descriptor = MockPluginDescriptor.For(fakeName); Exception ex = DoAssert.Throws <PluginException>(() => tested.Create(descriptor, repository, null)); Assert.IsTrue(mocklog.Any(x => x.Level == MockLog.Level.Error && x.Message.Contains(ex.Message))); } }
public void CreateShouldThrowOnUnresolvedAssembly() { using (MockDomain domain = new MockDomain()) { MockAssemblyRepository repository = new MockAssemblyRepository(); IPluginCreator tested = PluginCreator.GetCreator(domain); QualifiedName fakeName = new QualifiedName( typeof(string).FullName.Replace("mscorlib", "NonExistingAssemblyName"), typeof(string).Assembly.FullName.Replace("mscorlib", "NonExistingAssemblyName")); PluginDescriptor descriptor = MockPluginDescriptor.For(fakeName); PluginException ex = DoAssert.Throws <PluginException>(() => tested.Create(descriptor, repository, null)); Assert.IsNotNull(ex.InnerException); Assert.IsInstanceOfType(ex.InnerException, typeof(FileNotFoundException)); } }
public void OnAssemblyAddedShouldRaisePluginFoundForEachPluginInAssembly() { MockAssemblySource mockSource = new MockAssemblySource(); PluginExtractor tested = new PluginExtractor(mockSource); List <PluginDescriptor> plugins = new List <PluginDescriptor>(); tested.PluginAdded += (s, e) => plugins.Add(e.Plugin); using (AssemblyReflectionManager manager = new AssemblyReflectionManager()) { string assemblyPath = GetType().Assembly.Location; manager.LoadAssembly(assemblyPath); AssemblyAddedEventArgs args = new AssemblyAddedEventArgs(assemblyPath, manager); mockSource.RaiseAssemblyAdded(args); } Assert.AreEqual(3, plugins.Count); Assert.IsTrue(plugins.Contains(MockPluginDescriptor.For <MockPlugin1>())); Assert.IsTrue(plugins.Contains(MockPluginDescriptor.For <MockPlugin2>())); Assert.IsTrue(plugins.Contains(MockPluginDescriptor.For <MockPlugin3>())); }