1 package com.atlassian.plugins.codegen.annotations.asm;
2
3 import java.util.List;
4 import java.util.Map;
5
6 import com.atlassian.plugins.codegen.PluginModuleCreatorRegistryImpl;
7 import com.atlassian.plugins.codegen.annotations.DependencyDescriptor;
8 import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
9 import com.atlassian.plugins.codegen.modules.PluginModuleCreatorRegistry;
10
11 import org.junit.Before;
12 import org.junit.Test;
13
14 import fake.jar.annotation.parser.modules.JARInheritedValidJira;
15 import fake.jar.annotation.parser.modules.JARJiraAndConfluenceCreator;
16 import fake.jar.annotation.parser.modules.JARJiraAnnotatedWithoutInterface;
17 import fake.jar.annotation.parser.modules.JARValidJiraModuleCreator;
18 import fake.jar.annotation.parser.modules.dependencies.JARValidJiraWithDependencies;
19 import fake.jar.annotation.parser.modules.dependencies.JARValidJiraWithMissingNestedDependency;
20 import fake.jar.annotation.parser.modules.dependencies.JARValidJiraWithMissingScopeDependency;
21 import fake.jar.annotation.parser.modules.nested.JARNestedValidJira;
22
23 import static org.junit.Assert.assertNotNull;
24 import static org.junit.Assert.assertTrue;
25
26
27
28
29 public class JARAnnotationParserTest
30 {
31 private static final String MODULES_PACKAGE = "fake.jar.annotation.parser.modules";
32
33 private PluginModuleCreatorRegistry registry;
34 private ModuleCreatorAnnotationParser parser;
35
36 @Before
37 public void setup()
38 {
39 registry = new PluginModuleCreatorRegistryImpl();
40 parser = new ModuleCreatorAnnotationParser(registry);
41 }
42
43 @Test
44 public void hasJiraModule() throws Exception
45 {
46
47 parser.parse(MODULES_PACKAGE);
48
49 Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
50 assertNotNull("module map is null", modules);
51 assertTrue("no testmodules registered", modules.size() > 0);
52 assertTrue("jira module not found", modules.containsKey(JARValidJiraModuleCreator.class));
53 }
54
55 @Test
56 public void annotatedWithoutInterfaceIsNotRegistered() throws Exception
57 {
58 parser.parse(MODULES_PACKAGE);
59
60 Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
61 assertNotNull("module map is null", modules);
62 assertTrue("no testmodules registered", modules.size() > 0);
63 assertTrue("non-module found", !modules.containsKey(JARJiraAnnotatedWithoutInterface.class));
64 }
65
66 @Test
67 public void nestedCreatorsAreRegistered() throws Exception
68 {
69 parser.parse(MODULES_PACKAGE);
70
71 Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
72 assertNotNull("module map is null", modules);
73 assertTrue("no testmodules registered", modules.size() > 0);
74 assertTrue("nested jira module not found", modules.containsKey(JARNestedValidJira.class));
75 }
76
77 @Test
78 public void inheritedCreatorsAreRegistered() throws Exception
79 {
80 parser.parse(MODULES_PACKAGE);
81
82 Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
83 assertNotNull("module map is null", modules);
84 assertTrue("no testmodules registered", modules.size() > 0);
85 assertTrue("inherited jira module not found", modules.containsKey(JARInheritedValidJira.class));
86 }
87
88 @Test
89 public void muiltipleProductsHaveSameCreator() throws Exception
90 {
91 parser.parse(MODULES_PACKAGE);
92
93 Map<Class, PluginModuleCreator> jiraModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
94 Map<Class, PluginModuleCreator> confluenceModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.CONFLUENCE);
95
96 assertTrue("jiraAndConfluence not found for jira", jiraModules.containsKey(JARJiraAndConfluenceCreator.class));
97 assertTrue("jiraAndConfluence not found for confluence", confluenceModules.containsKey(JARJiraAndConfluenceCreator.class));
98 }
99
100 @Test
101 public void noDependenciesReturnsEmptyList() throws Exception
102 {
103 parser.parse(MODULES_PACKAGE);
104 List<DependencyDescriptor> dependencies = registry.getDependenciesForCreatorClass(JARValidJiraModuleCreator.class);
105
106 assertTrue("expected empty dependency list", dependencies.isEmpty());
107 }
108
109 @Test
110 public void validDependenciesAreRegistered() throws Exception
111 {
112 parser.parse(MODULES_PACKAGE);
113
114 DependencyDescriptor expectedServlet = new DependencyDescriptor();
115 expectedServlet.setGroupId("javax.servlet");
116 expectedServlet.setArtifactId("servlet-api");
117 expectedServlet.setVersion("2.4");
118 expectedServlet.setScope("provided");
119
120 DependencyDescriptor expectedMockito = new DependencyDescriptor();
121 expectedMockito.setGroupId("org.mockito");
122 expectedMockito.setArtifactId("mockito-all");
123 expectedMockito.setVersion("1.8.5");
124 expectedMockito.setScope("test");
125
126 List<DependencyDescriptor> dependencies = registry.getDependenciesForCreatorClass(JARValidJiraWithDependencies.class);
127 assertTrue("dependency list is empty", !dependencies.isEmpty());
128 assertTrue("servlet-api dependency not found", dependencies.contains(expectedServlet));
129 assertTrue("mockito dependency not found", dependencies.contains(expectedMockito));
130 }
131
132 @Test
133 public void validDependencyWithMissingScopeIsRegistered() throws Exception
134 {
135 parser.parse(MODULES_PACKAGE);
136
137 DependencyDescriptor expectedServlet = new DependencyDescriptor();
138 expectedServlet.setGroupId("javax.servlet");
139 expectedServlet.setArtifactId("servlet-api");
140 expectedServlet.setVersion("2.4");
141
142 List<DependencyDescriptor> dependencies = registry.getDependenciesForCreatorClass(JARValidJiraWithMissingScopeDependency.class);
143 assertTrue("dependency list is empty", !dependencies.isEmpty());
144 assertTrue("servlet-api dependency not found", dependencies.contains(expectedServlet));
145 }
146
147 @Test
148 public void depedenciesWithoutNestedAnnotationIsNotRegistered() throws Exception
149 {
150 parser.parse(MODULES_PACKAGE);
151 List<DependencyDescriptor> dependencies = registry.getDependenciesForCreatorClass(JARValidJiraWithMissingNestedDependency.class);
152 assertTrue("dependency list is empty for missing nested annotation", dependencies.isEmpty());
153 }
154 }