blob: ecfba5c566074b8d99c7f0758d2fcb35da8aae44 [file] [log] [blame]
package org.apache.maven.archetype.generator;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Properties;
import org.apache.maven.archetype.ArchetypeGenerationRequest;
import org.apache.maven.archetype.ArchetypeGenerationResult;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.DefaultArtifactRepository;
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
import org.apache.maven.plugin.testing.AbstractMojoTestCase;
import org.apache.maven.project.DefaultProjectBuildingRequest;
import org.apache.maven.project.ProjectBuildingRequest;
import org.apache.maven.repository.internal.MavenRepositorySystemSession;
import org.codehaus.plexus.util.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.codehaus.plexus.util.ReaderFactory;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.sonatype.aether.impl.internal.SimpleLocalRepositoryManager;
public class DefaultArchetypeGeneratorTest
extends AbstractMojoTestCase
{
// archetypes prepared by antrun execution (see pom.xml) from src/test/archetypes
private final static Archetype ARCHETYPE_BASIC = new Archetype( "archetypes", "basic", "1.0" );
private final static Archetype ARCHETYPE_PARTIAL = new Archetype( "archetypes", "partial", "1.0" );
private final static Archetype ARCHETYPE_SITE = new Archetype( "archetypes", "site", "1.0" );
private final static Archetype ARCHETYPE_FILESET = new Archetype( "archetypes", "fileset", "1.0" );
private final static Archetype ARCHETYPE_OLD = new Archetype( "archetypes", "old", "1.0" );
private final static Archetype ARCHETYPE_FILESET_WITH_POSTCREATE_SCRIPT =
new Archetype( "archetypes", "fileset_with_postscript", "1.0" );
private final static Properties ADDITIONAL_PROPERTIES = new Properties();
static
{
ADDITIONAL_PROPERTIES.setProperty( "property-without-default-1", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-without-default-2", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-without-default-3", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-without-default-4", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-with-default-1", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-with-default-2", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-with-default-3", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property-with-default-4", "file-value" );
ADDITIONAL_PROPERTIES.setProperty( "property_underscored_1", "prop1" );
ADDITIONAL_PROPERTIES.setProperty( "property_underscored-2", "prop2" );
}
ArtifactRepository localRepository;
String remoteRepository;
ArchetypeGenerator generator;
String outputDirectory;
File projectDirectory;
private void generateProjectFromArchetype( ArchetypeGenerationRequest request )
throws Exception
{
ArchetypeGenerationResult result = new ArchetypeGenerationResult();
generator.generateArchetype( request, result );
if ( result.getCause() != null )
{
throw result.getCause();
}
}
private ArchetypeGenerationResult generateProjectFromArchetypeWithFailure( ArchetypeGenerationRequest request )
throws Exception
{
ArchetypeGenerationResult result = new ArchetypeGenerationResult();
generator.generateArchetype( request, result );
if ( result.getCause() == null )
{
fail( "Exception must be thrown." );
}
return result;
}
public void testArchetypeNotDefined()
throws Exception
{
System.out.println( "testArchetypeNotDefined" );
Archetype archetype = new Archetype( "archetypes", null, "1.0" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-2", archetype );
ArchetypeGenerationResult result = generateProjectFromArchetypeWithFailure( request );
assertEquals( "Exception not correct", "The archetype is not defined", result.getCause().getMessage() );
}
public void testGenerateArchetypeCompleteWithoutParent()
throws Exception
{
System.out.println( "testGenerateArchetypeCompleteWithoutParent" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-4", ARCHETYPE_BASIC );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
assertTemplateContent( "src/main/java/file/value/package/App.java" );
assertTemplateContent( "src/main/java/file/value/package/inner/package/App2.java" );
assertTemplateContent( "src/main/c/file/value/package/App.c" );
assertTemplateContent( "src/test/java/file/value/package/AppTest.java" );
assertTemplateContent( "src/test/c/file/value/package/AppTest.c" );
assertTemplateContent( "src/main/resources/App.properties" );
assertTemplateContent( "src/main/resources/inner/dir/App2.properties" );
assertTemplateContent( "src/main/mdo/App.mdo" );
assertTemplateContent( "src/test/resources/AppTest.properties" );
assertTemplateContent( "src/test/mdo/AppTest.mdo" );
Model model = readPom( new File( projectDirectory, "pom.xml" ) );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
public void testGenerateArchetypeCompleteWithParent()
throws Exception
{
System.out.println( "testGenerateArchetypeCompleteWithParent" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-5", ARCHETYPE_BASIC );
File projectFile = getProjectFile();
File projectFileSample = getProjectSampleFile();
copy( projectFileSample, projectFile );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
Model model = readPom( new File( projectDirectory, "pom.xml" ) );
assertEquals( "org.apache.maven.archetype", model.getParent().getGroupId() );
assertEquals( "test-generate-5-parent", model.getParent().getArtifactId() );
assertEquals( "1.0-SNAPSHOT", model.getParent().getVersion() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
Model parentModel = readPom( projectFile );
assertTrue( parentModel.getModules().contains( "file-value" ) );
}
public void testGenerateArchetypePartialOnChild()
throws Exception
{
System.out.println( "testGenerateArchetypePartialOnChild" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-8", ARCHETYPE_PARTIAL );
File parentProjectFile = getProjectFile();
File parentProjectFileSample = getProjectSampleFile();
copy( parentProjectFileSample, parentProjectFile );
File projectFile = new File( projectDirectory, "pom.xml" );
File projectFileSample = new File( projectDirectory, "pom.xml.sample" );
copy( projectFileSample, projectFile );
FileUtils.forceDelete( new File( projectDirectory, "src" ) );
generateProjectFromArchetype( request );
Model model = readPom( projectFile );
assertNotNull( model.getParent() );
assertEquals( "org.apache.maven.archetype", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "1.0-SNAPSHOT", model.getVersion() );
assertTrue( model.getModules().isEmpty() );
assertFalse( model.getDependencies().isEmpty() );
assertFalse( model.getBuild().getPlugins().isEmpty() );
assertFalse( model.getReporting().getPlugins().isEmpty() );
}
public void testGenerateArchetypePartialOnChildDontOverride()
throws Exception
{
System.out.println( "testGenerateArchetypePartialOnChildDontOverride" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-9", ARCHETYPE_PARTIAL );
File projectFile = new File( projectDirectory, "pom.xml" );
File projectFileSample = new File( projectDirectory, "pom.xml.sample" );
copy( projectFileSample, projectFile );
FileUtils.forceDelete( new File( projectDirectory, "src" ) );
generateProjectFromArchetype( request );
Model model = readPom( projectFile );
assertNotNull( model.getParent() );
assertEquals( "org.apache.maven.archetype", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "1.0-SNAPSHOT", model.getVersion() );
assertTrue( model.getModules().isEmpty() );
assertFalse( model.getDependencies().isEmpty() );
assertEquals( "1.0", model.getDependencies().get( 0 ).getVersion() );
assertFalse( model.getBuild().getPlugins().isEmpty() );
assertEquals( "1.0", model.getBuild().getPlugins().get( 0 ).getVersion() );
assertFalse( model.getReporting().getPlugins().isEmpty() );
assertEquals( "1.0", model.getReporting().getPlugins().get( 0 ).getVersion() );
}
public void testGenerateArchetypePartialOnParent()
throws Exception
{
System.out.println( "testGenerateArchetypePartialOnParent" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-7", ARCHETYPE_PARTIAL );
File projectFile = new File( outputDirectory, "pom.xml" );
File projectFileSample = new File( outputDirectory, "pom.xml.sample" );
copy( projectFileSample, projectFile );
FileUtils.forceDelete( new File( outputDirectory, "src" ) );
generateProjectFromArchetype( request );
Model model = readPom( getProjectFile() );
assertNull( model.getParent() );
assertEquals( "org.apache.maven.archetype", model.getGroupId() );
assertEquals( "test-generate-7", model.getArtifactId() );
assertEquals( "1.0-SNAPSHOT", model.getVersion() );
assertTrue( model.getModules().isEmpty() );
assertFalse( model.getBuild().getPlugins().isEmpty() );
}
public void testGenerateArchetypePartialWithoutPoms()
throws Exception
{
System.out.println( "testGenerateArchetypePartialWithoutPoms" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-6", ARCHETYPE_PARTIAL );
File projectFile = new File( projectDirectory, "pom.xml" );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
Model model = readPom( projectFile );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
public void testGenerateArchetypeSite()
throws Exception
{
System.out.println( "testGenerateArchetypeSite" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-10", ARCHETYPE_SITE );
File projectFile = new File( projectDirectory, "pom.xml" );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
assertTemplateContent( "src/site/site.xml" );
assertTemplateContent( "src/site/apt/test.apt" );
Model model = readPom( projectFile );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
public void testGenerateFileSetArchetype()
throws Exception
{
System.out.println( "testGenerateFileSetArchetype" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-12", ARCHETYPE_FILESET );
File projectFile = new File( projectDirectory, "pom.xml" );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/App.java", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/inner/package/App2.java",
"file-value" );
assertTemplateCopiedWithFileSetArchetype( "src/main/java/file/value/package/App.ogg" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/App.properties",
"file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch.txt", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch_root.txt",
"file-value" );
assertTemplateCopiedWithFileSetArchetype( "src/main/resources/some-dir/App.png" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/site/site.xml", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/site/apt/usage.apt", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( ".classpath", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "profiles.xml", "file-value" );
Model model = readPom( projectFile );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/src/main/java/file/value/package/App.java",
"subproject" );
model = readPom( new File( projectDirectory, "subproject/pom.xml" ) );
assertNotNull( model.getParent() );
assertEquals( "file-value", model.getParent().getGroupId() );
assertEquals( "file-value", model.getParent().getArtifactId() );
assertEquals( "file-value", model.getParent().getVersion() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "subproject", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/App.java",
"subsubproject" );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
+ "file-value/inner/subsubproject/innest/Somefile-valueClasssubsubproject.java",
"subsubproject" );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
/* + "file-value/inner/subsubproject/innest/" + */
+ "ArbitraryProperty-file-value.java", "subsubproject" );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
/* + "file-value/inner/subsubproject/innest/" + */
+ "M_subsubproject_prop1Testprop2file-value.java", "subsubproject" );
// Test that undefined properties are safely ignored (and skipped)
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
/* + "file-value/inner/subsubproject/innest/" + */
+ "SkipsUndefinedProperty-__undefined-property__-file-value.java",
"subsubproject" );
model = readPom( new File( projectDirectory, "subproject/subsubproject/pom.xml" ) );
assertNotNull( model.getParent() );
assertEquals( "file-value", model.getParent().getGroupId() );
assertEquals( "subproject", model.getParent().getArtifactId() );
assertEquals( "file-value", model.getParent().getVersion() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "subsubproject", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
public void testGenerateOldArchetype()
throws Exception
{
System.out.println( "testGenerateOldArchetype" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-11", ARCHETYPE_OLD );
File projectFile = new File( projectDirectory, "pom.xml" );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
assertTemplateContentGeneratedWithOldArchetype( "src/main/java/file/value/package/App.java" );
assertTemplateContentGeneratedWithOldArchetype( "src/main/resources/App.properties" );
assertTemplateContentGeneratedWithOldArchetype( "src/site/site.xml" );
Model model = readPom( projectFile );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
public void testPropertiesNotDefined()
throws Exception
{
System.out.println( "testPropertiesNotDefined" );
ArchetypeGenerationRequest request = createArchetypeGenerationRequest( "generate-3", ARCHETYPE_BASIC );
request.setProperties( new Properties() );
ArchetypeGenerationResult result = generateProjectFromArchetypeWithFailure( request );
assertTrue( "Exception not correct",
result.getCause().getMessage().startsWith( "Archetype archetypes:basic:1.0 is not configured" )
&& result.getCause().getMessage().endsWith( "Property property-without-default-4 is missing." ) );
}
public void testGenerateArchetypeWithPostScriptIncluded()
throws Exception
{
System.out.println( "testGenerateArchetypeWithPostScriptIncluded" );
ArchetypeGenerationRequest request =
createArchetypeGenerationRequest( "generate-13", ARCHETYPE_FILESET_WITH_POSTCREATE_SCRIPT );
File projectFile = new File( projectDirectory, "pom.xml" );
FileUtils.forceDelete( projectDirectory );
generateProjectFromArchetype( request );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/App.java", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/java/file/value/package/inner/package/App2.java",
"file-value" );
assertTemplateCopiedWithFileSetArchetype( "src/main/java/file/value/package/App.ogg" );
File templateFile = new File( projectDirectory, "src/main/java/file/value/package/ToDelete.java" );
assertFalse( templateFile + " should have been removed (by post-generate.groovy script", templateFile.exists() );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/App.properties", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch.txt", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/main/resources/file-value/touch_root.txt",
"file-value" );
assertTemplateCopiedWithFileSetArchetype( "src/main/resources/some-dir/App.png" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/site/site.xml", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "src/site/apt/usage.apt", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( ".classpath", "file-value" );
assertTemplateContentGeneratedWithFileSetArchetype( "profiles.xml", "file-value" );
Model model = readPom( projectFile );
assertNull( model.getParent() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "file-value", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/src/main/java/file/value/package/App.java",
"subproject" );
model = readPom( new File( projectDirectory, "subproject/pom.xml" ) );
assertNotNull( model.getParent() );
assertEquals( "file-value", model.getParent().getGroupId() );
assertEquals( "file-value", model.getParent().getArtifactId() );
assertEquals( "file-value", model.getParent().getVersion() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "subproject", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
assertTemplateContentGeneratedWithFileSetArchetype(
"subproject/subsubproject/src/main/java/file/value/package/App.java", "subsubproject" );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
+ "file-value/inner/subsubproject/innest/Somefile-valueClasssubsubproject.java",
"subsubproject" );
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
/* + "file-value/inner/subsubproject/innest/" + */
+ "ArbitraryProperty-file-value.java",
"subsubproject" );
// Test that undefined properties are safely ignored (and skipped)
assertTemplateContentGeneratedWithFileSetArchetype( "subproject/subsubproject/src/main/java/file/value/package/"
/* + "file-value/inner/subsubproject/innest/" + */
+ "SkipsUndefinedProperty-__undefined-property__-file-value.java",
"subsubproject" );
model = readPom( new File( projectDirectory, "subproject/subsubproject/pom.xml" ) );
assertNotNull( model.getParent() );
assertEquals( "file-value", model.getParent().getGroupId() );
assertEquals( "subproject", model.getParent().getArtifactId() );
assertEquals( "file-value", model.getParent().getVersion() );
assertEquals( "file-value", model.getGroupId() );
assertEquals( "subsubproject", model.getArtifactId() );
assertEquals( "file-value", model.getVersion() );
}
@Override
protected void tearDown()
throws Exception
{
super.tearDown();
outputDirectory = null;
}
@Override
protected void setUp()
throws Exception
{
super.setUp();
String repositories = new File( getBasedir(), "target/test-classes/repositories" ).toURI().toString();
localRepository =
new DefaultArtifactRepository( "local", repositories + "/local", new DefaultRepositoryLayout() );
remoteRepository = repositories + "/central";
generator = (ArchetypeGenerator) lookup( ArchetypeGenerator.ROLE );
assertNotNull( generator );
assertNotNull( getVariableValueFromObject( generator, "archetypeArtifactManager" ) );
assertNotNull( getVariableValueFromObject( generator, "oldArchetype" ) );
assertNotNull( getVariableValueFromObject( generator, "filesetGenerator" ) );
}
private ArchetypeGenerationRequest createArchetypeGenerationRequest( String project, Archetype archetype )
{
outputDirectory = getBasedir() + "/target/test-classes/projects/" + project;
projectDirectory = new File( outputDirectory, "file-value" );
ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
request.setLocalRepository( localRepository );
request.setArchetypeRepository( remoteRepository );
request.setOutputDirectory( outputDirectory );
request.setArchetypeGroupId( archetype.groupId );
request.setArchetypeArtifactId( archetype.artifactId );
request.setArchetypeVersion( archetype.version );
request.setGroupId( "file-value" );
request.setArtifactId( "file-value" );
request.setVersion( "file-value" );
request.setPackage( "file.value.package" );
request.setProperties( ADDITIONAL_PROPERTIES );
ProjectBuildingRequest buildingRequest = new DefaultProjectBuildingRequest();
MavenRepositorySystemSession repositorySession = new MavenRepositorySystemSession();
repositorySession.setLocalRepositoryManager( new SimpleLocalRepositoryManager( localRepository.getBasedir() ) );
buildingRequest.setRepositorySession( repositorySession );
request.setProjectBuildingRequest( buildingRequest );
return request;
}
private void assertTemplateContent( final String template )
throws IOException
{
Properties properties = loadProperties( template );
assertEquals( "file-value", properties.getProperty( "groupId" ) );
assertEquals( "file-value", properties.getProperty( "artifactId" ) );
assertEquals( "file-value", properties.getProperty( "version" ) );
assertEquals( "file.value.package", properties.getProperty( "package" ) );
assertEquals( "file-value", properties.getProperty( "property-with-default-1" ) );
assertEquals( "file-value", properties.getProperty( "property-with-default-2" ) );
assertEquals( "file-value", properties.getProperty( "property-with-default-3" ) );
assertEquals( "file-value", properties.getProperty( "property-with-default-4" ) );
assertEquals( "file-value", properties.getProperty( "property-without-default-1" ) );
assertEquals( "file-value", properties.getProperty( "property-without-default-2" ) );
assertEquals( "file-value", properties.getProperty( "property-without-default-3" ) );
assertEquals( "file-value", properties.getProperty( "property-without-default-4" ) );
}
private void assertTemplateContentGeneratedWithFileSetArchetype( String template, String artifactId )
throws IOException
{
Properties properties = loadProperties( template );
assertEquals( "file-value", properties.getProperty( "groupId" ) );
assertEquals( artifactId, properties.getProperty( "artifactId" ) );
assertEquals( "file-value", properties.getProperty( "version" ) );
assertEquals( "file.value.package", properties.getProperty( "package" ) );
assertEquals( "file/value/package", properties.getProperty( "packageInPathFormat" ) );
}
private void assertTemplateContentGeneratedWithOldArchetype( final String template )
throws IOException
{
Properties properties = loadProperties( template );
assertEquals( "file-value", properties.getProperty( "groupId" ) );
assertEquals( "file-value", properties.getProperty( "artifactId" ) );
assertEquals( "file-value", properties.getProperty( "version" ) );
assertEquals( "file.value.package", properties.getProperty( "package" ) );
}
private void assertTemplateCopiedWithFileSetArchetype( String template )
throws IOException
{
Properties properties = loadProperties( template );
assertEquals( "${groupId}", properties.getProperty( "groupId" ) );
assertEquals( "${artifactId}", properties.getProperty( "artifactId" ) );
assertEquals( "${version}", properties.getProperty( "version" ) );
assertEquals( "${package}", properties.getProperty( "package" ) );
assertEquals( "${packageInPathFormat}", properties.getProperty( "packageInPathFormat" ) );
}
private void copy( final File in, final File out )
throws IOException, FileNotFoundException
{
assertTrue( !out.exists() || out.delete() );
assertFalse( out.exists() );
FileUtils.copyFile( in, out );
assertTrue( out.exists() );
assertTrue( in.exists() );
}
private Properties loadProperties( File propertyFile )
throws IOException, FileNotFoundException
{
Properties properties = new Properties();
try ( InputStream in = new FileInputStream( propertyFile ) )
{
properties.load( in );
return properties;
}
}
private Properties loadProperties( final String template )
throws IOException
{
File templateFile = new File( projectDirectory, template );
if ( !templateFile.exists() )
{
fail( "Missing File: " + templateFile );
}
Properties properties = loadProperties( templateFile );
return properties;
}
private File getProjectFile()
{
return new File( outputDirectory, "/pom.xml" );
}
private File getProjectSampleFile()
{
return new File( outputDirectory, "/pom.xml.sample" );
}
private Model readPom( final File pomFile )
throws IOException, XmlPullParserException
{
try ( Reader pomReader = ReaderFactory.newXmlReader( pomFile ) )
{
MavenXpp3Reader reader = new MavenXpp3Reader();
return reader.read( pomReader );
}
}
private static class Archetype
{
public final String groupId;
public final String artifactId;
public final String version;
public Archetype( String groupId, String artifactId, String version )
{
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
}
}
}