View Javadoc
1   package com.atlassian.plugin.osgi.factory.transform.stage;
2   
3   import com.atlassian.plugin.test.PluginJarBuilder;
4   import com.google.common.collect.Sets;
5   import org.junit.Test;
6   
7   import java.io.File;
8   import java.io.FileInputStream;
9   import java.util.Set;
10  import java.util.jar.JarInputStream;
11  
12  import static org.junit.Assert.assertEquals;
13  import static org.junit.Assert.assertNull;
14  import static org.junit.Assert.assertTrue;
15  
16  public class TestTransformStageUtils {
17  
18      @Test
19      public void testScanJarForItems() throws Exception {
20          final File pluginFile = new PluginJarBuilder()
21                  .addFormattedJava("my.Foo",
22                          "package my;",
23                          "public class Foo {",
24                          "  com.atlassian.plugin.osgi.factory.transform.Fooable bar;",
25                          "}")
26                  .addFormattedJava("com.atlassian.plugin.osgi.SomeInterface",
27                          "package com.atlassian.plugin.osgi;",
28                          "public interface SomeInterface {}")
29                  .addFormattedResource("atlassian-plugin.xml",
30                          "<atlassian-plugin name='plugin1' key='first' pluginsVersion='2'>",
31                          "    <plugin-info>",
32                          "        <version>1.0</version>",
33                          "    </plugin-info>",
34                          "<component key='component1' class='my.Foo'/>",
35                          "<component-import key='component1'>",
36                          "    <interface>com.atlassian.plugin.osgi.SomeInterface</interface>",
37                          "</component-import>",
38                          "</atlassian-plugin>")
39                  .build();
40  
41          FileInputStream fis = new FileInputStream(pluginFile);
42          JarInputStream jis = new JarInputStream(fis);
43          Set<String> classes = TransformStageUtils.scanJarForItems(jis, Sets.newHashSet("my.Foo"), TransformStageUtils.JarEntryToClassName.INSTANCE);
44  
45          assertEquals(1, classes.size());
46          assertTrue(classes.contains("my.Foo"));
47      }
48  
49      @Test
50      public void testFindClassesAvailableInInnerJars() throws Exception {
51          // create inner jars.
52          final File innerjar1 = new PluginJarBuilder("innerjar1")
53                  .addFormattedJava("my.innerpackage1.Interface1",
54                          "package my.innerpackage1;",
55                          "public class Interface1 {}")
56                  .addResource("META-INF/atlassian-plugin.xml", "helloworld")
57                  .build();
58  
59          final File innerjar2 = new PluginJarBuilder("innerjar2")
60                  .addFormattedJava("my.innerpackage2.Interface2",
61                          "package my.innerpackage2;",
62                          "public class Interface2 {}")
63                  .build();
64  
65          // create a jar with embedded jars.
66          final File pluginJar = new PluginJarBuilder("plugin")
67                  .addFormattedResource("atlassian-plugin.xml",
68                          "<atlassian-plugin name='Test Bundle instruction plugin 2' key='test.plugin'>",
69                          "    <plugin-info>",
70                          "        <version>1.0</version>",
71                          "        <bundle-instructions>",
72                          "            <Export-Package>!*.internal.*,*</Export-Package>",
73                          "        </bundle-instructions>",
74                          "    </plugin-info>",
75                          "</atlassian-plugin>")
76                  .addFormattedJava("my.MyFooChild",
77                          "package my;",
78                          "public class MyFooChild extends com.atlassian.plugin.osgi.factory.transform.dummypackage2.DummyClass2 {",
79                          "}")
80                  .addFile("META-INF/lib/myjar1.jar", innerjar1)
81                  .addFile("META-INF/lib/myjar2.jar", innerjar2)
82                  .build();
83  
84          Set<String> found
85                  = TransformStageUtils.scanInnerJars(pluginJar,
86                  Sets.newHashSet("META-INF/lib/myjar1.jar", "META-INF/lib/myjar2.jar"),
87                  Sets.newHashSet("my.innerpackage1.Interface1", "my.innerpackage2.Interface2", "my.innerpackage3.Interface3"));
88          assertEquals(2, found.size());
89          assertTrue(found.contains("my.innerpackage1.Interface1"));
90          assertTrue(found.contains("my.innerpackage2.Interface2"));
91      }
92  
93      @Test
94      public void testGetPackageName() {
95          assertEquals("com.atlassian.plugin.osgi", TransformStageUtils.getPackageName("com.atlassian.plugin.osgi.SomeInterface"));
96          assertEquals("java.lang", TransformStageUtils.getPackageName("java.lang.Class"));
97          assertEquals("com.hello.world", TransformStageUtils.getPackageName("com.hello.world.Class1$Inner1"));
98      }
99  
100     @Test
101     public void testJarPathToClassName() {
102         assertEquals("com.atlassian.osgi.Test", TransformStageUtils.jarPathToClassName("com/atlassian/osgi/Test.class"));
103         assertEquals("Test", TransformStageUtils.jarPathToClassName("Test.class"));
104         assertNull(TransformStageUtils.jarPathToClassName("META-INF/atlassian-plugin.xml"));
105         assertNull(TransformStageUtils.jarPathToClassName(null));
106         assertNull(TransformStageUtils.jarPathToClassName(""));
107     }
108 }