1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.plugins.assembly.utils;
20
21 import java.io.File;
22 import java.io.IOException;
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Set;
28
29 import org.apache.maven.model.Model;
30 import org.apache.maven.project.MavenProject;
31 import org.junit.Test;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 import static org.junit.Assert.assertEquals;
36 import static org.junit.Assert.assertNotNull;
37 import static org.junit.Assert.assertTrue;
38 import static org.junit.Assert.fail;
39
40 public class ProjectUtilsTest {
41 private final Logger logger = LoggerFactory.getLogger(getClass());
42
43 private MavenProject createTestProject(final String artifactId, final String groupId, final String version) {
44 final Model model = new Model();
45 model.setArtifactId(artifactId);
46 model.setGroupId(groupId);
47 model.setVersion(version);
48
49 return new MavenProject(model);
50 }
51
52 @Test
53 public void testGetProjectModules_ShouldIncludeDirectModuleOfMasterProject() throws IOException {
54 final MavenProject master = createTestProject("test", "testGroup", "1.0");
55
56 master.setFile(new File("pom.xml"));
57
58 master.getModel().addModule("module");
59
60 final MavenProject module = createTestProject("module", "testGroup", "1.0");
61
62 module.setFile(new File("module/pom.xml"));
63
64 final List<MavenProject> projects = new ArrayList<>(2);
65
66 projects.add(master);
67 projects.add(module);
68
69 final Set<MavenProject> result = ProjectUtils.getProjectModules(master, projects, true, logger);
70
71 assertNotNull(result);
72 assertEquals(1, result.size());
73 assertEquals(module.getId(), result.iterator().next().getId());
74 }
75
76 @Test
77 public void testGetProjectModules_ShouldNotIncludeMasterProject() throws IOException {
78 final MavenProject master = createTestProject("test", "testGroup", "1.0");
79
80 final Set<MavenProject> result =
81 ProjectUtils.getProjectModules(master, Collections.singletonList(master), true, logger);
82
83 assertNotNull(result);
84 assertTrue(result.isEmpty());
85 }
86
87 @Test
88 public void testGetProjectModules_ShouldIncludeInDirectModuleOfMasterWhenIncludeSubModulesIsTrue()
89 throws IOException {
90 final MavenProject master = createTestProject("test", "testGroup", "1.0");
91
92 master.setFile(new File("project/pom.xml"));
93
94 master.getModel().addModule("module");
95
96 final MavenProject module = createTestProject("module", "testGroup", "1.0");
97
98 module.getModel().addModule("submodule");
99
100 module.setFile(new File("project/module/pom.xml"));
101
102 final MavenProject subModule = createTestProject("sub-module", "testGroup", "1.0");
103
104 subModule.setFile(new File("project/module/submodule/pom.xml"));
105
106 final List<MavenProject> projects = new ArrayList<>(3);
107
108 projects.add(master);
109 projects.add(module);
110 projects.add(subModule);
111
112 final Set<MavenProject> result = ProjectUtils.getProjectModules(master, projects, true, logger);
113
114 assertNotNull(result);
115 assertEquals(2, result.size());
116
117 final List<MavenProject> verify = new ArrayList<>(projects);
118 verify.remove(master);
119
120 verifyProjectsPresent(verify, result);
121 }
122
123 @Test
124 public void testGetProjectModules_ShouldExcludeInDirectModuleOfMasterWhenIncludeSubModulesIsFalse()
125 throws IOException {
126 final MavenProject master = createTestProject("test", "testGroup", "1.0");
127
128 master.setFile(new File("project/pom.xml"));
129
130 master.getModel().addModule("module");
131
132 final MavenProject module = createTestProject("module", "testGroup", "1.0");
133
134 module.getModel().addModule("submodule");
135
136 module.setFile(new File("project/module/pom.xml"));
137
138 final MavenProject subModule = createTestProject("sub-module", "testGroup", "1.0");
139
140 subModule.setFile(new File("project/module/submodule/pom.xml"));
141
142 final List<MavenProject> projects = new ArrayList<>(3);
143
144 projects.add(master);
145 projects.add(module);
146 projects.add(subModule);
147
148 final Set<MavenProject> result = ProjectUtils.getProjectModules(master, projects, false, logger);
149
150 assertNotNull(result);
151 assertEquals(1, result.size());
152
153 final List<MavenProject> verify = new ArrayList<>(projects);
154 verify.remove(master);
155 verify.remove(subModule);
156
157 verifyProjectsPresent(verify, result);
158 }
159
160 @Test
161 public void testGetProjectModules_ShouldExcludeNonModuleOfMasterProject() throws IOException {
162 final MavenProject master = createTestProject("test", "testGroup", "1.0");
163
164 master.setFile(new File("project/pom.xml"));
165
166 final MavenProject other = createTestProject("other", "testGroup", "1.0");
167
168 other.setFile(new File("other/pom.xml"));
169
170 final List<MavenProject> projects = new ArrayList<>(3);
171
172 projects.add(master);
173 projects.add(other);
174
175 final Set<MavenProject> result = ProjectUtils.getProjectModules(master, projects, true, logger);
176
177 assertNotNull(result);
178 assertTrue(result.isEmpty());
179 }
180
181 private void verifyProjectsPresent(final List<MavenProject> verify, final Set<MavenProject> result) {
182 final List<MavenProject> verifyCopy = new ArrayList<>(verify);
183
184 final List<MavenProject> unexpected = new ArrayList<>();
185
186 for (final MavenProject project : result) {
187 boolean removed = false;
188
189 for (final Iterator<MavenProject> verifyIterator = verifyCopy.iterator(); verifyIterator.hasNext(); ) {
190 final MavenProject verification = verifyIterator.next();
191
192 if (verification.getId().equals(project.getId())) {
193 verifyIterator.remove();
194 removed = true;
195 }
196 }
197
198 if (!removed) {
199 unexpected.add(project);
200 }
201 }
202
203 if (!verifyCopy.isEmpty()) {
204 fail("Failed to verify presence of: " + verifyCopy);
205 }
206
207 if (!unexpected.isEmpty()) {
208 fail("Found unexpected projects in result: " + unexpected);
209 }
210 }
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240 }