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);
        }
Ejemplo n.º 9
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 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>()));
        }