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

📄 testclassloadingpluginloader.java

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

import com.opensymphony.tonic.*;
import com.opensymphony.tonic.util.FileUtils;
import com.opensymphony.tonic.loaders.classloading.AbstractTestClassLoader;
import com.opensymphony.tonic.mock.MockAnimalModuleDescriptor;
import com.opensymphony.tonic.mock.MockBear;
import com.opensymphony.tonic.mock.MockMineralModuleDescriptor;

import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TestClassLoadingPluginLoader extends AbstractTestClassLoader
{
    private static final Log log = LogFactory.getLog(TestClassLoadingPluginLoader.class);
    ClassLoadingPluginLoader loader;
    DefaultModuleDescriptorFactory moduleDescriptorFactory;

    public void setUp() throws Exception
    {
        super.setUp();
        moduleDescriptorFactory = new DefaultModuleDescriptorFactory();

        createFillAndCleanTempPluginDirectory();
    }

    public void tearDown() throws Exception
    {
        if (loader != null)
        {
           loader.shutDown();
        }

        assertTrue(FileUtils.deleteDir(pluginsTestDir));
        super.tearDown();
    }

    public void testTonicPlugin() throws Exception
    {
        addTestModuleDecriptors();
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);

        assertEquals(2, plugins.size());

        for (Iterator iterator = plugins.iterator(); iterator.hasNext();)
        {
            Plugin plugin = (Plugin) iterator.next();

            assertTrue(plugin.getName().equals("Test Class Loaded Plugin") || plugin.getName().equals("Test Class Loaded Plugin 2"));

            if (plugin.getName().equals("Test Class Loaded Plugin")) // asserts for first tonic
            {
                assertEquals("Test Class Loaded Plugin", plugin.getName());
                assertEquals("test.tonic.plugin.classloaded", plugin.getKey());
                assertEquals(1, plugin.getModuleDescriptors().size());
                MockAnimalModuleDescriptor paddingtonDescriptor = (MockAnimalModuleDescriptor) plugin.getModuleDescriptor("paddington");
                assertEquals("Paddington Bear", paddingtonDescriptor.getName());
                MockBear paddington = (MockBear)paddingtonDescriptor.getModule();
                assertEquals("com.opensymphony.tonic.mock.MockPaddington", paddington.getClass().getName());
            }
            else if (plugin.getName().equals("Test Class Loaded Plugin 2")) // asserts for second tonic
            {
                assertEquals("Test Class Loaded Plugin 2", plugin.getName());
                assertEquals("test.tonic.plugin.classloaded2", plugin.getKey());
                assertEquals(1, plugin.getModuleDescriptors().size());
                MockAnimalModuleDescriptor poohDescriptor = (MockAnimalModuleDescriptor) plugin.getModuleDescriptor("pooh");
                assertEquals("Pooh Bear", poohDescriptor.getName());
                MockBear pooh = (MockBear)poohDescriptor.getModule();
                assertEquals("com.opensymphony.tonic.mock.MockPooh", pooh.getClass().getName());
            }
            else
            {
                fail("What plugin name?!");
            }
        }
    }

    private void addTestModuleDecriptors()
    {
        moduleDescriptorFactory.addModuleDescriptor("animal", MockAnimalModuleDescriptor.class);
        moduleDescriptorFactory.addModuleDescriptor("mineral", MockMineralModuleDescriptor.class);
    }

    public void testSupportsAddition()
    {
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        assertTrue(loader.supportsAddition());
    }

    public void testSupportsRemoval()
    {
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        assertTrue(loader.supportsRemoval());
    }

    public void testNoFoundPlugins()
    {
        addTestModuleDecriptors();
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        Collection col = loader.addFoundPlugins(moduleDescriptorFactory);
        assertFalse(col.isEmpty());

        col = loader.addFoundPlugins(moduleDescriptorFactory);
        assertTrue(col.isEmpty());
    }

    public void testFoundPlugin() throws PluginParseException, IOException
    {
        //delete paddington for the timebeing
        File paddington = new File(pluginsTestDir + File.separator + PADDINGTON_JAR);
        paddington.delete();

        addTestModuleDecriptors();
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        loader.loadAllPlugins(moduleDescriptorFactory);

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

        Collection col = loader.addFoundPlugins(moduleDescriptorFactory);
        assertEquals(1, col.size());
        // next time we shouldn't find any new plugins
        col = loader.addFoundPlugins(moduleDescriptorFactory);
        assertEquals(0, col.size());
    }

    public void testRemovePlugin() throws PluginException, IOException
    {
        addTestModuleDecriptors();
        loader = new ClassLoadingPluginLoader(pluginsTestDir, null, "tonic-plugin.xml");
        Collection plugins = loader.loadAllPlugins(moduleDescriptorFactory);

        //duplicate the paddington tonic before removing the original
        //the duplicate will be used to restore the deleted original after the test
        File paddington = new File(pluginsTestDir + File.separator + PADDINGTON_JAR);

        Iterator iter = plugins.iterator();

        Plugin paddingtonPlugin = null;

        while (iter.hasNext())
        {
            Plugin plugin = (Plugin) iter.next();

            if (plugin.getName().equals("Test Class Loaded Plugin"))
            {
                paddingtonPlugin = plugin;
                break;
            }
        }

        if (paddingtonPlugin == null)
            fail("Can't find test plugin 1 (paddington)");

        loader.removePlugin(paddingtonPlugin);
    }



}

⌨️ 快捷键说明

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