1 package com.atlassian.plugin.osgi.factory.transform.stage;
2
3 import com.atlassian.plugin.PluginAccessor;
4 import com.atlassian.plugin.JarPluginArtifact;
5 import com.atlassian.plugin.osgi.SomeInterface;
6 import com.atlassian.plugin.osgi.factory.transform.TransformContext;
7 import com.atlassian.plugin.osgi.factory.transform.model.SystemExports;
8 import com.atlassian.plugin.test.PluginJarBuilder;
9
10 import org.dom4j.DocumentException;
11 import org.dom4j.DocumentHelper;
12 import org.dom4j.Element;
13
14 import java.io.File;
15 import java.io.IOException;
16
17 import junit.framework.TestCase;
18
19 public class TestComponentImportSpringStage extends TestCase
20 {
21 public void testTransform() throws IOException, DocumentException
22 {
23 final ComponentImportSpringStage stage = new ComponentImportSpringStage();
24
25
26 Element pluginRoot = DocumentHelper.createDocument().addElement("atlassian-plugin");
27 Element component = pluginRoot.addElement("component-import");
28 component.addAttribute("key", "foo");
29 component.addAttribute("interface", "my.Foo");
30 SpringTransformerTestHelper.transform(stage, pluginRoot, "osgi:reference[@id='foo']/osgi:interfaces/beans:value/text()='my.Foo'");
31
32
33 pluginRoot = DocumentHelper.createDocument().addElement("atlassian-plugin");
34 component = pluginRoot.addElement("component-import");
35 component.addAttribute("key", "foo");
36 final Element inf = component.addElement("interface");
37 inf.setText("my.IFoo");
38 SpringTransformerTestHelper.transform(stage, pluginRoot, "osgi:reference[@id='foo']/osgi:interfaces/beans:value/text()='my.IFoo'");
39
40 }
41
42 public void testTransformWithCustomFilter() throws IOException, DocumentException
43 {
44 final ComponentImportSpringStage stage = new ComponentImportSpringStage();
45
46 Element pluginRoot = DocumentHelper.createDocument().addElement("atlassian-plugin");
47 Element component = pluginRoot.addElement("component-import");
48 component.addAttribute("key", "foo");
49 component.addAttribute("interface", "my.Foo");
50 component.addAttribute("filter", "(foo=bar)");
51 SpringTransformerTestHelper.transform(stage, pluginRoot, "osgi:reference[@id='foo' and @filter='(foo=bar)']'");
52 }
53
54 public void testTransformForOneApp() throws IOException, DocumentException
55 {
56 final ComponentImportSpringStage stage = new ComponentImportSpringStage();
57
58 Element pluginRoot = DocumentHelper.createDocument().addElement("atlassian-plugin");
59 Element component = pluginRoot.addElement("component-import");
60 component.addAttribute("key", "foo");
61 component.addAttribute("interface", "my.Foo");
62 component.addAttribute("application", "bob");
63 SpringTransformerTestHelper.transform(stage, pluginRoot, "not(osgi:reference[@id='foo']/osgi:interfaces/beans:value/text()='my.Foo')");
64
65 pluginRoot = DocumentHelper.createDocument().addElement("atlassian-plugin");
66 component = pluginRoot.addElement("component-import");
67 component.addAttribute("key", "foo");
68 component.addAttribute("interface", "my.Foo");
69 component.addAttribute("application", "foo");
70 SpringTransformerTestHelper.transform(stage, pluginRoot, "osgi:reference[@id='foo']/osgi:interfaces/beans:value/text()='my.Foo'");
71 }
72
73 public void testTransformImportEvenUnusedPackages() throws Exception, DocumentException
74 {
75 final ComponentImportSpringStage stage = new ComponentImportSpringStage();
76 final File jar = new PluginJarBuilder().addFormattedResource("atlassian-plugin.xml", "<atlassian-plugin>",
77 " <component-import key='foo' interface='com.atlassian.plugin.osgi.SomeInterface' />", "</atlassian-plugin>").build();
78
79 final TransformContext context = new TransformContext(null, SystemExports.NONE, new JarPluginArtifact(jar), null, PluginAccessor.Descriptor.FILENAME);
80 stage.execute(context);
81 assertTrue(context.getExtraImports().contains(SomeInterface.class.getPackage().getName()));
82
83 }
84 }