示例#1
0
        /// <summary>
        /// Override plugin directories for testing
        /// It will remove all test files when disposed
        /// </summary>
        /// <param name="pluginDirectories">Plugin directories, default is [ "App_Data/__TestPlugins" ]</param>
        /// <param name="plugins">Plugins, default is [ "PluginA", "PluginB" ]</param>
        /// <param name="extra">Extra data, default is empty</param>
        /// <param name="pluginDirectoryIndex">Which plugin directory will use to create plugins</param>
        public TestDirectoryLayout(
            IList <string> pluginDirectories   = null,
            IList <string> plugins             = null,
            IDictionary <string, object> extra = null,
            int pluginDirectoryIndex           = 0)
        {
            OverrideIoc   = Application.OverrideIoc();
            WebsiteConfig = new WebsiteConfig()
            {
                PluginDirectories = pluginDirectories ?? new List <string>()
                {
                    "App_Data/__TestPlugins"
                },
                Plugins = plugins ?? new List <string>()
                {
                    "PluginA", "PluginB"
                },
                Extra = extra ?? new Dictionary <string, object>()
            };
            CleanupPaths = new List <string>();
            // Mock ConfigManager, PathConfig, PathManager, PluginManager
            var configManagerMock = Substitute.ForPartsOf <ConfigManager>();

            configManagerMock.WebsiteConfig.Returns(WebsiteConfig);
            Application.Ioc.Unregister <ConfigManager>();
            Application.Ioc.Unregister <PathManager>();
            Application.Ioc.Unregister <PluginManager>();
            Application.Ioc.RegisterInstance(configManagerMock);
            Application.Ioc.RegisterMany <PathManager>(ReuseType.Singleton);
            Application.Ioc.RegisterMany <PluginManager>(ReuseType.Singleton);
            // Create plugin directories and plugins
            var pathManager     = Application.Ioc.Resolve <PathManager>();
            var pluginManager   = Application.Ioc.Resolve <PluginManager>();
            var pluginDirectory = pathManager.GetPluginDirectories()[pluginDirectoryIndex];

            foreach (var plugin in WebsiteConfig.Plugins)
            {
                var directory = Path.Combine(pluginDirectory, plugin);
                Directory.CreateDirectory(directory);
                pluginManager.Plugins.Add(PluginInfo.FromDirectory(directory));
            }
            foreach (var directory in pathManager.GetPluginDirectories())
            {
                CleanupPaths.Add(directory);
            }
        }