| /* |
| * 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. |
| */ |
| package org.apache.maven.archetype.generator; |
| |
| 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.Collections; |
| 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.codehaus.plexus.util.FileUtils; |
| import org.codehaus.plexus.util.ReaderFactory; |
| import org.codehaus.plexus.util.xml.pull.XmlPullParserException; |
| import org.eclipse.aether.DefaultRepositorySystemSession; |
| import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory; |
| import org.eclipse.aether.repository.LocalRepository; |
| import org.eclipse.aether.repository.RemoteRepository; |
| |
| public class DefaultArchetypeGeneratorTest extends AbstractMojoTestCase { |
| // archetypes prepared by antrun execution (see pom.xml) from src/test/archetypes |
| private static final Archetype ARCHETYPE_BASIC = new Archetype("archetypes", "basic", "1.0"); |
| |
| private static final Archetype ARCHETYPE_PARTIAL = new Archetype("archetypes", "partial", "1.0"); |
| |
| private static final Archetype ARCHETYPE_SITE = new Archetype("archetypes", "site", "1.0"); |
| |
| private static final Archetype ARCHETYPE_FILESET = new Archetype("archetypes", "fileset", "1.0"); |
| |
| private static final Archetype ARCHETYPE_OLD = new Archetype("archetypes", "old", "1.0"); |
| |
| private static final Archetype ARCHETYPE_FILESET_WITH_POSTCREATE_SCRIPT = |
| new Archetype("archetypes", "fileset_with_postscript", "1.0"); |
| |
| private static final Properties ADDITIONAL_PROPERTIES = new Properties(); |
| |
| static { |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithoutDefault1", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithoutDefault2", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithoutDefault3", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithoutDefault4", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithDefault1", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithDefault2", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithDefault3", "file-value"); |
| ADDITIONAL_PROPERTIES.setProperty("propertyWithDefault4", "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 propertyWithoutDefault4 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.class); |
| assertNotNull(generator); |
| assertNotNull(getVariableValueFromObject(generator, "archetypeArtifactManager")); |
| assertNotNull(getVariableValueFromObject(generator, "oldArchetype")); |
| assertNotNull(getVariableValueFromObject(generator, "filesetGenerator")); |
| } |
| |
| private ArchetypeGenerationRequest createArchetypeGenerationRequest(String project, Archetype archetype) |
| throws Exception { |
| outputDirectory = getBasedir() + "/target/test-classes/projects/" + project; |
| |
| projectDirectory = new File(outputDirectory, "file-value"); |
| |
| ArchetypeGenerationRequest request = new ArchetypeGenerationRequest(); |
| request.setRemoteRepositories(Collections.singletonList(new RemoteRepository.Builder("central", "default", "\"https://repo.maven.apache.org/maven2\"").build())); |
| |
| 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(); |
| |
| DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession(); |
| repositorySession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory() |
| .newInstance(repositorySession, new LocalRepository(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("propertyWithDefault1")); |
| assertEquals("file-value", properties.getProperty("propertyWithDefault2")); |
| assertEquals("file-value", properties.getProperty("propertyWithDefault3")); |
| assertEquals("file-value", properties.getProperty("propertyWithDefault4")); |
| assertEquals("file-value", properties.getProperty("propertyWithoutDefault1")); |
| assertEquals("file-value", properties.getProperty("propertyWithoutDefault2")); |
| assertEquals("file-value", properties.getProperty("propertyWithoutDefault3")); |
| assertEquals("file-value", properties.getProperty("propertyWithoutDefault4")); |
| } |
| |
| 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; |
| } |
| } |
| } |