public void AddPluginSourceCanOnlyAddOnce()
 {
     PluginRepository tested = new PluginRepository();
       MockPluginSource pluginSource = new MockPluginSource();
       tested.AddPluginSource(pluginSource);
       DoAssert.Throws<ArgumentException>(() => tested.AddPluginSource(pluginSource) );
 }
示例#2
0
        public void AddPluginSourceCanOnlyAddOnce()
        {
            PluginRepository tested       = new PluginRepository();
            MockPluginSource pluginSource = new MockPluginSource();

            tested.AddPluginSource(pluginSource);
            DoAssert.Throws <ArgumentException>(() => tested.AddPluginSource(pluginSource));
        }
示例#3
0
        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);
 }
示例#5
0
        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)));
        }
示例#6
0
        public void AddPluginSourceShouldListenToAllEventsOnPluginSourceAfterAdd()
        {
            PluginRepository tested       = new PluginRepository();
            MockPluginSource pluginSource = new MockPluginSource();

            tested.AddPluginSource(pluginSource);
            Assert.AreEqual(pluginSource.NumPluginAddedListeners, 1);
            Assert.AreEqual(pluginSource.NumPluginRemovedListeners, 1);
        }
示例#7
0
        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);
        }
示例#8
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));
        }
示例#11
0
        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(); })
                );
        }
示例#13
0
        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);
 }
示例#17
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)));
 }