aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java494
1 files changed, 494 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
new file mode 100644
index 00000000..99842dfe
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java
@@ -0,0 +1,494 @@
+package org.apache.maven.model.interpolation;
+
+/*
+ * 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 org.apache.maven.model.Build;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.SimpleProblemCollector;
+import org.apache.maven.model.path.PathTranslator;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Properties;
+import java.util.TimeZone;
+
+/**
+ * @author jdcasey
+ */
+public abstract class AbstractModelInterpolatorTest
+ extends PlexusTestCase
+{
+ private Properties context;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ context = new Properties();
+ context.put( "basedir", "myBasedir" );
+ context.put( "project.baseUri", "myBaseUri" );
+ }
+
+
+ protected void assertProblemFree( SimpleProblemCollector collector )
+ {
+ assertEquals( "Expected no errors", 0, collector.getErrors().size() );
+ assertEquals( "Expected no warnings", 0, collector.getWarnings().size() );
+ assertEquals( "Expected no fatals", 0, collector.getFatals().size() );
+ }
+
+ protected void assertColllectorState( int numFatals, int numErrors, int numWarnings,
+ SimpleProblemCollector collector )
+ {
+ assertEquals( "Errors", numErrors, collector.getErrors().size() );
+ assertEquals( "Warnings", numWarnings, collector.getWarnings().size() );
+ assertEquals( "Fatals", numFatals, collector.getFatals().size() );
+ }
+
+ private ModelBuildingRequest createModelBuildingRequest( Properties p )
+ {
+ ModelBuildingRequest config = new DefaultModelBuildingRequest();
+ if ( p != null )
+ {
+ config.setSystemProperties( p );
+ }
+ return config;
+ }
+
+ public void testDefaultBuildTimestampFormatShouldFormatTimeIn24HourFormat()
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ cal.set( Calendar.HOUR, 12 );
+ cal.set( Calendar.AM_PM, Calendar.AM );
+
+ // just to make sure all the bases are covered...
+ cal.set( Calendar.HOUR_OF_DAY, 0 );
+ cal.set( Calendar.MINUTE, 16 );
+ cal.set( Calendar.SECOND, 0 );
+ cal.set( Calendar.YEAR, 1976 );
+ cal.set( Calendar.MONTH, Calendar.NOVEMBER );
+ cal.set( Calendar.DATE, 11 );
+
+ Date firstTestDate = cal.getTime();
+
+ cal.set( Calendar.HOUR, 11 );
+ cal.set( Calendar.AM_PM, Calendar.PM );
+
+ // just to make sure all the bases are covered...
+ cal.set( Calendar.HOUR_OF_DAY, 23 );
+
+ Date secondTestDate = cal.getTime();
+
+ SimpleDateFormat format =
+ new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ assertEquals( "1976-11-11T00:16:00Z", format.format( firstTestDate ) );
+ assertEquals( "1976-11-11T23:16:00Z", format.format( secondTestDate ) );
+ }
+
+ public void testDefaultBuildTimestampFormatWithLocalTimeZoneMidnightRollover()
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
+
+ cal.set( Calendar.HOUR_OF_DAY, 1 );
+ cal.set( Calendar.MINUTE, 16 );
+ cal.set( Calendar.SECOND, 0 );
+ cal.set( Calendar.YEAR, 2014 );
+ cal.set( Calendar.MONTH, Calendar.JUNE );
+ cal.set( Calendar.DATE, 16 );
+
+ Date firstTestDate = cal.getTime();
+
+ cal.set( Calendar.MONTH, Calendar.NOVEMBER );
+
+ Date secondTestDate = cal.getTime();
+
+ SimpleDateFormat format =
+ new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT );
+ format.setTimeZone(TimeZone.getTimeZone("UTC"));
+ assertEquals( "2014-06-15T23:16:00Z", format.format( firstTestDate ) );
+ assertEquals( "2014-11-16T00:16:00Z", format.format( secondTestDate ) );
+ }
+
+ public void testShouldNotThrowExceptionOnReferenceToNonExistentValue()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${test}/somepath" );
+
+ model.setScm( scm );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+
+ assertProblemFree( collector );
+ assertEquals( "${test}/somepath", out.getScm().getConnection() );
+ }
+
+ public void testShouldThrowExceptionOnRecursiveScmConnectionReference()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${project.scm.connection}/somepath" );
+
+ model.setScm( scm );
+
+ try
+ {
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 1, 0, collector );
+ }
+ catch ( Exception e )
+ {
+
+ }
+ }
+
+ public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Scm scm = new Scm();
+ scm.setConnection( "${test}/somepath" );
+
+ model.setScm( scm );
+
+ model.addProperty( "test", "test" );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+
+ assertProblemFree( collector );
+
+ assertEquals( "test/somepath", out.getScm().getConnection() );
+ }
+
+ public void testShouldInterpolateOrganizationNameCorrectly()
+ throws Exception
+ {
+ String orgName = "MyCo";
+
+ Model model = new Model();
+ model.setName( "${pom.organization.name} Tools" );
+
+ Organization org = new Organization();
+ org.setName( orgName );
+
+ model.setOrganization( org );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ),
+ new SimpleProblemCollector() );
+
+ assertEquals( orgName + " Tools", out.getName() );
+ }
+
+ public void testShouldInterpolateDependencyVersionToSetSameAsProjectVersion()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${version}" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertColllectorState(0, 0, 1, collector );
+
+ assertEquals( "3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testShouldNotInterpolateDependencyVersionWithInvalidReference()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${something}" );
+
+ model.addDependency( dep );
+
+ /*
+ // This is the desired behaviour, however there are too many crappy poms in the repo and an issue with the
+ // timing of executing the interpolation
+
+ try
+ {
+ new RegexBasedModelInterpolator().interpolate( model, context );
+ fail( "Should have failed to interpolate with invalid reference" );
+ }
+ catch ( ModelInterpolationException expected )
+ {
+ assertTrue( true );
+ }
+ */
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "${something}", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testTwoReferences()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Dependency dep = new Dependency();
+ dep.setVersion( "${artifactId}-${version}" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 0, 2, collector );
+
+ assertEquals( "foo-3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() );
+ }
+
+ public void testBasedir()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Repository repository = new Repository();
+
+ repository.setUrl( "file://localhost/${basedir}/temp-repo" );
+
+ model.addRepository( repository );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "file://localhost/myBasedir/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() );
+ }
+
+ public void testBaseUri()
+ throws Exception
+ {
+ Model model = new Model();
+ model.setVersion( "3.8.1" );
+ model.setArtifactId( "foo" );
+
+ Repository repository = new Repository();
+
+ repository.setUrl( "${project.baseUri}/temp-repo" );
+
+ model.addRepository( repository );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "myBaseUri/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() );
+ }
+
+ public void testEnvars()
+ throws Exception
+ {
+ Properties context = new Properties();
+
+ context.put( "env.HOME", "/path/to/home" );
+
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${env.HOME}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( "/path/to/home", out.getProperties().getProperty( "outputDirectory" ) );
+ }
+
+ public void testEnvarExpressionThatEvaluatesToNullReturnsTheLiteralString()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${env.DOES_NOT_EXIST}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${env.DOES_NOT_EXIST}" );
+ }
+
+ public void testExpressionThatEvaluatesToNullReturnsTheLiteralString()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Properties modelProperties = new Properties();
+
+ modelProperties.setProperty( "outputDirectory", "${DOES_NOT_EXIST}" );
+
+ model.setProperties( modelProperties );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out =
+ interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+ assertEquals( out.getProperties().getProperty( "outputDirectory" ), "${DOES_NOT_EXIST}" );
+ }
+
+ public void testShouldInterpolateSourceDirectoryReferencedFromResourceDirectoryCorrectly()
+ throws Exception
+ {
+ Model model = new Model();
+
+ Build build = new Build();
+ build.setSourceDirectory( "correct" );
+
+ Resource res = new Resource();
+ res.setDirectory( "${project.build.sourceDirectory}" );
+
+ build.addResource( res );
+
+ Resource res2 = new Resource();
+ res2.setDirectory( "${pom.build.sourceDirectory}" );
+
+ build.addResource( res2 );
+
+ Resource res3 = new Resource();
+ res3.setDirectory( "${build.sourceDirectory}" );
+
+ build.addResource( res3 );
+
+ model.setBuild( build );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model out = interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector );
+ assertColllectorState( 0, 0, 2, collector );
+
+
+ List<Resource> outResources = out.getBuild().getResources();
+ Iterator<Resource> resIt = outResources.iterator();
+
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() );
+ }
+
+ public void testShouldInterpolateUnprefixedBasedirExpression()
+ throws Exception
+ {
+ File basedir = new File( "/test/path" );
+ Model model = new Model();
+ Dependency dep = new Dependency();
+ dep.setSystemPath( "${basedir}/artifact.jar" );
+
+ model.addDependency( dep );
+
+ ModelInterpolator interpolator = createInterpolator();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ Model result = interpolator.interpolateModel( model, basedir, createModelBuildingRequest( context ), collector );
+ assertProblemFree( collector );
+
+
+ List<Dependency> rDeps = result.getDependencies();
+ assertNotNull( rDeps );
+ assertEquals( 1, rDeps.size() );
+ assertEquals( new File( basedir, "artifact.jar" ).getAbsolutePath(),
+ new File( rDeps.get( 0 ).getSystemPath() ).getAbsolutePath() );
+ }
+
+ protected abstract ModelInterpolator createInterpolator( PathTranslator translator )
+ throws Exception;
+
+ protected abstract ModelInterpolator createInterpolator()
+ throws Exception;
+
+}