1   package com.atlassian.plugins.codegen.annotations.asm;
2   
3   import java.util.Map;
4   
5   import com.atlassian.plugins.codegen.PluginModuleCreatorRegistryImpl;
6   import com.atlassian.plugins.codegen.modules.PluginModuleCreator;
7   import com.atlassian.plugins.codegen.modules.PluginModuleCreatorRegistry;
8   
9   import org.junit.Before;
10  import org.junit.Test;
11  
12  import fake.jar.annotation.parser.modules.JARInheritedValidJira;
13  import fake.jar.annotation.parser.modules.JARJiraAndConfluenceCreator;
14  import fake.jar.annotation.parser.modules.JARJiraAnnotatedWithoutInterface;
15  import fake.jar.annotation.parser.modules.JARValidJiraModuleCreator;
16  import fake.jar.annotation.parser.modules.nested.JARNestedValidJira;
17  
18  import static org.junit.Assert.assertNotNull;
19  import static org.junit.Assert.assertTrue;
20  
21  /**
22   * @since 3.6
23   */
24  public class JARAnnotationParserTest
25  {
26      private static final String MODULES_PACKAGE = "fake.jar.annotation.parser.modules";
27  
28      private PluginModuleCreatorRegistry registry;
29      private ModuleCreatorAnnotationParser parser;
30  
31      @Before
32      public void setup()
33      {
34          registry = new PluginModuleCreatorRegistryImpl();
35          parser = new ModuleCreatorAnnotationParser(registry);
36      }
37  
38      @Test
39      public void hasJiraModule() throws Exception
40      {
41  
42          parser.parse(MODULES_PACKAGE);
43  
44          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
45          assertNotNull("module map is null", modules);
46          assertTrue("no testmodules registered", modules.size() > 0);
47          assertTrue("jira module not found", modules.containsKey(JARValidJiraModuleCreator.class));
48      }
49  
50      @Test
51      public void annotatedWithoutInterfaceIsNotRegistered() throws Exception
52      {
53          parser.parse(MODULES_PACKAGE);
54  
55          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
56          assertNotNull("module map is null", modules);
57          assertTrue("no testmodules registered", modules.size() > 0);
58          assertTrue("non-module found", !modules.containsKey(JARJiraAnnotatedWithoutInterface.class));
59      }
60  
61      @Test
62      public void nestedCreatorsAreRegistered() throws Exception
63      {
64          parser.parse(MODULES_PACKAGE);
65  
66          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
67          assertNotNull("module map is null", modules);
68          assertTrue("no testmodules registered", modules.size() > 0);
69          assertTrue("nested jira module not found", modules.containsKey(JARNestedValidJira.class));
70      }
71  
72      @Test
73      public void inheritedCreatorsAreRegistered() throws Exception
74      {
75          parser.parse(MODULES_PACKAGE);
76  
77          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
78          assertNotNull("module map is null", modules);
79          assertTrue("no testmodules registered", modules.size() > 0);
80          assertTrue("inherited jira module not found", modules.containsKey(JARInheritedValidJira.class));
81      }
82  
83      @Test
84      public void muiltipleProductsHaveSameCreator() throws Exception
85      {
86          parser.parse(MODULES_PACKAGE);
87  
88          Map<Class, PluginModuleCreator> jiraModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
89          Map<Class, PluginModuleCreator> confluenceModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.CONFLUENCE);
90  
91          assertTrue("jiraAndConfluence not found for jira", jiraModules.containsKey(JARJiraAndConfluenceCreator.class));
92          assertTrue("jiraAndConfluence not found for confluence", confluenceModules.containsKey(JARJiraAndConfluenceCreator.class));
93      }
94  }