📄 testclassloadingpluginloader.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 + -