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