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.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     // private void verifyProjectsNotPresent( List verify, Set result )
226     // {
227     // List verifyCopy = new ArrayList( verify );
228     //
229     // for ( Iterator it = result.iterator(); it.hasNext(); )
230     // {
231     // MavenProject project = (MavenProject) it.next();
232     //
233     // for ( Iterator verifyIterator = verifyCopy.iterator(); verifyIterator.hasNext(); )
234     // {
235     // MavenProject verification = (MavenProject) verifyIterator.next();
236     //
237     // if ( verification.getId().equals( project.getId() ) )
238     // {
239     // verifyIterator.remove();
240     // }
241     // }
242     // }
243     //
244     // if ( verifyCopy.size() != verify.size() )
245     // {
246     // List found = new ArrayList( verify );
247     // found.removeAll( verifyCopy );
248     //
249     // fail( "Failed to verify absence of: " + found );
250     // }
251     // }
252 
253 }