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