blob: a6959eeb3158a45897a69d2a6d0154ee83f4a035 [file] [log] [blame]
/*
* 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.ui.generation;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import org.apache.maven.archetype.ArchetypeGenerationRequest;
import org.apache.maven.archetype.common.ArchetypeArtifactManager;
import org.apache.maven.archetype.metadata.ArchetypeDescriptor;
import org.apache.maven.archetype.metadata.RequiredProperty;
import org.apache.maven.archetype.ui.ArchetypeConfiguration;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.project.ProjectBuildingRequest;
import org.codehaus.plexus.PlexusTestCase;
import org.easymock.EasyMock;
import org.easymock.IAnswer;
/**
* Tests the ability to use variables in default fields in batch mode.
*/
public class DefaultArchetypeGenerationConfigurator2Test extends PlexusTestCase {
private DefaultArchetypeGenerationConfigurator configurator;
private ArchetypeGenerationQueryer queryer;
private ArchetypeDescriptor descriptor;
@Override
public void setUp() throws Exception {
super.setUp();
configurator = (DefaultArchetypeGenerationConfigurator) lookup(ArchetypeGenerationConfigurator.ROLE);
ProjectBuildingRequest buildingRequest = null;
descriptor = new ArchetypeDescriptor();
RequiredProperty groupId = new RequiredProperty();
groupId.setKey("groupId");
groupId.setDefaultValue("com.example.${groupName}");
RequiredProperty artifactId = new RequiredProperty();
artifactId.setKey("artifactId");
artifactId.setDefaultValue("${serviceName}");
RequiredProperty thePackage = new RequiredProperty();
thePackage.setKey("package");
thePackage.setDefaultValue("com.example.${groupName}");
RequiredProperty groupName = new RequiredProperty();
groupName.setKey("groupName");
groupName.setDefaultValue(null);
RequiredProperty serviceName = new RequiredProperty();
serviceName.setKey("serviceName");
serviceName.setDefaultValue(null);
descriptor.addRequiredProperty(groupId);
descriptor.addRequiredProperty(artifactId);
descriptor.addRequiredProperty(thePackage);
descriptor.addRequiredProperty(groupName);
descriptor.addRequiredProperty(serviceName);
ArchetypeArtifactManager manager = EasyMock.createMock(ArchetypeArtifactManager.class);
File archetype = new File("archetype.jar");
List<ArtifactRepository> x = new ArrayList<>();
EasyMock.expect(manager.exists(
"archetypeGroupId", "archetypeArtifactId", "archetypeVersion", null, null, x, buildingRequest))
.andReturn(true);
EasyMock.expect(manager.getArchetypeFile(
"archetypeGroupId", "archetypeArtifactId", "archetypeVersion", null, null, x, buildingRequest))
.andReturn(archetype);
EasyMock.expect(manager.isFileSetArchetype(archetype)).andReturn(true);
EasyMock.expect(manager.isOldArchetype(archetype)).andReturn(false);
EasyMock.expect(manager.getFileSetArchetypeDescriptor(archetype)).andReturn(descriptor);
EasyMock.replay(manager);
configurator.setArchetypeArtifactManager(manager);
queryer = EasyMock.mock(ArchetypeGenerationQueryer.class);
configurator.setArchetypeGenerationQueryer(queryer);
}
public void testJIRA_509_FileSetArchetypeDefaultsWithVariables() throws Exception {
ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
request.setArchetypeGroupId("archetypeGroupId");
request.setArchetypeArtifactId("archetypeArtifactId");
request.setArchetypeVersion("archetypeVersion");
Properties properties = new Properties();
properties.setProperty("groupName", "myGroupName");
properties.setProperty("serviceName", "myServiceName");
configurator.configureArchetype(request, Boolean.FALSE, properties);
assertEquals("com.example.myGroupName", request.getGroupId());
assertEquals("myServiceName", request.getArtifactId());
assertEquals("1.0-SNAPSHOT", request.getVersion());
assertEquals("com.example.myGroupName", request.getPackage());
}
public void testInteractive() throws Exception {
ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
request.setArchetypeGroupId("archetypeGroupId");
request.setArchetypeArtifactId("archetypeArtifactId");
request.setArchetypeVersion("archetypeVersion");
Properties properties = new Properties();
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("groupName"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("myGroupName");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("serviceName"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("myServiceName");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.anyString(), EasyMock.anyString(), EasyMock.<Pattern>anyObject()))
.andAnswer(new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return (String) EasyMock.getCurrentArguments()[1];
}
})
.anyTimes();
EasyMock.expect(queryer.confirmConfiguration(EasyMock.<ArchetypeConfiguration>anyObject()))
.andReturn(Boolean.TRUE);
EasyMock.replay(queryer);
configurator.configureArchetype(request, Boolean.TRUE, properties);
assertEquals("com.example.myGroupName", request.getGroupId());
assertEquals("myServiceName", request.getArtifactId());
assertEquals("1.0-SNAPSHOT", request.getVersion());
assertEquals("com.example.myGroupName", request.getPackage());
}
public void testArchetype406ComplexCustomPropertyValue() throws Exception {
RequiredProperty custom = new RequiredProperty();
custom.setKey("serviceUpper");
custom.setDefaultValue("${serviceName.toUpperCase()}");
descriptor.addRequiredProperty(custom);
ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
request.setArchetypeGroupId("archetypeGroupId");
request.setArchetypeArtifactId("archetypeArtifactId");
request.setArchetypeVersion("archetypeVersion");
Properties properties = new Properties();
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("groupName"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("myGroupName");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("serviceName"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("myServiceName");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.anyString(), EasyMock.anyString(), EasyMock.<Pattern>anyObject()))
.andAnswer(new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return (String) EasyMock.getCurrentArguments()[1];
}
})
.anyTimes();
EasyMock.expect(queryer.confirmConfiguration(EasyMock.<ArchetypeConfiguration>anyObject()))
.andReturn(Boolean.TRUE);
EasyMock.replay(queryer);
configurator.configureArchetype(request, Boolean.TRUE, properties);
assertEquals("MYSERVICENAME", request.getProperties().get("serviceUpper"));
}
public void testArchetype618() throws Exception {
RequiredProperty custom = getRequiredProperty("serviceName");
custom.setKey("camelArtifact");
custom.setDefaultValue(
"${artifactId.class.forName('org.codehaus.plexus.util.StringUtils').capitaliseAllWords($artifactId.replaceAll('[^A-Za-z_\\$0-9]', ' ').replaceFirst('^(\\d)', '_$1').replaceAll('\\d', '$0 ').replaceAll('[A-Z](?=[^A-Z])', ' $0').toLowerCase()).replaceAll('\\s', '')}");
descriptor.addRequiredProperty(custom);
getRequiredProperty("artifactId").setDefaultValue(null);
ArchetypeGenerationRequest request = new ArchetypeGenerationRequest();
request.setArchetypeGroupId("archetypeGroupId");
request.setArchetypeArtifactId("archetypeArtifactId");
request.setArchetypeVersion("archetypeVersion");
Properties properties = new Properties();
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("groupName"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("myGroupName");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.eq("artifactId"), EasyMock.anyString(), EasyMock.<Pattern>isNull()))
.andReturn("my-service-name");
EasyMock.expect(queryer.getPropertyValue(
EasyMock.anyString(), EasyMock.anyString(), EasyMock.<Pattern>anyObject()))
.andAnswer(new IAnswer<String>() {
@Override
public String answer() throws Throwable {
return (String) EasyMock.getCurrentArguments()[1];
}
})
.anyTimes();
EasyMock.expect(queryer.confirmConfiguration(EasyMock.<ArchetypeConfiguration>anyObject()))
.andReturn(Boolean.TRUE);
EasyMock.replay(queryer);
configurator.configureArchetype(request, Boolean.TRUE, properties);
assertEquals("MyServiceName", request.getProperties().get("camelArtifact"));
}
private RequiredProperty getRequiredProperty(String propertyName) {
if (propertyName != null) {
for (RequiredProperty candidate : descriptor.getRequiredProperties()) {
if (propertyName.equals(candidate.getKey())) {
return candidate;
}
}
}
return null;
}
}