1 package org.apache.maven.archetype.creator;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 {
80 mavenProject = (MavenProject) result;
81 }
82 else if ( result instanceof MavenProjectBuildingResult )
83 {
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 }