⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testsinglepluginloader.java

📁 模块化您的应用系统
💻 JAVA
字号:
package com.opensymphony.tonic.loaders;

import com.opensymphony.tonic.DefaultModuleDescriptorFactory;
import com.opensymphony.tonic.ModuleDescriptor;
import com.opensymphony.tonic.Plugin;
import com.opensymphony.tonic.PluginParseException;
import com.opensymphony.tonic.descriptors.ResourcedModuleDescriptor;
import com.opensymphony.tonic.elements.ResourceDescriptor;
import com.opensymphony.tonic.mock.*;
import com.opensymphony.tonic.util.ClassLoaderUtils;
import junit.framework.TestCase;

import java.util.Collection;
import java.util.List;

public class TestSinglePluginLoader extends TestCase
{
    public void testSystemPluginRegularLoader() throws Exception
    {
        SinglePluginLoader loader = new SinglePluginLoader("test-system-plugin.xml");
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);

        assertEquals(1, plugins.size());

        // test the tonic information
        Plugin plugin = (Plugin) plugins.iterator().next();
        assertFalse(plugin.isSystemPlugin());
    }

    public void testSystemPluginSystemLoader() throws Exception
    {
        SinglePluginLoader loader = new SinglePluginLoader("test-system-plugin.xml");
        loader.setRecogniseSystemPlugins(true);
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);

        assertEquals(1, plugins.size());

        // test the tonic information
        Plugin plugin = (Plugin) plugins.iterator().next();
        assertTrue(plugin.isSystemPlugin());
    }

    public void testTonicPlugin() throws Exception
    {
        SinglePluginLoader loader = new SinglePluginLoader("test-tonic-plugin.xml");
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);

        assertEquals(1, plugins.size());

        // test the tonic information
        Plugin plugin = (Plugin) plugins.iterator().next();
        assertEquals("Test Plugin", plugin.getName());
        assertEquals("test.tonic.plugin", plugin.getKey());
        assertNotNull(plugin.getPluginInformation());
        assertEquals("1.0", plugin.getPluginInformation().getVersion());
        assertEquals("This plugin descriptor is just used for test purposes!", plugin.getPluginInformation().getDescription());
        assertEquals("Atlassian Software Systems Pty Ltd", plugin.getPluginInformation().getVendorName());
        assertEquals("http://www.atlassian.com", plugin.getPluginInformation().getVendorUrl());
        assertEquals(3f, plugin.getPluginInformation().getMinVersion(), 0);
        assertEquals(3.1f, plugin.getPluginInformation().getMaxVersion(), 0);
        assertEquals(2, plugin.getModuleDescriptors().size());

        ResourcedModuleDescriptor bearDescriptor = (ResourcedModuleDescriptor) plugin.getModuleDescriptor("bear");
        assertEquals("test.tonic.plugin:bear", bearDescriptor.getCompleteKey());
        assertEquals("bear", bearDescriptor.getKey());
        assertEquals("Bear Animal", bearDescriptor.getName());
        assertEquals(MockBear.class, bearDescriptor.getModuleClass());
        assertEquals("A plugin module to describe a bear", bearDescriptor.getDescription());
        assertTrue(bearDescriptor.isEnabledByDefault());

        List resources = bearDescriptor.getResourceDescriptors();
        assertEquals(3, resources.size());

        assertEquals("20", bearDescriptor.getParams().get("height"));
        assertEquals("brown", bearDescriptor.getParams().get("colour"));

        List goldDescriptors = plugin.getModuleDescriptorsByModuleClass(MockGold.class);
        assertEquals(1, goldDescriptors.size());
        ModuleDescriptor goldDescriptor = (ModuleDescriptor) goldDescriptors.get(0);
        assertEquals("test.tonic.plugin:gold", goldDescriptor.getCompleteKey());
        assertEquals(new MockGold(20), goldDescriptor.getModule());
        assertEquals(goldDescriptors, plugin.getModuleDescriptorsByModuleClass(MockMineral.class));

        assertEquals(1, plugin.getResourceDescriptors().size());
        ResourceDescriptor pluginResource = plugin.getResourceDescriptor("download", "icon.gif");
        assertEquals("/icon.gif", pluginResource.getLocation());
    }

    public void testDisabledPlugin() throws PluginParseException
    {
        SinglePluginLoader loader = new SinglePluginLoader("test-disabled-plugin.xml");
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);
        assertEquals(1, plugins.size());
        final Plugin plugin = (Plugin) plugins.iterator().next();
        assertFalse(plugin.isEnabledByDefault());

        assertEquals(1, plugin.getModuleDescriptors().size());
        final ModuleDescriptor module = plugin.getModuleDescriptor("gold");
        assertFalse(module.isEnabledByDefault());
    }

    public void testPluginByUrl() throws PluginParseException
    {
        SinglePluginLoader loader = new SinglePluginLoader(ClassLoaderUtils.getResourceAsStream("test-disabled-plugin.xml", SinglePluginLoader.class));
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);
        assertEquals(1, plugins.size());
        assertFalse(((Plugin) plugins.iterator().next()).isEnabledByDefault());
    }

    public void testUnfoundPlugin() throws PluginParseException
    {
        try
        {
            SinglePluginLoader loader = new SinglePluginLoader("bullshit.xml");
            loader.loadAllPlugins(null);
            fail("Should have blown up.");
        }
        catch (PluginParseException e)
        {
            assertEquals("Invalid InputStream specified?", e.getMessage());
        }
    }

    public void testUnknownPluginModule() throws PluginParseException
    {
        try
        {
            SinglePluginLoader loader = new SinglePluginLoader("test-bad-plugin.xml");
            loader.loadAllPlugins(new DefaultModuleDescriptorFactory());
            fail("Should have blown up.");
        }
        catch (PluginParseException e)
        {
            assertEquals("Could not find descriptor for module 'unknown-plugin' in plugin 'Bad Plugin'", e.getMessage());
        }
    }

    public void testBadPluginKey() throws PluginParseException
    {
        try
        {
            SinglePluginLoader loader = new SinglePluginLoader("test-bad-plugin-key-plugin.xml");
            loader.loadAllPlugins(null);
            fail("Should have blown up.");
        }
        catch (PluginParseException e)
        {
            assertEquals("Plugin key's cannot contain ':'. Key is 'test:bad'", e.getMessage());
        }
    }

    public void testNonUniqueKeysWithinAPlugin() throws PluginParseException
    {
        SinglePluginLoader loader = new SinglePluginLoader("test-bad-non-unique-keys-plugin.xml");
        DefaultModuleDescriptorFactory moduleDescriptorFactory = new DefaultModuleDescriptorFactory();
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);

        try
        {
            loader.loadAllPlugins(moduleDescriptorFactory);
            fail("Should have died with duplicate key exception.");
        }
        catch (PluginParseException e)
        {
            assertEquals("Found duplicate key 'bear' within plugin 'test.bad.plugin'", e.getMessage());
        }
    }

    public void testBadResource()
    {
        try
        {
            new SinglePluginLoader("foo").loadAllPlugins(null);
            fail("Should have thrown exception");
        }
        catch (PluginParseException e)
        {
            return;
        }
    }
}

⌨️ 快捷键说明

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