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