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