View Javadoc

1   package org.apache.maven.plugin.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 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     // 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 }