127
129
when(parent.getModules()).thenReturn(Collections.singleton(mock));
132
* This test is a standard project that has a versioned dependency.
135
public void testSimpleVersion() {
136
TestComponents testComponents = createTestComponents("1.0.1-SNAPSHOT");
138
DependencyGraph graph = testComponents.graph;
139
MavenModule appMavenModule = testComponents.applicationMavenModule;
140
MavenModule libMavenModule = testComponents.libraryMavenModule;
144
List<AbstractProject> appDownstream = graph.getDownstream(appMavenModule);
145
List<AbstractProject> appUpstream = graph.getUpstream(appMavenModule);
146
List<AbstractProject> libDownstream = graph.getDownstream(libMavenModule);
147
List<AbstractProject> libUpstream = graph.getUpstream(libMavenModule);
149
Assert.assertEquals(0, appDownstream.size());
150
Assert.assertEquals(1, appUpstream.size());
151
Assert.assertEquals(1, libDownstream.size());
152
Assert.assertEquals(0, libUpstream.size());
156
* This tests that a version range declaration in the dependency of a top level project
157
* resolves the up and downstream correctly.
160
public void testSimpleVersionRange() {
161
TestComponents testComponents = createTestComponents("[1.0.0, )");
163
DependencyGraph graph = testComponents.graph;
164
MavenModule appMavenModule = testComponents.applicationMavenModule;
165
MavenModule libMavenModule = testComponents.libraryMavenModule;
169
List<AbstractProject> appDownstream = graph.getDownstream(appMavenModule);
170
List<AbstractProject> appUpstream = graph.getUpstream(appMavenModule);
171
List<AbstractProject> libDownstream = graph.getDownstream(libMavenModule);
172
List<AbstractProject> libUpstream = graph.getUpstream(libMavenModule);
174
Assert.assertEquals(0, appDownstream.size());
175
Assert.assertEquals(1, appUpstream.size());
176
Assert.assertEquals(1, libDownstream.size());
177
Assert.assertEquals(0, libUpstream.size());
181
* Test multiple projects with dependencies on differing library versions declared with
182
* multiple version definitions.
185
public void testMultipleDependencies() {
187
MavenProject projectA = createMavenProject("ProjectA", "test", "projectA", "1.0-SNAPSHOT", "jar");
188
Dependency dependencyA = createDependency("test", "library", "[1.0, 2.0)");
189
projectA.getDependencies().add(dependencyA);
191
MavenProject projectB = createMavenProject("ProjectB", "test", "projectB", "2.0-SNAPSHOT", "jar");
192
Dependency dependencyB = createDependency("test", "library", "[1.1, 2.1]");
193
projectB.getDependencies().add(dependencyB);
195
MavenProject dependX = createMavenProject("DependX-1.1", "test", "library", "1.1.3-SNAPSHOT", "jar");
196
MavenProject dependY = createMavenProject("DependX-1.2", "test", "library", "1.2.1-SNAPSHOT", "jar");
197
MavenProject dependZ = createMavenProject("DependX-2.0", "test", "library", "2.0.1-SNAPSHOT", "jar");
199
MavenModuleSet parent = mock(MavenModuleSet.class);
200
when(parent.isAggregatorStyleBuild()).thenReturn(Boolean.FALSE);
202
//Now create maven modules for all the projects
203
MavenModule mavenModuleA = mockMavenModule(projectA);
204
MavenModule mavenModuleB = mockMavenModule(projectB);
205
MavenModule mavenModuleX = mockMavenModule(dependX);
206
MavenModule mavenModuleY = mockMavenModule(dependY);
207
MavenModule mavenModuleZ = mockMavenModule(dependZ);
209
Collection<AbstractProject<?,?>> allModules = Lists.<AbstractProject<?,?>>newArrayList(mavenModuleA,
210
mavenModuleB, mavenModuleX, mavenModuleY, mavenModuleZ);
212
for (AbstractProject<?, ?> module : allModules) {
213
MavenModule mm = (MavenModule) module;
214
enhanceMavenModuleMock(mm, parent, allModules);
217
DependencyGraph graph = MockHelper.mockDependencyGraph(allModules);
218
doCallRealMethod().when(graph).getDownstream(Matchers.any(AbstractProject.class));
219
doCallRealMethod().when(graph).getUpstream(Matchers.any(AbstractProject.class));
220
doCallRealMethod().when(graph).compare(Matchers.<AbstractProject>any(), Matchers.<AbstractProject>any());
223
List<AbstractProject> downstreamA = graph.getDownstream(mavenModuleA);
224
List<AbstractProject> upstreamA = graph.getUpstream(mavenModuleA);
226
Assert.assertEquals(0, downstreamA.size());
227
Assert.assertEquals(1, upstreamA.size());
228
Assert.assertSame(dependY.getVersion(), ((MavenModule) upstreamA.get(0)).getVersion());
230
List<AbstractProject> downstreamB = graph.getDownstream(mavenModuleB);
231
List<AbstractProject> upstreamB = graph.getUpstream(mavenModuleB);
233
Assert.assertEquals(0, downstreamB.size());
234
Assert.assertEquals(1, upstreamA.size());
235
Assert.assertSame(dependZ.getVersion(), ((MavenModule) upstreamB.get(0)).getVersion());
239
* This tests a project that has a dependency on a specific version of X.
240
* The project X has moved on and so should not have any dependencies on ProjectA.
243
public void testProjectWithSpecifiedVersionAndNoDependencies() {
244
MavenProject projectA = createMavenProject("ProjectA", "test", "projectA", "1.0-SNAPSHOT", "jar");
245
Dependency dependencyA = createDependency("test", "library", "1.0");
246
projectA.getDependencies().add(dependencyA);
248
MavenProject dependX = createMavenProject("DependX-1.1", "test", "library", "1.2-SNAPSHOT", "jar");
250
MavenModuleSet parent = mock(MavenModuleSet.class);
251
when(parent.isAggregatorStyleBuild()).thenReturn(Boolean.FALSE);
253
//Now create maven modules for all the projects
254
MavenModule mavenModuleA = mockMavenModule(projectA);
255
MavenModule mavenModuleX = mockMavenModule(dependX);
257
Collection<AbstractProject<?,?>> allModules = Lists.<AbstractProject<?,?>>newArrayList(mavenModuleA,
260
for (AbstractProject<?, ?> module : allModules) {
261
MavenModule mm = (MavenModule) module;
262
enhanceMavenModuleMock(mm, parent, allModules);
265
DependencyGraph graph = MockHelper.mockDependencyGraph(allModules);
266
doCallRealMethod().when(graph).getDownstream(Matchers.any(AbstractProject.class));
267
doCallRealMethod().when(graph).getUpstream(Matchers.any(AbstractProject.class));
268
doCallRealMethod().when(graph).compare(Matchers.<AbstractProject>any(), Matchers.<AbstractProject>any());
271
List<AbstractProject> downstreamA = graph.getDownstream(mavenModuleA);
272
List<AbstractProject> upstreamA = graph.getUpstream(mavenModuleA);
274
Assert.assertEquals(0, downstreamA.size());
275
Assert.assertEquals(0, upstreamA.size());
277
List<AbstractProject> downstreamX = graph.getDownstream(mavenModuleX);
278
List<AbstractProject> upstreamX = graph.getUpstream(mavenModuleX);
280
Assert.assertEquals(0, downstreamX.size());
281
Assert.assertEquals(0, upstreamX.size());
284
private TestComponents createTestComponents(String libraryVersion) {
285
MavenProject appProject = createMavenProject("testapp", "test", "application", "1.0-SNAPSHOT", "jar");
286
Dependency dependency = createDependency("test", "library", libraryVersion);
287
appProject.getDependencies().add(dependency);
289
MavenModule appMavenModule = mockMavenModule(appProject);
291
MavenProject libProject = createLibrary();
292
MavenModule libMavenModule = mockMavenModule(libProject);
294
MavenModuleSet parent = mock(MavenModuleSet.class);
295
when(parent.isAggregatorStyleBuild()).thenReturn(Boolean.FALSE);
296
when(appMavenModule.getParent()).thenReturn(parent);
297
when(libMavenModule.getParent()).thenReturn(parent);
299
Collection<MavenModule> projects = Lists.newArrayList(appMavenModule, libMavenModule);
300
when(parent.getModules()).thenReturn(projects);
301
when(appMavenModule.getAllMavenModules()).thenReturn(projects);
302
when(libMavenModule.getAllMavenModules()).thenReturn(projects);
304
DependencyGraph graph = MockHelper.mockDependencyGraph(Lists.<AbstractProject<?,?>>newArrayList(appMavenModule, libMavenModule));
305
doCallRealMethod().when(graph).getDownstream(Matchers.any(AbstractProject.class));
306
doCallRealMethod().when(graph).getUpstream(Matchers.any(AbstractProject.class));
308
TestComponents testComponents = new TestComponents();
309
testComponents.graph = graph;
310
testComponents.applicationMavenModule = appMavenModule;
311
testComponents.libraryMavenModule = libMavenModule;
313
return testComponents;
316
private static void enhanceMavenModuleMock(MavenModule module,
317
MavenModuleSet parent,
318
Collection allProjects) {
319
when(module.getParent()).thenReturn(parent);
320
when(module.getAllMavenModules()).thenReturn(allProjects);
323
private static MavenModule mockMavenModule(MavenProject project) {
324
MavenModule mavenModule = mock(MavenModule.class);
325
when(mavenModule.getName()).thenReturn(project.getName());
326
basicMocking(mavenModule);
327
mavenModule.doSetName(project.getGroupId() + '$' + project.getArtifactId());
329
PomInfo pomInfo = new PomInfo(project, null, "relPath");
330
mavenModule.reconfigure(pomInfo);
335
private static MavenProject createMavenProject(String name,
340
MavenProject proj = new MavenProject();
342
proj.setGroupId(groupId);
343
proj.setArtifactId(artifactId);
344
proj.setVersion(version);
345
proj.setPackaging(packaging);
350
private static Dependency createDependency(String groupId, String artifactId, String version) {
351
Dependency dependency = new Dependency();
352
dependency.setGroupId(groupId);
353
dependency.setArtifactId(artifactId);
354
dependency.setVersion(version);
358
private static MavenProject createLibrary() {
359
MavenProject proj = createMavenProject("testlib", "test", "library", "1.0.1-SNAPSHOT", "jar");
361
Dependency dependency = new Dependency();
362
dependency.setArtifactId("log4j");
363
dependency.setGroupId("log4j");
364
dependency.setVersion("1.6.15");
365
proj.getDependencies().add(dependency);
369
private static class TestComponents {
370
public DependencyGraph graph;
371
public MavenModule applicationMavenModule;
372
public MavenModule libraryMavenModule;