package test;
import java.awt.MenuContainer;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import aQute.bnd.osgi.Builder;
import aQute.bnd.osgi.Constants;
import aQute.bnd.osgi.Processor;
import aQute.bnd.service.Plugin;
import aQute.service.reporter.Reporter;
import junit.framework.TestCase;
@SuppressWarnings("resource")
public class PluginTest extends TestCase {
private Processor main;
@Override
protected void setUp() {
main = new Processor();
}
static public class Foo {
}
public void testPluginInheritance() throws IOException {
Processor top = new Processor();
Processor middle = new Processor(top);
Processor bottom = new Processor(middle);
top.setProperty("-plugin.top", Foo.class.getName() + ";l=top");
middle.setProperty("-plugin.middle", Foo.class.getName() + ";l=middle");
assertEquals(1, top.getPlugins(Foo.class).size());
assertEquals(2, middle.getPlugins(Foo.class).size());
assertEquals(2, bottom.getPlugins(Foo.class).size());
assertEquals(top.getPlugin(Foo.class), bottom.getPlugin(Foo.class));
assertTrue(top.check());
assertTrue(middle.check());
assertTrue(bottom.check());
}
public void testMissingPluginNotUsed() throws Exception {
Builder p = new Builder();
p.setProperty("-plugin", "missing;command:=\"-abc,-def\"");
/* List<?> plugins = */p.getPlugins(Object.class);
assertTrue(p.check());
p.setProperty("-abc", "whatever");
p.setProperty("-resourceonly", "true");
p.setProperty("Include-Resource", "jar/osgi.jar");
p.build();
assertEquals(1, p.getErrors().size());
assertTrue(p.getErrors().get(0).contains("Missing plugin"));
}
static class TPlugin implements Plugin {
Map<String,String> properties;
Reporter reporter;
@Override
public void setProperties(Map<String,String> map) {
properties = map;
}
@Override
public void setReporter(Reporter processor) {
reporter = processor;
}
}
public void testPlugin() {
main.setProperty(Constants.PLUGIN, "test.PluginTest.TPlugin;a=1;b=2");
for (TPlugin plugin : main.getPlugins(TPlugin.class)) {
assertEquals(test.PluginTest.TPlugin.class, plugin.getClass());
assertEquals("1", plugin.properties.get("a"));
assertEquals("2", plugin.properties.get("b"));
assertSame(main, plugin.reporter);
}
}
@SuppressWarnings("deprecation")
public void testLoadPlugin() {
main.setProperty(Constants.PLUGIN, "thinlet.Thinlet;path:=jar/thinlet.jar");
for (java.applet.Applet applet : main.getPlugins(java.applet.Applet.class)) {
assertEquals("thinlet.Thinlet", applet.getClass().getName());
}
}
public void testLoadPluginFailsWithMissingPath() throws Exception {
Builder p = new Builder();
p.setProperty(Constants.PLUGIN, "thinlet.Thinlet");
p.setProperty("-fixupmessages", "^Exception: ");
p.getPlugins(Object.class);
assertTrue(p.check("plugin thinlet\\.Thinlet"));
}
public void testLoadPluginWithPath() {
Builder p = new Builder();
p.setProperty(Constants.PLUGIN, "thinlet.Thinlet;path:=jar/thinlet.jar");
List<MenuContainer> plugins = p.getPlugins(MenuContainer.class);
assertEquals(0, p.getErrors().size());
assertEquals(1, plugins.size());
assertEquals("thinlet.Thinlet", plugins.get(0).getClass().getName());
}
public void testLoadPluginWithGlobalPluginPath() {
Builder p = new Builder();
p.setProperty(Constants.PLUGIN, "thinlet.Thinlet");
p.setProperty(Constants.PLUGINPATH, "jar/thinlet.jar");
List<MenuContainer> plugins = p.getPlugins(MenuContainer.class);
assertEquals(0, p.getErrors().size());
assertEquals(1, plugins.size());
assertEquals("thinlet.Thinlet", plugins.get(0).getClass().getName());
}
}