View Javadoc
1   package org.apache.maven.plugins.assembly.utils;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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     // private void verifyProjectsNotPresent( List verify, Set result )
236     // {
237     // List verifyCopy = new ArrayList( verify );
238     //
239     // for ( Iterator it = result.iterator(); it.hasNext(); )
240     // {
241     // MavenProject project = (MavenProject) it.next();
242     //
243     // for ( Iterator verifyIterator = verifyCopy.iterator(); verifyIterator.hasNext(); )
244     // {
245     // MavenProject verification = (MavenProject) verifyIterator.next();
246     //
247     // if ( verification.getId().equals( project.getId() ) )
248     // {
249     // verifyIterator.remove();
250     // }
251     // }
252     // }
253     //
254     // if ( verifyCopy.size() != verify.size() )
255     // {
256     // List found = new ArrayList( verify );
257     // found.removeAll( verifyCopy );
258     //
259     // fail( "Failed to verify absence of: " + found );
260     // }
261     // }
262 
263 }