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   * @since 3.6
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 }