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