blob: 3597a984122b82ebf84ec68fd3459a301dcc27bd [file] [log] [blame]
package org.apache.maven.archetype.generator
import org.junit.Test
import static org.junit.Assert.*
import org.codehaus.plexus.PlexusTestCase
import org.apache.maven.plugin.testing.AbstractMojoTestCase
import org.codehaus.plexus.util.FileUtils
import org.apache.maven.archetype.ArchetypeGenerationRequest
import org.apache.maven.archetype.ArchetypeGenerationResult
import org.apache.maven.archetype.generator.DefaultProjectGenerator
import org.apache.maven.archetype.pom.PomManager
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout
/**
*
* @author raphaelpieroni
*/
class DefaultProjectGeneratorTest extends AbstractMojoTestCase {
def generator
def pomManager
def generationRequest
def project
def outputDirectory
def projectDirectory
def artifactRepositoryFactory
def localRepository
def remoteRepostories
def defaultArtifactRepositoryLayout
void setUp() {
super.setUp()
generator = lookup( ProjectGenerator.ROLE )
pomManager = lookup( PomManager.ROLE )
artifactRepositoryFactory = lookup( ArtifactRepositoryFactory.ROLE )
defaultArtifactRepositoryLayout = lookup( ArtifactRepositoryLayout.ROLE )
}
void tearDown() {super.tearDown()}
@Test void test_generateNestedArchetypeSimple() {
println'generateNestedArchetypeSimple'
prepareTest project:'generateNestedArchetypeSimple', artifactId:'artifact'
generationRequest = new ArchetypeGenerationRequest(
groupId:'archetypes',
artifactId:'nested-main',
version:'1.0',
outputDirectory:outputDirectory,
generationFilterProperties:[
groupId:'file-value',
artifactId:'artifact',
version:'file-value',
packageName:'file.value.package',
propertyWithDefault:'file-value',
propertyWithoutDefault:'file-value'] as Properties,
localRepository:localRepository,
repositories:remoteRepostories
)
generator.generateProject generationRequest
//CORE
def artifact = loadModel( 'pom.xml' )
// assert no parent, modules, content
assertParent artifact, null
assertDefinition artifact, [groupId:'file-value', artifactId:'artifact', version:'file-value']
assertModules artifact, ['artifact-n-inner', 'artifact-n2-inner', 'artifact-n-old', 'artifact-inner']
def artifact_n_inner = loadModel( '/artifact-n-inner/pom.xml' )
// assert parent, modules, content
assertParent artifact_n_inner, [groupId:'file-value', artifactId:'artifact', version:'file-value']
assertDefinition artifact_n_inner, [groupId:'file-value', artifactId:'artifact-n-inner', version:'file-value']
assertModules artifact_n_inner, ['artifact-n-inner-n-innest', 'artifact-n-inner-n-old', 'artifact-n-inner-inner']
def artifact_n2_inner = loadModel( '/artifact-n2-inner/pom.xml' )
// assert parent, modules, content
assertParent artifact_n2_inner, [groupId:'file-value', artifactId:'artifact', version:'file-value']
assertDefinition artifact_n2_inner, [groupId:'file-value', artifactId:'artifact-n2-inner', version:'file-value']
assertModules artifact_n2_inner, ['artifact-n2-inner-n-innest', 'artifact-n2-inner-n-old', 'artifact-n2-inner-inner']
def artifact_n_old = loadModel( '/artifact-n-old/pom.xml' )
// assert parent, content
assertParent artifact_n_old, [groupId:'file-value', artifactId:'artifact', version:'file-value']
assertDefinition artifact_n_old, [groupId:'file-value', artifactId:'artifact-n-old', version:'file-value']
assertModules artifact_n_old, null
def artifact_inner = loadModel( '/artifact-inner/pom.xml' )
// assert parent, modules, content
assertParent artifact_inner, [groupId:'file-value', artifactId:'artifact', version:'file-value']
assertDefinition artifact_inner, [groupId:null, artifactId:'artifact-inner', version:'file-value']
assertModules artifact_inner, ['artifact-n-innest', 'artifact-innest']
def artifact_n_innest = loadModel( '/artifact-inner/artifact-n-innest/pom.xml' )
// assert parent, modules, content
assertParent artifact_n_innest, [groupId:'file-value', artifactId:'artifact-inner', version:'file-value']
assertDefinition artifact_n_innest, [groupId:'file-value', artifactId:'artifact-n-innest', version:'file-value']
assertModules artifact_n_innest, ['artifact-n-innest-inner', 'artifact-n-innest-n-innest', 'artifact-n-innest-n-old']
def artifact_innest = loadModel( '/artifact-inner/artifact-innest/pom.xml' )
// assert parent, content, partial
assertParent artifact_innest, [groupId:'file-value', artifactId:'artifact-inner', version:'file-value']
assertDefinition artifact_innest, [groupId:null, artifactId:'artifact-innest', version:'file-value']
assertModules artifact_innest, null
//NESTED FIRST LEVEL
def artifact_n_inner_n_innest = loadModel( '/artifact-n-inner/artifact-n-inner-n-innest/pom.xml' )
// assert parent, modules, content
def artifact_n_inner_n_old = loadModel( '/artifact-n-inner/artifact-n-inner-n-old/pom.xml' )
// assert parent, content
def artifact_n_inner_inner = loadModel( '/artifact-n-inner/artifact-n-inner-inner/pom.xml' )
// assert parent, modules, content
def artifact_n_inner_n2_innest = loadModel( '/artifact-n-inner/artifact-n-inner-inner/artifact-n-inner-n2-innest/pom.xml' )
// assert parent, modules, content
def artifact_n_inner_innest = loadModel( '/artifact-n-inner/artifact-n-inner-inner/artifact-n-inner-innest/pom.xml' )
// assert parent, content, partial
def artifact_n2_inner_n_innest = loadModel( '/artifact-n2-inner/artifact-n2-inner-n-innest/pom.xml' )
// assert parent, modules, content
def artifact_n2_inner_n_old = loadModel( '/artifact-n2-inner/artifact-n2-inner-n-old/pom.xml' )
// assert parent, content
def artifact_n2_inner_inner = loadModel( '/artifact-n2-inner/artifact-n2-inner-inner/pom.xml' )
// assert parent, modules, content
def artifact_n2_inner_n2_innest = loadModel( '/artifact-n2-inner/artifact-n2-inner-inner/artifact-n2-inner-n2-innest/pom.xml' )
// assert parent, modules, content
def artifact_n2_inner_innest = loadModel( '/artifact-n2-inner/artifact-n2-inner-inner/artifact-n2-inner-innest/pom.xml' )
// assert parent, content, partial
def artifact_n_innest_n_innest = loadModel( '/artifact-inner/artifact-n-innest/artifact-n-innest-n-innest/pom.xml' )
// assert parent, modules, content
def artifact_n_innest_n_old = loadModel( '/artifact-inner/artifact-n-innest/artifact-n-innest-n-old/pom.xml' )
// assert parent, content
def artifact_n_innest_inner = loadModel( '/artifact-inner/artifact-n-innest/artifact-n-innest-inner/pom.xml' )
// assert parent, modules, content
def artifact_n_innest_n2_innest = loadModel( '/artifact-inner/artifact-n-innest/artifact-n-innest-inner/artifact-n-innest-n2-innest/pom.xml' )
// assert parent, modules, content
def artifact_n_innest_innest = loadModel( '/artifact-inner/artifact-n-innest/artifact-n-innest-inner/artifact-n-innest-innest/pom.xml' )
// assert parent, content, partial
// fail 'NO ASSERT YET'
}
private void assertModules( pom, expectedModules ) {
println"POM=${pom?.modules?.dump()}"
println"EXP=${expectedModules?.dump()}"
if( !expectedModules ) {
assertTrue !pom.modules
return
}
if( !pom.modules ) fail 'When modules provided, pom should have modules'
assertEquals expectedModules.size(), pom.modules.size()
expectedModules.each{
assertTrue pom.modules.contains( it )
}
}
private void assertDefinition( pom, expected ) {
if( !expected ) fail 'expected should be provided'
assertEquals expected.groupId, pom.groupId
assertEquals expected.artifactId, pom.artifactId
assertEquals expected.version, pom.version
}
private void assertParent( pom, expectedParent ) {
if( !expectedParent ) assertTrue !pom.parent ; return
if( !pom.parent ) fail 'When parent provided, pom should have parent'
assertEquals expectedParent.groupId, pom.parent.groupId
assertEquals expectedParent.artifactId, pom.parent.artifactId
assertEquals expectedParent.version, pom.parent.version
}
private def loadModel( pom ) {
pomManager.loadModel( new File( projectDirectory, pom ) )
}
private void prepareTest( args ) {
project = args.project
outputDirectory = "${basedir}/target/projects/${project}"
projectDirectory = new File( outputDirectory, args.artifactId )
localRepository = createRepository( "file://${basedir}/target/repositories/local/${project}", 'local' )
remoteRepostories = [createRepository( "file://${basedir}/target/repositories/central", 'central' )]
new File( "${basedir}/target/repositories/local/${project}" ).mkdirs()
assertDeleted projectDirectory
}
private void assertDeleted( file ) {
if ( file.exists() ) {
if ( file.isDirectory() ) {
try {
FileUtils.deleteDirectory file
} catch ( IOException e ) {
fail "Unable to delete directory:$file:${e.getLocalizedMessage()}"
}
}
} else {
try {
FileUtils.forceDelete file
} catch ( IOException e ) {
fail "Unable to delete file:$file:${e.getLocalizedMessage()}"
e.printStackTrace()
}
}
if ( file.exists() ) {
fail "File not deleted:$file"
}
}
private def createRepository( url, repositoryId ) {
def updatePolicyFlag = ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS
def checksumPolicyFlag = ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN
def snapshotsPolicy = new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag )
def releasesPolicy = new ArtifactRepositoryPolicy( true, updatePolicyFlag, checksumPolicyFlag )
def repo =
artifactRepositoryFactory.createArtifactRepository(
repositoryId,
url,
defaultArtifactRepositoryLayout,
snapshotsPolicy,
releasesPolicy
)
return repo
}
}