1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.apache.maven.graph;
16
17 import junit.framework.TestCase;
18 import org.apache.maven.execution.ProjectDependencyGraph;
19 import org.apache.maven.model.Dependency;
20 import org.apache.maven.project.DuplicateProjectException;
21 import org.apache.maven.project.MavenProject;
22 import org.codehaus.plexus.util.dag.CycleDetectedException;
23
24 import java.util.Arrays;
25 import java.util.List;
26
27
28
29
30 public class DefaultProjectDependencyGraphTest
31 extends TestCase
32 {
33
34 private final MavenProject aProject = createA();
35
36 private final MavenProject depender1 = createProject( Arrays.asList( toDependency( aProject ) ), "depender1" );
37
38 private final MavenProject depender2 = createProject( Arrays.asList( toDependency( aProject ) ), "depender2" );
39
40 private final MavenProject depender3 = createProject( Arrays.asList( toDependency( aProject ) ), "depender3" );
41
42 private final MavenProject depender4 =
43 createProject( Arrays.asList( toDependency( aProject ), toDependency( depender3 ) ), "depender4" );
44
45 private final MavenProject transitiveOnly =
46 createProject( Arrays.asList( toDependency( depender3 ) ), "depender5" );
47
48 public void testGetSortedProjects()
49 throws DuplicateProjectException, CycleDetectedException
50 {
51 ProjectDependencyGraph graph = new DefaultProjectDependencyGraph( Arrays.asList( depender1, aProject ) );
52 final List<MavenProject> sortedProjects = graph.getSortedProjects();
53 assertEquals( aProject, sortedProjects.get( 0 ) );
54 assertEquals( depender1, sortedProjects.get( 1 ) );
55 }
56
57 public void testVerifyExpectedParentStructure()
58 throws CycleDetectedException, DuplicateProjectException
59 {
60
61 ProjectDependencyGraph graph = threeProjectsDependingOnASingle();
62 final List<MavenProject> sortedProjects = graph.getSortedProjects();
63 assertEquals( aProject, sortedProjects.get( 0 ) );
64 assertEquals( depender1, sortedProjects.get( 1 ) );
65 assertEquals( depender2, sortedProjects.get( 2 ) );
66 assertEquals( depender3, sortedProjects.get( 3 ) );
67 }
68
69 public void testVerifyThatDownstreamProjectsComeInSortedOrder()
70 throws CycleDetectedException, DuplicateProjectException
71 {
72 final List<MavenProject> downstreamProjects =
73 threeProjectsDependingOnASingle().getDownstreamProjects( aProject, true );
74 assertEquals( depender1, downstreamProjects.get( 0 ) );
75 assertEquals( depender2, downstreamProjects.get( 1 ) );
76 assertEquals( depender3, downstreamProjects.get( 2 ) );
77 }
78
79 public void testTransitivesInOrder()
80 throws CycleDetectedException, DuplicateProjectException
81 {
82 final ProjectDependencyGraph graph =
83 new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender4, depender2, depender3, aProject ) );
84
85 final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, true );
86 assertEquals( depender1, downstreamProjects.get( 0 ) );
87 assertEquals( depender3, downstreamProjects.get( 1 ) );
88 assertEquals( depender4, downstreamProjects.get( 2 ) );
89 assertEquals( depender2, downstreamProjects.get( 3 ) );
90 }
91
92 public void testNonTransitivesInOrder()
93 throws CycleDetectedException, DuplicateProjectException
94 {
95 final ProjectDependencyGraph graph =
96 new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender4, depender2, depender3, aProject ) );
97
98 final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, false );
99 assertEquals( depender1, downstreamProjects.get( 0 ) );
100 assertEquals( depender3, downstreamProjects.get( 1 ) );
101 assertEquals( depender4, downstreamProjects.get( 2 ) );
102 assertEquals( depender2, downstreamProjects.get( 3 ) );
103 }
104
105 public void testWithTransitiveOnly()
106 throws CycleDetectedException, DuplicateProjectException
107 {
108 final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
109 Arrays.asList( depender1, transitiveOnly, depender2, depender3, aProject ) );
110
111 final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, true );
112 assertEquals( depender1, downstreamProjects.get( 0 ) );
113 assertEquals( depender3, downstreamProjects.get( 1 ) );
114 assertEquals( transitiveOnly, downstreamProjects.get( 2 ) );
115 assertEquals( depender2, downstreamProjects.get( 3 ) );
116 }
117
118 public void testWithMissingTransitiveOnly()
119 throws CycleDetectedException, DuplicateProjectException
120 {
121 final ProjectDependencyGraph graph = new DefaultProjectDependencyGraph(
122 Arrays.asList( depender1, transitiveOnly, depender2, depender3, aProject ) );
123
124 final List<MavenProject> downstreamProjects = graph.getDownstreamProjects( aProject, false );
125 assertEquals( depender1, downstreamProjects.get( 0 ) );
126 assertEquals( depender3, downstreamProjects.get( 1 ) );
127 assertEquals( depender2, downstreamProjects.get( 2 ) );
128 }
129
130 public void testGetUpstreamProjects()
131 throws CycleDetectedException, DuplicateProjectException
132 {
133 ProjectDependencyGraph graph = threeProjectsDependingOnASingle();
134 final List<MavenProject> downstreamProjects = graph.getUpstreamProjects( depender1, true );
135 assertEquals( aProject, downstreamProjects.get( 0 ) );
136 }
137
138 private ProjectDependencyGraph threeProjectsDependingOnASingle()
139 throws CycleDetectedException, DuplicateProjectException
140 {
141 return new DefaultProjectDependencyGraph( Arrays.asList( depender1, depender2, depender3, aProject ) );
142 }
143
144 private static MavenProject createA()
145 {
146 MavenProject result = new MavenProject();
147 result.setGroupId( "org.apache" );
148 result.setArtifactId( "A" );
149 result.setVersion( "1.2" );
150 return result;
151 }
152
153 static Dependency toDependency( MavenProject mavenProject )
154 {
155 final Dependency dependency = new Dependency();
156 dependency.setArtifactId( mavenProject.getArtifactId() );
157 dependency.setGroupId( mavenProject.getGroupId() );
158 dependency.setVersion( mavenProject.getVersion() );
159 return dependency;
160 }
161
162 private static MavenProject createProject( List<Dependency> dependencies, String artifactId )
163 {
164 MavenProject result = new MavenProject();
165 result.setGroupId( "org.apache" );
166 result.setArtifactId( artifactId );
167 result.setVersion( "1.2" );
168 result.setDependencies( dependencies );
169 return result;
170 }
171
172 }