blob: 3042340687567f4206a5fd528d90f7f89e406466 [file] [log] [blame]
package org.apache.maven.archetype.generator
import org.junit.Test
import static org.junit.Assert.*
import org.apache.maven.archetype.ArchetypeGenerationRequest
import org.apache.maven.archetype.ArchetypeGenerationResult
import org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator
import org.apache.maven.archetype.pom.PomManager
import org.apache.maven.artifact.repository.DefaultArtifactRepository
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout
import org.codehaus.plexus.PlexusTestCase
import org.apache.maven.plugin.testing.AbstractMojoTestCase
import org.codehaus.plexus.util.FileUtils
/**
*
* @author rafale
*/
class DefaultArchetypeFilesetGeneratorTest extends AbstractMojoTestCase {
def project
def archetypeFile
def outputDirectory
def projectDirectory
def generator
def generationRequest
def pomManager
void setUp() {
super.setUp()
generator = lookup(FilesetArchetypeGenerator.ROLE, 'fileset')
pomManager = lookup(PomManager.ROLE)
}
void tearDown() {super.tearDown()}
@Test void test_generateMonoModuleProjectWithNoParent() {
println 'generateMonoModuleProjectWithNoParent'
prepareTest project: 'generateMonoModuleProjectWithNoParent', artifactId: 'file-value', archetype: 'basic'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'file-value',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
assertTemplateContent 'src/main/java/file/value/package/App.java'
assertCopyContent 'src/main/resources/images/foo.png'
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertEquals 'file-value', pom.groupId
assertEquals 'file-value', pom.artifactId
assertEquals 'file-value', pom.version
}
@Test void test_generateMonoModuleProjectParentFromArchetype() {
println 'generateMonoModuleProjectParentFromArchetype'
prepareTest project: 'generateMonoModuleProjectParentFromArchetype', artifactId: 'file-value', archetype: 'basic-with-parent'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'file-value',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
assertTemplateContent 'src/main/java/file/value/package/App.java'
assertCopyContent 'src/main/resources/images/foo.png'
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertNotNull pom.parent
assertEquals 'parent-doesnt-exist', pom.parent.artifactId
assertEquals 'file-value', pom.groupId
assertEquals 'file-value', pom.artifactId
assertEquals 'file-value', pom.version
def parentPom = pomManager.loadModel(new File(outputDirectory, 'pom.xml'))
assertEquals 1, parentPom.modules.size()
}
@Test void test_generateMonoModuleProjectParentFromDirectory() {
println 'generateMonoModuleProjectParentFromDirectory'
prepareTest project: 'generateMonoModuleProjectParentFromDirectory', artifactId: 'file-value', archetype: 'basic'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'file-value',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
assertTemplateContent 'src/main/java/file/value/package/App.java'
assertCopyContent 'src/main/resources/images/foo.png'
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertNotNull pom.parent
assertEquals 'generateMonoModuleProjectParentFromDirectory', pom.parent.artifactId
assertEquals 'file-value', pom.groupId
assertEquals 'file-value', pom.artifactId
assertEquals 'file-value', pom.version
def parentPom = pomManager.loadModel(new File(outputDirectory, 'pom.xml'))
assertEquals 1, parentPom.modules.size()
}
@Test void test_generateMultiModuleProjectWithNoParent() {
println 'generateMultiModuleProjectWithNoParent'
prepareTest project: 'generateMultiModuleProjectWithNoParent', artifactId: 'foobar', archetype: 'multi'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'foobar',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertEquals 'file-value', pom.groupId
assertEquals 'foobar', pom.artifactId
assertEquals 'file-value', pom.version
def innestPom = pomManager.loadModel(new File(projectDirectory, "foobar-c/foobar-e/foobar-c-h/pom.xml"))
assertEquals 'file-value', innestPom.parent.groupId
assertEquals 'foobar-e', innestPom.parent.artifactId
assertEquals 'foobar-c-h', innestPom.artifactId
assertEquals 'file-value', innestPom.version
}
@Test void test_generateMultiModuleProjectWithParentFromArchetype() {
println 'generateMultiModuleProjectWithParentFromArchetype'
prepareTest project: 'generateMultiModuleProjectWithParentFromArchetype', artifactId: 'foobar', archetype: 'multi-with-parent'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'foobar',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertNotNull pom.parent
assertEquals 'parent-doesnt-exist', pom.parent.artifactId
assertEquals 'file-value', pom.groupId
assertEquals 'foobar', pom.artifactId
assertEquals 'file-value', pom.version
def parentPom = pomManager.loadModel(new File(outputDirectory, 'pom.xml'))
assertEquals 1, parentPom.modules.size
def innestPom = pomManager.loadModel(new File(projectDirectory, "foobar-c/foobar-e/foobar-c-h/pom.xml"))
assertEquals 'file-value', innestPom.parent.groupId
assertEquals 'foobar-e', innestPom.parent.artifactId
assertEquals 'foobar-c-h', innestPom.artifactId
assertEquals 'file-value', innestPom.version
}
@Test void test_generateMultiModuleProjectWithParentFromDirectory() {
println 'generateMultiModuleProjectWithParentFromDirectory'
prepareTest project: 'generateMultiModuleProjectWithParentFromDirectory', artifactId: 'foobar', archetype: 'multi'
generationRequest = new ArchetypeGenerationRequest(
archetypeFile: archetypeFile,
outputDirectory: outputDirectory,
generationFilterProperties: [
groupId: 'file-value',
artifactId: 'foobar',
version: 'file-value',
packageName: 'file.value.package',
propertyWithDefault: 'file-value',
propertyWithoutDefault: 'file-value'] as Properties
)
generator.generateProject generationRequest
def pom = pomManager.loadModel(new File(projectDirectory, 'pom.xml'))
assertNotNull pom.parent
assertEquals 'generateMultiModuleProjectWithParentFromDirectory', pom.parent.artifactId
assertEquals 'file-value', pom.groupId
assertEquals 'foobar', pom.artifactId
assertEquals 'file-value', pom.version
def parentPom = pomManager.loadModel(new File(outputDirectory, 'pom.xml'))
assertEquals 1, parentPom.modules.size()
def innestPom = pomManager.loadModel(new File(projectDirectory, "foobar-c/foobar-e/foobar-c-h/pom.xml"))
assertEquals 'file-value', innestPom.parent.groupId
assertEquals 'foobar-e', innestPom.parent.artifactId
assertEquals 'foobar-c-h', innestPom.artifactId
assertEquals 'file-value', innestPom.version
}
private void prepareTest(args) {
project = args.project
outputDirectory = "${basedir}/target/projects/$project"
projectDirectory = new File(outputDirectory, args.artifactId)
assertDeleted projectDirectory
archetypeFile = new File("${basedir}/target/repositories/central/archetypes/${args.archetype}/1.0/${args.archetype}-1.0.jar")
}
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 loadProperties(template) {
def templateFile = new File(projectDirectory, template)
if (!templateFile.exists()) fail "Missing File:$templateFile"
Properties properties = new Properties()
properties.load new FileInputStream(templateFile)
return properties
}
private void assertTemplateContent(template) {
Properties properties = loadProperties(template)
assertEquals "file-value", properties["groupId"]
assertEquals "file-value", properties["artifactId"]
assertEquals "file-value", properties["version"]
assertEquals "file.value.package", properties["package"]
assertEquals "file-value", properties["propertyWithDefault"]
assertEquals "file-value", properties["propertyWithoutDefault"]
assertEquals "file/value/package", properties["packageReplaced"]
assertEquals "file/value/package", properties["packageReplaced2"]
assertEquals '${packageName.replace(\'.\', \'/\')}', properties["ignoredDollar"]
assertEquals "<%=packageName.replace('.', '/')%>", properties["ignoredInferior"]
}
private void assertCopyContent(template) {
Properties properties = loadProperties(template)
assertEquals '${groupId}', properties["groupId"]
assertEquals '${artifactId}', properties["artifactId"]
assertEquals '${version}', properties["version"]
assertEquals '${packageName}', properties["package"]
assertEquals '${propertyWithDefault}', properties["propertyWithDefault"]
assertEquals '${propertyWithoutDefault}', properties["propertyWithoutDefault"]
assertEquals '${packageName.replace(\'.\', \'/\')}', properties["packageReplaced"]
assertEquals "<%=packageName.replace('.', '/')%>", properties["packageReplaced2"]
assertEquals '${packageName.replace(\'.\', \'/\')}', properties["ignoredDollar"]
assertEquals '${\'<\'}%=packageName.replace(\'.\', \'/\')%>', properties["ignoredInferior"]
}
}