View Javadoc
1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.ModuleDescriptorFactory;
4   import com.atlassian.plugin.PluginAccessor;
5   import com.atlassian.plugin.PluginRegistry;
6   import com.atlassian.plugin.event.PluginEventManager;
7   import org.junit.runner.RunWith;
8   import org.junit.runners.Parameterized;
9   
10  import java.util.Arrays;
11  import java.util.Collection;
12  
13  @RunWith(Parameterized.class)
14  public class TestDefaultPluginManagerWithProductPluginAccessor extends TestDefaultPluginManager {
15  
16      private interface PluginAccessorSupplier {
17          PluginAccessor supply(final PluginRegistry.ReadOnly pluginRegistry,
18                                final PluginPersistentStateStore store,
19                                final ModuleDescriptorFactory moduleDescriptorFactory,
20                                final PluginEventManager pluginEventManager);
21      }
22  
23      @Parameterized.Parameters(name = "{0}")
24      public static Collection<Object[]> data() {
25          return Arrays.asList(new Object[][]{
26                  {"ProductPluginAccessor", new PluginAccessorSupplier() {
27                      @Override
28                      public PluginAccessor supply(final PluginRegistry.ReadOnly pluginRegistry,
29                                                   final PluginPersistentStateStore store,
30                                                   final ModuleDescriptorFactory moduleDescriptorFactory,
31                                                   final PluginEventManager pluginEventManager) {
32                          return new ProductPluginAccessor(pluginRegistry, store, moduleDescriptorFactory, pluginEventManager);
33                      }
34                  }},
35                  {"ProductPluginAccessorBase", new PluginAccessorSupplier() {
36                      @Override
37                      public PluginAccessor supply(final PluginRegistry.ReadOnly pluginRegistry,
38                                                   final PluginPersistentStateStore store,
39                                                   final ModuleDescriptorFactory moduleDescriptorFactory,
40                                                   final PluginEventManager pluginEventManager) {
41                          return new ProductPluginAccessorBase(pluginRegistry, store, moduleDescriptorFactory, pluginEventManager);
42                      }
43                  }}
44          });
45      }
46  
47      @Parameterized.Parameter
48      public String testName;
49  
50      @Parameterized.Parameter(1)
51      public PluginAccessorSupplier pluginAccessorSupplier;
52  
53      private PluginAccessor pluginAccessor;
54  
55      /**
56       * Whenever the plugin manager is recreated, set up the plugin accessor used by the base class tests to use the
57       * product accessor
58       */
59      @Override
60      protected DefaultPluginManager newDefaultPluginManager(DefaultPluginManager.Builder builder) {
61          final PluginRegistry.ReadWrite pluginRegistry = new PluginRegistryImpl();
62  
63          pluginAccessor = pluginAccessorSupplier.supply(pluginRegistry, pluginStateStore, moduleDescriptorFactory, pluginEventManager);
64  
65          builder
66                  .withPluginRegistry(pluginRegistry)
67                  .withPluginAccessor(pluginAccessor);
68          manager = super.newDefaultPluginManager(builder);
69  
70          return manager;
71      }
72  
73      /**
74       * Make base class tests use our product plugin accessor
75       */
76      @Override
77      protected PluginAccessor getPluginAccessor() {
78          return pluginAccessor;
79      }
80  }