testdefaultpluginmanager.java

来自「模块化您的应用系统」· Java 代码 · 共 334 行 · 第 1/2 页

JAVA
334
字号
    }

    public void testGetModuleByModuleClassOneFound() throws PluginParseException, IOException
    {
        List pluginLoaders = new ArrayList();
        pluginLoaders.add(new SinglePluginLoader("test-tonic-plugin.xml"));

        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);

        PluginManager manager = new DefaultPluginManager(new MemoryPluginStateStore(), pluginLoaders, moduleDescriptorFactory, new PropertiesTonicPropertyManager());
        manager.init();

        Collection descriptors = manager.getEnabledModuleDescriptorsByClass(MockAnimalModuleDescriptor.class);
        assertNotNull(descriptors);
        assertEquals(1, descriptors.size());
        ModuleDescriptor moduleDescriptor = (ModuleDescriptor) descriptors.iterator().next();
        assertEquals("Bear Animal", moduleDescriptor.getName());

        descriptors = manager.getEnabledModuleDescriptorsByClass(MockMineralModuleDescriptor.class);
        assertNotNull(descriptors);
        assertEquals(1, descriptors.size());
        moduleDescriptor = (ModuleDescriptor) descriptors.iterator().next();
        assertEquals("Bar", moduleDescriptor.getName());
    }

    public void testGetModuleByModuleClassNoneFound() throws PluginParseException, IOException
    {
        List pluginLoaders = new ArrayList();
        pluginLoaders.add(new SinglePluginLoader("test-tonic-plugin.xml"));

        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);

        PluginManager manager = new DefaultPluginManager(new MemoryPluginStateStore(), pluginLoaders, moduleDescriptorFactory, new PropertiesTonicPropertyManager());
        manager.init();

        final Collection descriptors = manager.getEnabledModulesByClass(java.lang.String.class);
        assertNotNull(descriptors);
        assertTrue(descriptors.isEmpty());
    }

    public void testGetModuleDescriptorsByType() throws PluginParseException, IOException
    {
        List pluginLoaders = new ArrayList();
        pluginLoaders.add(new SinglePluginLoader("test-tonic-plugin.xml"));

        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);

        PluginManager manager = new DefaultPluginManager(new MemoryPluginStateStore(), pluginLoaders, moduleDescriptorFactory, new PropertiesTonicPropertyManager());
        manager.init();

        Collection descriptors = manager.getEnabledModuleDescriptorsByType("animal");
        assertNotNull(descriptors);
        assertEquals(1, descriptors.size());
        ModuleDescriptor moduleDescriptor = (ModuleDescriptor) descriptors.iterator().next();
        assertEquals("Bear Animal", moduleDescriptor.getName());

        descriptors = manager.getEnabledModuleDescriptorsByType("mineral");
        assertNotNull(descriptors);
        assertEquals(1, descriptors.size());
        moduleDescriptor = (ModuleDescriptor) descriptors.iterator().next();
        assertEquals("Bar", moduleDescriptor.getName());

        try
        {
            manager.getEnabledModuleDescriptorsByType("foobar");
            fail("Should have thrown exception.");
        }
        catch (IllegalArgumentException e)
        {
        }
    }

    public void testRetrievingDynamicResources() throws PluginParseException, IOException
    {
        createFillAndCleanTempPluginDirectory();

        PluginManager manager = makeClassLoadingPluginManager();

        InputStream is = manager.getDynamicResourceAsStream("tonic-plugin.xml");
        assertNotNull(is);
    }

    public void testFindingNewPlugins() throws PluginParseException, IOException
    {
        createFillAndCleanTempPluginDirectory();

        //delete paddington for the timebeing
        File paddington = new File(pluginsTestDir, PADDINGTON_JAR);
        paddington.delete();

        PluginManager manager = makeClassLoadingPluginManager();

        assertEquals(1, manager.getPlugins().size());
        assertNotNull(manager.getPlugin("test.tonic.plugin.classloaded2"));

        //restore paddington to test plugins dir
        FileUtils.copyDirectory(pluginsDirectory, pluginsTestDir);

        manager.scanForNewPlugins();
        assertEquals(2, manager.getPlugins().size());
        assertNotNull(manager.getPlugin("test.tonic.plugin.classloaded2"));
        assertNotNull(manager.getPlugin("test.tonic.plugin.classloaded"));

        manager.scanForNewPlugins();
        assertEquals(2, manager.getPlugins().size());
        assertNotNull(manager.getPlugin("test.tonic.plugin.classloaded2"));
        assertNotNull(manager.getPlugin("test.tonic.plugin.classloaded"));
    }

    private PluginManager makeClassLoadingPluginManager() throws PluginParseException, IOException
    {
        List pluginLoaders = new ArrayList();
        classLoadingPluginLoader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        pluginLoaders.add(classLoadingPluginLoader);
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        PluginManager manager = new DefaultPluginManager(new MemoryPluginStateStore(), pluginLoaders, moduleDescriptorFactory, new PropertiesTonicPropertyManager());
        manager.init();
        return manager;
    }

    public void testRemovingPlugins() throws PluginException, IOException
    {
        createFillAndCleanTempPluginDirectory();

        PluginManager manager = makeClassLoadingPluginManager();
        assertEquals(2, manager.getPlugins().size());
        manager.uninstall(manager.getPlugin("test.tonic.plugin.classloaded"));
        assertEquals(1, manager.getPlugins().size());
        assertNull(manager.getPlugin("test.tonic.plugin.classloaded"));
        assertEquals("Found unexpected files after removing plugin: " + Arrays.asList(pluginsTestDir.list()), 1, pluginsTestDir.listFiles().length);
    }

    public void testNonRemovablePlugins() throws PluginParseException, IOException
    {
        List pluginLoaders = new ArrayList();
        pluginLoaders.add(new SinglePluginLoader("test-tonic-plugin.xml"));
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);

        PluginManager manager = new DefaultPluginManager(new MemoryPluginStateStore(), pluginLoaders, moduleDescriptorFactory, new PropertiesTonicPropertyManager());
        manager.init();

        Plugin plugin = manager.getPlugin("test.tonic.plugin");
        assertFalse(plugin.isUninstallable());
        assertFalse(plugin.isResourceLoading());
        assertNull(plugin.getResourceAsStream("anything"));

        try
        {
            manager.uninstall(plugin);
            fail("Where was the exception?");
        }
        catch (PluginException p)
        {
        }
    }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?