View Javadoc

1   package org.apache.maven.archetype.creator;
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.archetype.ArchetypeCreationRequest;
23  import org.apache.maven.archetype.ArchetypeCreationResult;
24  import org.apache.maven.archetype.common.Constants;
25  import org.apache.maven.artifact.repository.DefaultArtifactRepository;
26  import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
27  import org.apache.maven.plugin.testing.AbstractMojoTestCase;
28  import org.apache.maven.project.MavenProject;
29  import org.apache.maven.project.MavenProjectBuilder;
30  import org.apache.maven.project.MavenProjectBuildingResult;
31  import org.codehaus.plexus.util.FileUtils;
32  import org.codehaus.plexus.util.PropertyUtils;
33  import org.codehaus.plexus.util.StringUtils;
34  
35  import java.io.File;
36  import java.io.FileNotFoundException;
37  import java.io.IOException;
38  import java.util.ArrayList;
39  import java.util.List;
40  import java.util.Properties;
41  
42  public class DefaultArchetypeCreatorTest
43      extends AbstractMojoTestCase
44  {
45      private List<String> filtereds;
46  
47      private List<String> languages;
48  
49      private DefaultArtifactRepository localRepository;
50  
51      protected void createFilesetArchetype( String project )
52          throws Exception
53      {
54          System.out.println( ">>>>>> testCreateFilesetArchetype( \"" + project + "\" )" );
55          
56          MavenProjectBuilder builder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
57  
58          File projectFile = getProjectFile( project );
59  
60          File projectFileSample = getProjectSampleFile( project );
61  
62          copy( projectFileSample, projectFile );
63  
64          FileUtils.deleteDirectory( new File( projectFile.getParentFile(), "target" ) );
65  
66          File propertyFile = getPropertiesFile( project );
67  
68          File propertyFileSample = getPropertiesSampleFile( project );
69  
70          copy( propertyFileSample, propertyFile );
71  
72          Properties p = PropertyUtils.loadProperties( propertyFile );
73  
74          MavenProject mavenProject = null;
75  
76          {
77              Object result = builder.buildWithDependencies( projectFile, localRepository, null );
78              if ( result instanceof MavenProject )
79              { // Using Maven 2.0.x / x >= 7
80                  mavenProject = (MavenProject) result;
81              }
82              else if ( result instanceof MavenProjectBuildingResult )
83              { // Using Maven 3
84                  mavenProject = ( (MavenProjectBuildingResult) result ).getProject();
85              }
86              else
87              {
88                  fail( "Wrong result class" );
89              }
90          }
91  
92          FilesetArchetypeCreator instance =
93              (FilesetArchetypeCreator) lookup( ArchetypeCreator.class.getName(), "fileset" );
94  
95          languages = new ArrayList<String>();
96          languages.add( "java" );
97          languages.add( "aspectj" );
98          languages.add( "csharp" );
99          languages.add( "groovy" );
100         languages.add( "resources" );
101 
102         filtereds = new ArrayList<String>();
103         filtereds.add( "java" );
104         filtereds.add( "xml" );
105         filtereds.add( "txt" );
106         filtereds.add( "groovy" );
107         filtereds.add( "cs" );
108         filtereds.add( "mdo" );
109         filtereds.add( "aj" );
110         filtereds.add( "jsp" );
111         filtereds.add( "js" );
112         filtereds.add( "gsp" );
113         filtereds.add( "vm" );
114         filtereds.add( "html" );
115         filtereds.add( "xhtml" );
116         filtereds.add( "properties" );
117         filtereds.add( ".classpath" );
118         filtereds.add( ".project" );
119         filtereds.add( "MF" );
120 
121         ArchetypeCreationRequest request = new ArchetypeCreationRequest()
122             .setProject( mavenProject )
123             .setPackageName( p.getProperty( Constants.PACKAGE ) )
124             .setProperties( p )
125             .setLanguages( languages )
126             .setFiltereds( filtereds )
127             .setDefaultEncoding( "UTF-8" )
128             .setPartialArchetype( false )
129             .setPreserveCData( false )
130             .setKeepParent( false )
131             .setPostPhase( "verify" );
132 
133         ArchetypeCreationResult result = new ArchetypeCreationResult();
134 
135         instance.createArchetype( request, result );
136 
137         if ( result.getCause() != null )
138         {
139             throw result.getCause();
140         }
141 
142         System.out.println( "<<<<<< testCreateFilesetArchetype( \"" + project + "\" )" );
143     }
144 
145     public void testCreateFilesetArchetype1()
146         throws Exception
147     {
148         String project = "create-1";
149 
150         createFilesetArchetype( project );
151 
152         File template = getTemplateFile( project, "src/main/java/subfolder1/App.java" );
153         assertExists( template );
154         assertContent( template, "// ${someProperty}" );
155         assertContent( template, "package ${package}.subfolder1;" );
156         assertNotContent( template, "${packageInPathFormat}" );
157     }
158 
159     public void testCreateFilesetArchetype2()
160         throws Exception
161     {
162         String project = "create-2";
163 
164         createFilesetArchetype( project );
165     }
166 
167     public void testCreateFilesetArchetype3()
168         throws Exception
169     {
170         String project = "create-3";
171 
172         createFilesetArchetype( project );
173 
174         File template = getTemplateFile( project, "pom.xml" );
175         assertExists( template );
176         assertContent( template, "${groupId}" );
177         assertContent( template, "${artifactId}" );
178         assertContent( template, "${version}" );
179         assertContent( template, "Maven archetype Test create-3" );
180         assertContent( template, "<packaging>pom</packaging>" );
181         assertNotContent( template, "<parent>" );
182 
183         template = getTemplateFile( project, "src/site/site.xml" );
184         assertExists( template );
185         assertContent( template, "<!-- ${packageInPathFormat}/test" );
186         assertContent( template, "${someProperty} -->" );
187 
188         template = getTemplateFile( project, "src/site/resources/site.png" );
189         assertExists( template );
190         assertNotContent( template, "${someProperty}" );
191 
192         template = getTemplateFile( project, ".classpath" );
193         assertExists( template );
194         assertContent( template, "${someProperty}" );
195 
196         template = getTemplateFile( project, "profiles.xml" );
197         assertExists( template );
198         assertContent( template, "<!-- ${packageInPathFormat}/test" );
199         assertContent( template, "${someProperty} -->" );
200 
201         template = getTemplateFile( project, "libs/pom.xml" );
202         assertExists( template );
203         assertContent( template, "${groupId}" );
204         assertContent( template, "${artifactId}" );
205         assertContent( template, "${version}" );
206         assertContent( template, "Maven archetype Test create-3-libraries" );
207         assertContent( template, "<packaging>pom</packaging>" );
208         assertContent( template, "<parent>" );
209 
210         template = getTemplateFile( project, "libs/prj-a/pom.xml" );
211         assertExists( template );
212         assertContent( template, "${groupId}" );
213         assertContent( template, "${artifactId}" );
214         assertContent( template, "${version}" );
215         assertContent( template, "Maven archetype Test create-3-libraries-project-a" );
216         assertNotContent( template, "<packaging>pom</packaging>" );
217         assertContent( template, "<parent>" );
218 
219         template = getTemplateFile( project, "libs/prj-a/src/main/mdo/descriptor.xml" );
220         assertExists( template );
221         assertContent( template, "<!-- ${packageInPathFormat}/test" );
222         assertContent( template, "${someProperty} -->" );
223 
224         template = getTemplateFile( project, "libs/prj-b/pom.xml" );
225         assertExists( template );
226         assertContent( template, "${groupId}" );
227         assertContent( template, "${artifactId}" );
228         assertContent( template, "${version}" );
229         assertContent( template, "Maven archetype Test create-3-libraries-project-b" );
230         assertNotContent( template, "<packaging>pom</packaging>" );
231         assertContent( template, "<parent>" );
232 
233         template = getTemplateFile( project, "libs/prj-b/src/main/java/test/com/Component.java" );
234         assertExists( template );
235         assertContent( template, "${someProperty}" );
236         assertContent( template, "${package}" );
237         assertContent( template, "${packageInPathFormat}" );
238 
239         template = getTemplateFile( project, "libs/prj-b/src/main/java/test/com/package.html" );
240         assertExists( template );
241         assertContent( template, "<!-- ${packageInPathFormat}/test" );
242         assertContent( template, "${someProperty} -->" );
243 
244         template = getTemplateFile( project, "libs/prj-b/src/test/java/test/common/ComponentTest.java" );
245         assertExists( template );
246         assertContent( template, "${someProperty}" );
247         assertContent( template, "${package}" );
248         assertContent( template, "${packageInPathFormat}" );
249 
250         template = getTemplateFile( project, "application/pom.xml" );
251         assertExists( template );
252         assertContent( template, "${groupId}" );
253         assertContent( template, "${artifactId}" );
254         assertContent( template, "${version}" );
255         assertContent( template, "Maven archetype Test create-3-application" );
256         assertNotContent( template, "<packaging>pom</packaging>" );
257         assertContent( template, "<parent>" );
258 
259         template = getTemplateFile( project, "application/src/main/java/Main.java" );
260         assertExists( template );
261         assertContent( template, "${someProperty}" );
262         assertNotContent( template, "${package}" );
263         assertContent( template, "${packageInPathFormat}/test" );
264 
265         template = getTemplateFile( project, "application/src/main/java/test/application/Application.java" );
266         assertExists( template );
267         assertContent( template, "${someProperty}" );
268         assertContent( template, "${package}" );
269         assertContent( template, "${packageInPathFormat}" );
270 
271         template = getTemplateFile( project, "application/src/main/java/test/application/audios/Application.ogg" );
272         assertExists( template );
273         assertNotContent( template, "${someProperty}" );
274 
275         template = getTemplateFile( project, "application/src/main/java/test/application/images/Application.png" );
276         assertExists( template );
277         assertNotContent( template, "${someProperty}" );
278 
279         template = getTemplateFile( project, "application/src/main/resources/log4j.properties" );
280         assertExists( template );
281         assertContent( template, "${someProperty}" );
282         assertNotContent( template, "${package}" );
283         assertContent( template, "${packageInPathFormat}/test" );
284 
285         template = getTemplateFile( project, "application/src/main/resources/META-INF/MANIFEST.MF" );
286         assertExists( template );
287         assertContent( template, "${someProperty}" );
288         assertNotContent( template, "${package}" );
289         assertContent( template, "${packageInPathFormat}/test" );
290 
291         template = getTemplateFile( project, "application/src/main/resources/test/application/some/Gro.groovy" );
292         assertExists( template );
293         assertContent( template, "${someProperty}" );
294         assertNotContent( template, "${package}" );
295         assertContent( template, "${packageInPathFormat}/test" );
296 
297         template = getTemplateFile( project, "application/src/main/resources/splash.png" );
298         assertExists( template );
299         assertNotContent( template, "${someProperty}" );
300 
301         template = getTemplateFile( project, "application/src/test/java/TestAll.java" );
302         assertExists( template );
303         assertContent( template, "${someProperty}" );
304         assertNotContent( template, "${package}" );
305         assertContent( template, "${packageInPathFormat}/test" );
306 
307         template = getTemplateFile( project, "application/src/test/java/test/application/ApplicationTest.java" );
308         assertExists( template );
309         assertContent( template, "${someProperty}" );
310         assertContent( template, "package ${package}.test.application;" );
311         assertContent( template, "${packageInPathFormat}/test/application" );
312 
313         template = getTemplateFile( project, "application/src/it-test/java/test/ItTest1.java" );
314         assertExists( template );
315         assertContent( template, "${someProperty}" );
316         assertContent( template, "package ${package}.test;" );
317         assertContent( template, "${packageInPathFormat}/test" );
318 
319         template = getTemplateFile( project, "application/src/it-test/java/ItTestAll.java" );
320         assertExists( template );
321         assertContent( template, "${someProperty}" );
322         assertNotContent( template, "${package}" );
323         assertContent( template, "${packageInPathFormat}/test" );
324 
325         template = getTemplateFile( project, "application/src/it-test/resources/ItTest1Result.txt" );
326         assertExists( template );
327         assertContent( template, "${someProperty}" );
328         assertNotContent( template, "${package}" );
329         assertContent( template, "${packageInPathFormat}/test" );
330     }
331 
332     protected void tearDown()
333         throws Exception
334     {
335         super.tearDown();
336     }
337 
338     protected void setUp()
339         throws Exception
340     {
341         super.setUp();
342 
343         localRepository = new DefaultArtifactRepository( "local",
344            new File( getBasedir(), "target/test-classes/repositories/local" ).toURI().toString(),
345            new DefaultRepositoryLayout() );
346     }
347 
348     private void assertContent( File template, String content )
349         throws FileNotFoundException, IOException
350     {
351         String templateContent = FileUtils.fileRead( template, "UTF-8" );
352         assertTrue( "File " + template + " does not contain " + content,
353                     StringUtils.countMatches( templateContent, content ) > 0 );
354     }
355 
356     private void assertExists( File file )
357     {
358         assertTrue( "File doesn't exist: " + file.getAbsolutePath(), file.exists() );
359     }
360 
361     private void assertNotContent( File template, String content )
362         throws FileNotFoundException, IOException
363     {
364         String templateContent = FileUtils.fileRead( template, "UTF-8" );
365         assertFalse( "File " + template + " contains " + content,
366                      StringUtils.countMatches( templateContent, content ) > 0 );
367     }
368 
369     private void copy( File in, File out )
370         throws IOException, FileNotFoundException
371     {
372         assertTrue( !out.exists() || out.delete() );
373         assertFalse( out.exists() );
374         FileUtils.copyFile( in, out );
375         assertTrue( out.exists() );
376         assertTrue( in.exists() );
377     }
378 
379     private File getDescriptorFile( String project )
380     {
381         return getFile( project, "target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype.xml" );
382     }
383 
384     private File getFile( String project, String file )
385     {
386         return new File( getBasedir(), "target/test-classes/projects/" + project + "/" + file );
387     }
388 
389     private File getProjectFile( String project )
390     {
391         return getFile( project, "pom.xml" );
392     }
393 
394     private File getProjectSampleFile( String project )
395     {
396         return getFile( project, "pom.xml.sample" );
397     }
398 
399     private File getPropertiesFile( String project )
400     {
401         return getFile( project, "archetype.properties" );
402     }
403 
404     private File getPropertiesSampleFile( final String project )
405     {
406         return getFile( project, "archetype.properties.sample" );
407     }
408 
409     private File getTemplateFile( String project, String template )
410     {
411         return getFile( project, "target/generated-sources/archetype/src/main/resources/archetype-resources/"
412             + template );
413     }
414 }