[Test] public void DuplicateLoad() { using (MockPluginLoader pluginLoader = new MockPluginLoader()) { MockAssembly[] mockPlugins = new MockAssembly[] { new MockAssembly("MockDir/MockPluginA.dll", typeof(MockPlugin)), new MockAssembly("MockDir/MockPluginB.dll", typeof(MockPlugin)), new MockAssembly("MockDir/MockPluginC.dll", typeof(MockPlugin)) }; // Set up some mock data for available assemblies pluginLoader.AddBaseDir("MockDir"); for (int i = 0; i < mockPlugins.Length; i++) { pluginLoader.AddPlugin(mockPlugins[i]); } // Set up a plugin manager using the mock loader MockPluginManager pluginManager = new MockPluginManager(); pluginManager.Init(pluginLoader); // Load and init all plugins pluginManager.LoadPlugins(); pluginManager.InitPlugins(); // Now load them again pluginManager.LoadPlugins(); // Assert that we do not have any duplicates and no disposed plugins Assert.AreEqual(3, pluginManager.LoadedPlugins.Count()); Assert.IsEmpty(pluginManager.DisposedPlugins); // Assert that we did not load any assembly twice Assert.AreEqual(3, pluginLoader.LoadedAssemblies.Count()); // Let's try loading assembly duplicates manually for (int i = 0; i < mockPlugins.Length; i++) { MockPlugin plugin = pluginManager.LoadPlugin(mockPlugins[i], mockPlugins[i].Location); Assert.IsNotNull(plugin); } // Assert that we do not have any duplicates and no disposed plugins Assert.AreEqual(3, pluginManager.LoadedPlugins.Count()); Assert.IsEmpty(pluginManager.DisposedPlugins); // Assert that we did not load any assembly twice Assert.AreEqual(3, pluginLoader.LoadedAssemblies.Count()); pluginManager.Terminate(); } }