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.annotation.parser.modules.InheritedValidJira;
13  import fake.annotation.parser.modules.JiraAndConfluenceCreator;
14  import fake.annotation.parser.modules.JiraAnnotatedWithoutInterface;
15  import fake.annotation.parser.modules.ValidJiraModuleCreator;
16  import fake.annotation.parser.modules.nested.NestedValidJira;
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 AnnotationParserTest
25  {
26  
27      private static final String MODULES_PACKAGE = "fake.annotation.parser.modules";
28  
29      private PluginModuleCreatorRegistry registry;
30      private ModuleCreatorAnnotationParser parser;
31  
32      @Before
33      public void setup()
34      {
35          registry = new PluginModuleCreatorRegistryImpl();
36          parser = new ModuleCreatorAnnotationParser(registry);
37      }
38  
39      @Test
40      public void hasJiraModule() throws Exception
41      {
42  
43          parser.parse(MODULES_PACKAGE);
44  
45          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
46          assertNotNull("module map is null", modules);
47          assertTrue("no testmodules registered", modules.size() > 0);
48          assertTrue("jira module not found", modules.containsKey(ValidJiraModuleCreator.class));
49      }
50  
51      @Test
52      public void annotatedWithoutInterfaceIsNotRegistered() throws Exception
53      {
54          parser.parse(MODULES_PACKAGE);
55  
56          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
57          assertNotNull("module map is null", modules);
58          assertTrue("no testmodules registered", modules.size() > 0);
59          assertTrue("non-module found", !modules.containsKey(JiraAnnotatedWithoutInterface.class));
60      }
61  
62      @Test
63      public void nestedCreatorsAreRegistered() throws Exception
64      {
65          parser.parse(MODULES_PACKAGE);
66  
67          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
68          assertNotNull("module map is null", modules);
69          assertTrue("no testmodules registered", modules.size() > 0);
70          assertTrue("nested jira module not found", modules.containsKey(NestedValidJira.class));
71      }
72  
73      @Test
74      public void inheritedCreatorsAreRegistered() throws Exception
75      {
76          parser.parse(MODULES_PACKAGE);
77  
78          Map<Class, PluginModuleCreator> modules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
79          assertNotNull("module map is null", modules);
80          assertTrue("no testmodules registered", modules.size() > 0);
81          assertTrue("inherited jira module not found", modules.containsKey(InheritedValidJira.class));
82      }
83  
84      @Test
85      public void muiltipleProductsHaveSameCreator() throws Exception
86      {
87          parser.parse(MODULES_PACKAGE);
88  
89          Map<Class, PluginModuleCreator> jiraModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.JIRA);
90          Map<Class, PluginModuleCreator> confluenceModules = registry.getModuleCreatorsForProduct(PluginModuleCreatorRegistry.CONFLUENCE);
91  
92          assertTrue("jiraAndConfluence not found for jira", jiraModules.containsKey(JiraAndConfluenceCreator.class));
93          assertTrue("jiraAndConfluence not found for confluence", confluenceModules.containsKey(JiraAndConfluenceCreator.class));
94      }
95  }