View Javadoc
1   package com.atlassian.plugin.manager;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.PluginDependencies;
5   import com.google.common.collect.Collections2;
6   import org.junit.Before;
7   
8   import java.util.HashSet;
9   import java.util.Set;
10  
11  import static com.atlassian.plugin.manager.PluginWithDeps.GET_KEY;
12  
13  public class TestDependentPlugins {
14      protected Set<Plugin> allPlugins;
15  
16      @Before
17      public void setUp() throws Exception {
18          allPlugins = new HashSet<>();
19  
20          //  X --- uses --(m - mandatory, etc.) Y
21  
22          // A ---m B ---d C --m G
23          //    \_o D __/o
24          //    \_d E _/m
25  
26          // F ---d B
27          //    \_m D
28          //    \_o E
29  
30          // H ---o B
31          //    \_d D
32          //    \_m E
33  
34          allPlugins.add(new PluginWithDeps("A", PluginDependencies.builder()
35                  .withMandatory("B")
36                  .withOptional("D")
37                  .withDynamic("E")
38                  .build()));
39  
40          allPlugins.add(new PluginWithDeps("F", PluginDependencies.builder()
41                  .withDynamic("B")
42                  .withMandatory("D")
43                  .withOptional("E")
44                  .build()));
45  
46          allPlugins.add(new PluginWithDeps("H", PluginDependencies.builder()
47                  .withOptional("B")
48                  .withDynamic("D")
49                  .withMandatory("E")
50                  .build()));
51  
52          allPlugins.add(new PluginWithDeps("B", PluginDependencies.builder()
53                  .withDynamic("C")
54                  .build()));
55  
56          allPlugins.add(new PluginWithDeps("D", PluginDependencies.builder()
57                  .withOptional("C")
58                  .build()));
59  
60          allPlugins.add(new PluginWithDeps("E", PluginDependencies.builder()
61                  .withMandatory("C")
62                  .build()));
63  
64          allPlugins.add(new PluginWithDeps("C", PluginDependencies.builder()
65                  .withMandatory("G")
66                  .build()));
67  
68          allPlugins.add(new PluginWithDeps("G"));
69  
70          // circular a -m b -m c -m a
71          allPlugins.add(new PluginWithDeps("a", PluginDependencies.builder()
72                  .withMandatory("b")
73                  .build()));
74          allPlugins.add(new PluginWithDeps("b", PluginDependencies.builder()
75                  .withMandatory("c")
76                  .build()));
77          allPlugins.add(new PluginWithDeps("c", PluginDependencies.builder()
78                  .withMandatory("a")
79                  .build()));
80  
81          // circular AC -o AC
82          //          AC /d
83          //          AC /m
84  
85          allPlugins.add(new PluginWithDeps("aC", PluginDependencies.builder()
86                  .withOptional("aC")
87                  .withDynamic("aC")
88                  .withMandatory("aC")
89                  .build()));
90  
91          // Multiple dependency types
92  
93          // mX ---m mA ---m mB ---d mC
94          //             \_o mD __/o
95          //             \_d mE _/m
96  
97          // mA ---d mB
98          //     \_m mD
99          //     \_o mE
100 
101         // mA ---o mB
102         //     \_d mD
103         //     \_m mE
104 
105         allPlugins.add(new PluginWithDeps("mA", PluginDependencies.builder()
106                 .withMandatory("mB", "mD", "mE")
107                 .withOptional("mB", "mD", "mE")
108                 .withDynamic("mB", "mD", "mE")
109                 .build()));
110 
111         allPlugins.add(new PluginWithDeps("mB", PluginDependencies.builder()
112                 .withDynamic("mC")
113                 .build()));
114 
115         allPlugins.add(new PluginWithDeps("mD", PluginDependencies.builder()
116                 .withOptional("mC")
117                 .build()));
118 
119         allPlugins.add(new PluginWithDeps("mE", PluginDependencies.builder()
120                 .withMandatory("mC")
121                 .build()));
122 
123         allPlugins.add(new PluginWithDeps("mX", PluginDependencies.builder()
124                 .withMandatory("mA")
125                 .build()));
126 
127         allPlugins.add(new PluginWithDeps("mC", PluginDependencies.builder()
128                 .withMandatory("mE")
129                 .withOptional("mD")
130                 .withDynamic("mB")
131                 .build()));
132     }
133 
134     protected Set<String> getKeys(final Set<Plugin> plugins) {
135         return new HashSet<>(Collections2.transform(plugins, GET_KEY));
136     }
137 
138 }