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