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