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 java.io.File;
23  import java.io.IOException;
24  import java.util.ArrayList;
25  import java.util.Collections;
26  import java.util.Iterator;
27  import java.util.List;
28  import java.util.Set;
29  
30  import junit.framework.TestCase;
31  
32  import org.apache.maven.model.Model;
33  import org.apache.maven.project.MavenProject;
34  import org.codehaus.plexus.logging.Logger;
35  import org.codehaus.plexus.logging.console.ConsoleLogger;
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          return new MavenProject( model );
49      }
50  
51      public void testGetProjectModules_ShouldIncludeDirectModuleOfMasterProject() throws IOException
52      {
53          final MavenProject master = createTestProject( "test", "testGroup", "1.0" );
54  
55          master.setFile( new File( "pom.xml" ) );
56  
57          master.getModel()
58                .addModule( "module" );
59  
60          final MavenProject module = createTestProject( "module", "testGroup", "1.0" );
61  
62          module.setFile( new File( "module/pom.xml" ) );
63  
64          final List<MavenProject> projects = new ArrayList<MavenProject>( 2 );
65  
66          projects.add( master );
67          projects.add( module );
68  
69          final Set<MavenProject> result =
70              ProjectUtils.getProjectModules( master, projects, true, new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
71  
72          assertNotNull( result );
73          assertEquals( 1, result.size() );
74          assertEquals( module.getId(), result.iterator()
75                                              .next()
76                                              .getId() );
77      }
78  
79      public void testGetProjectModules_ShouldNotIncludeMasterProject() throws IOException
80      {
81          final MavenProject master = createTestProject( "test", "testGroup", "1.0" );
82  
83          final Set<MavenProject> result =
84              ProjectUtils.getProjectModules( master, Collections.singletonList( master ), true,
85                                              new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
86  
87          assertNotNull( result );
88          assertTrue( result.isEmpty() );
89      }
90  
91      public void testGetProjectModules_ShouldIncludeInDirectModuleOfMasterWhenIncludeSubModulesIsTrue()
92          throws IOException
93      {
94          final MavenProject master = createTestProject( "test", "testGroup", "1.0" );
95  
96          master.setFile( new File( "project/pom.xml" ) );
97  
98          master.getModel()
99                .addModule( "module" );
100 
101         final MavenProject module = createTestProject( "module", "testGroup", "1.0" );
102 
103         module.getModel()
104               .addModule( "submodule" );
105 
106         module.setFile( new File( "project/module/pom.xml" ) );
107 
108         final MavenProject subModule = createTestProject( "sub-module", "testGroup", "1.0" );
109 
110         subModule.setFile( new File( "project/module/submodule/pom.xml" ) );
111 
112         final List<MavenProject> projects = new ArrayList<MavenProject>( 3 );
113 
114         projects.add( master );
115         projects.add( module );
116         projects.add( subModule );
117 
118         final Set<MavenProject> result =
119             ProjectUtils.getProjectModules( master, projects, true, new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
120 
121         assertNotNull( result );
122         assertEquals( 2, result.size() );
123 
124         final List<MavenProject> verify = new ArrayList<MavenProject>( projects );
125         verify.remove( master );
126 
127         verifyProjectsPresent( verify, result );
128     }
129 
130     public void testGetProjectModules_ShouldExcludeInDirectModuleOfMasterWhenIncludeSubModulesIsFalse()
131         throws IOException
132     {
133         final MavenProject master = createTestProject( "test", "testGroup", "1.0" );
134 
135         master.setFile( new File( "project/pom.xml" ) );
136 
137         master.getModel()
138               .addModule( "module" );
139 
140         final MavenProject module = createTestProject( "module", "testGroup", "1.0" );
141 
142         module.getModel()
143               .addModule( "submodule" );
144 
145         module.setFile( new File( "project/module/pom.xml" ) );
146 
147         final MavenProject subModule = createTestProject( "sub-module", "testGroup", "1.0" );
148 
149         subModule.setFile( new File( "project/module/submodule/pom.xml" ) );
150 
151         final List<MavenProject> projects = new ArrayList<MavenProject>( 3 );
152 
153         projects.add( master );
154         projects.add( module );
155         projects.add( subModule );
156 
157         final Set<MavenProject> result =
158             ProjectUtils.getProjectModules( master, projects, false, new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
159 
160         assertNotNull( result );
161         assertEquals( 1, result.size() );
162 
163         final List<MavenProject> verify = new ArrayList<MavenProject>( projects );
164         verify.remove( master );
165         verify.remove( subModule );
166 
167         verifyProjectsPresent( verify, result );
168     }
169 
170     public void testGetProjectModules_ShouldExcludeNonModuleOfMasterProject() throws IOException
171     {
172         final MavenProject master = createTestProject( "test", "testGroup", "1.0" );
173 
174         master.setFile( new File( "project/pom.xml" ) );
175 
176         final MavenProject other = createTestProject( "other", "testGroup", "1.0" );
177 
178         other.setFile( new File( "other/pom.xml" ) );
179 
180         final List<MavenProject> projects = new ArrayList<MavenProject>( 3 );
181 
182         projects.add( master );
183         projects.add( other );
184 
185         final Set<MavenProject> result =
186             ProjectUtils.getProjectModules( master, projects, true, new ConsoleLogger( Logger.LEVEL_INFO, "test" ) );
187 
188         assertNotNull( result );
189         assertTrue( result.isEmpty() );
190     }
191 
192     private void verifyProjectsPresent( final List<MavenProject> verify, final Set<MavenProject> result )
193     {
194         final List<MavenProject> verifyCopy = new ArrayList<MavenProject>( verify );
195 
196         final List<MavenProject> unexpected = new ArrayList<MavenProject>();
197 
198         for (final MavenProject project : result) {
199             boolean removed = false;
200 
201             for (final Iterator<MavenProject> verifyIterator = verifyCopy.iterator(); verifyIterator.hasNext(); ) {
202                 final MavenProject verification = verifyIterator.next();
203 
204                 if (verification.getId()
205                         .equals(project.getId())) {
206                     verifyIterator.remove();
207                     removed = true;
208                 }
209             }
210 
211             if (!removed) {
212                 unexpected.add(project);
213             }
214         }
215 
216         if ( !verifyCopy.isEmpty() )
217         {
218             fail( "Failed to verify presence of: " + verifyCopy );
219         }
220 
221         if ( !unexpected.isEmpty() )
222         {
223             fail( "Found unexpected projects in result: " + unexpected );
224         }
225     }
226 
227     // private void verifyProjectsNotPresent( List verify, Set result )
228     // {
229     // List verifyCopy = new ArrayList( verify );
230     //
231     // for ( Iterator it = result.iterator(); it.hasNext(); )
232     // {
233     // MavenProject project = (MavenProject) it.next();
234     //
235     // for ( Iterator verifyIterator = verifyCopy.iterator(); verifyIterator.hasNext(); )
236     // {
237     // MavenProject verification = (MavenProject) verifyIterator.next();
238     //
239     // if ( verification.getId().equals( project.getId() ) )
240     // {
241     // verifyIterator.remove();
242     // }
243     // }
244     // }
245     //
246     // if ( verifyCopy.size() != verify.size() )
247     // {
248     // List found = new ArrayList( verify );
249     // found.removeAll( verifyCopy );
250     //
251     // fail( "Failed to verify absence of: " + found );
252     // }
253     // }
254 
255 }