public void AddPluginSourceCanOnlyAddOnce() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); DoAssert.Throws<ArgumentException>(() => tested.AddPluginSource(pluginSource) ); }
public void AddPluginSourceCanOnlyAddOnce() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); DoAssert.Throws <ArgumentException>(() => tested.AddPluginSource(pluginSource)); }
public void ShouldOnlyReportPluginsThatMatchesFilter() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); PluginDescriptor plugin1 = new PluginDescriptor() { QualifiedName = typeof(MockPlugin1), Name = "plugin1" }; PluginDescriptor plugin2 = new PluginDescriptor() { QualifiedName = typeof(MockPlugin2), Name = "plugin2" }; pluginSource.RaisePluginAdded(plugin1); pluginSource.RaisePluginAdded(plugin2); PluginFilter filter = PluginFilter.Create.IsNamed("plugin1"); var foundPlugins = tested.Plugins(filter); Assert.AreEqual(1, foundPlugins.Count()); Assert.AreSame(plugin1, foundPlugins.First()); }
public void AddPluginSourceShouldListenToAllEventsOnPluginSourceAfterAdd() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); Assert.AreEqual(pluginSource.NumPluginAddedListeners, 1); Assert.AreEqual(pluginSource.NumPluginRemovedListeners, 1); }
public void ShouldLogAsDebugWhenPluginSourceIsAdded() { PluginRepository tested = new PluginRepository(); MockLog log = new MockLog(tested); var pluginSource = new Mock <IPluginSource>().Object; tested.AddPluginSource(pluginSource); Assert.IsTrue(log.Any(x => x.Level == MockLog.Level.Debug && x.Message.Contains("added") && x.Message.Contains(pluginSource.GetType().FullName))); }
public void AddPluginSourceShouldListenToAllEventsOnPluginSourceAfterAdd() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); Assert.AreEqual(pluginSource.NumPluginAddedListeners, 1); Assert.AreEqual(pluginSource.NumPluginRemovedListeners, 1); }
public void ShouldStopListeningToAllEventsOnPluginSourceAfterRemove() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); tested.RemovePluginSource(pluginSource); Assert.AreEqual(pluginSource.NumPluginAddedListeners, 0); Assert.AreEqual(pluginSource.NumPluginRemovedListeners, 0); }
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 Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store) { AssemblyContainer assemblyContainer = new AssemblyContainer(); PluginRepository pluginRepository = new PluginRepository(); pluginRepository.AddPluginSource(new PluginExtractor(assemblyContainer)); System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader(); string pluginDir = settingsReader.GetValue("PluginPath", typeof(string)) as string; PluginDirectory pluginDirectory = new PluginDirectory(pluginDir, true); assemblyContainer.AddDir(pluginDirectory); container.Register( Component.For<IPluginRepository>().LifestyleSingleton().Instance(pluginRepository), Component.For<IAssemblyRepository>().LifestyleSingleton().Instance(assemblyContainer) .OnDestroy(kernel => { assemblyContainer.RemoveDir(pluginDirectory); pluginDirectory.Dispose(); }) ); }
public void ForgetLostPlugins() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); PluginDescriptor thePlugin = new PluginDescriptor() { QualifiedName = typeof(UnitTest_PluginRepository) }; pluginSource.RaisePluginAdded(thePlugin); var pluginsBefore = tested.Plugins(null).ToArray(); pluginSource.RaisePluginRemoved(thePlugin); var pluginsAfter = tested.Plugins(null).ToArray(); Assert.IsTrue(pluginsAfter.Length - pluginsBefore.Length == -1); Assert.IsFalse(pluginsAfter.Contains(thePlugin)); }
public void RememberFoundPlugins() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); var pluginsBefore = tested.Plugins(null).ToArray(); PluginDescriptor thePlugin = new PluginDescriptor() { QualifiedName = typeof(UnitTest_PluginRepository) }; pluginSource.RaisePluginAdded(thePlugin); var pluginsAfter = tested.Plugins(null).ToArray(); Assert.IsTrue(pluginsAfter.Length - pluginsBefore.Length == 1); Assert.AreSame(thePlugin, pluginsAfter.Except(pluginsBefore).First()); }
public void Install(Castle.Windsor.IWindsorContainer container, Castle.MicroKernel.SubSystems.Configuration.IConfigurationStore store) { AssemblyContainer assemblyContainer = new AssemblyContainer(); PluginRepository pluginRepository = new PluginRepository(); pluginRepository.AddPluginSource(new PluginExtractor(assemblyContainer)); System.Configuration.AppSettingsReader settingsReader = new AppSettingsReader(); string pluginDir = settingsReader.GetValue("PluginPath", typeof(string)) as string; PluginDirectory pluginDirectory = new PluginDirectory(pluginDir, true); assemblyContainer.AddDir(pluginDirectory); container.Register( Component.For <IPluginRepository>().LifestyleSingleton().Instance(pluginRepository), Component.For <IAssemblyRepository>().LifestyleSingleton().Instance(assemblyContainer) .OnDestroy(kernel => { assemblyContainer.RemoveDir(pluginDirectory); pluginDirectory.Dispose(); }) ); }
public void ForgetLostPlugins() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); PluginDescriptor thePlugin = new PluginDescriptor() { QualifiedName = typeof(UnitTest_PluginRepository) }; pluginSource.RaisePluginAdded(thePlugin); var pluginsBefore = tested.Plugins(null).ToArray(); pluginSource.RaisePluginRemoved(thePlugin); var pluginsAfter = tested.Plugins(null).ToArray(); Assert.IsTrue(pluginsAfter.Length - pluginsBefore.Length == -1); Assert.IsFalse(pluginsAfter.Contains(thePlugin)); }
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 ShouldOnlyReportPluginsThatMatchesFilter() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); PluginDescriptor plugin1 = new PluginDescriptor() { QualifiedName = typeof(MockPlugin1), Name = "plugin1" }; PluginDescriptor plugin2 = new PluginDescriptor() { QualifiedName = typeof(MockPlugin2), Name = "plugin2" }; pluginSource.RaisePluginAdded(plugin1); pluginSource.RaisePluginAdded(plugin2); PluginFilter filter = PluginFilter.Create.IsNamed("plugin1"); var foundPlugins = tested.Plugins(filter); Assert.AreEqual(1, foundPlugins.Count()); Assert.AreSame(plugin1, foundPlugins.First()); }
public void ShouldStopListeningToAllEventsOnPluginSourceAfterRemove() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); tested.RemovePluginSource(pluginSource); Assert.AreEqual(pluginSource.NumPluginAddedListeners, 0); Assert.AreEqual(pluginSource.NumPluginRemovedListeners, 0); }
public void AddPluginSourceShouldRejectNull() { PluginRepository tested = new PluginRepository(); DoAssert.Throws <ArgumentNullException>(() => tested.AddPluginSource(null)); }
public void AddPluginSourceShouldRejectNull() { PluginRepository tested = new PluginRepository(); DoAssert.Throws<ArgumentNullException>(() => tested.AddPluginSource(null) ); }
public void RememberFoundPlugins() { PluginRepository tested = new PluginRepository(); MockPluginSource pluginSource = new MockPluginSource(); tested.AddPluginSource(pluginSource); var pluginsBefore = tested.Plugins(null).ToArray(); PluginDescriptor thePlugin = new PluginDescriptor() { QualifiedName = typeof(UnitTest_PluginRepository) }; pluginSource.RaisePluginAdded(thePlugin); var pluginsAfter = tested.Plugins(null).ToArray(); Assert.IsTrue(pluginsAfter.Length - pluginsBefore.Length == 1); Assert.AreSame(thePlugin, pluginsAfter.Except(pluginsBefore).First()); }
public void ShouldLogAsDebugWhenPluginSourceIsRemoved() { PluginRepository tested = new PluginRepository(); MockLog log = new MockLog(tested); var pluginSource = new Mock<IPluginSource>().Object; tested.AddPluginSource(pluginSource); tested.RemovePluginSource(pluginSource); Assert.IsTrue(log.Any(x => x.Level == MockLog.Level.Debug && x.Message.Contains("removed") && x.Message.Contains(pluginSource.GetType().FullName))); }