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
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
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 }