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