From be3c4eb406e9b4439c8e2365ab95e2ead90d8697 Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Sat, 23 May 2020 01:45:10 +0200 Subject: [PATCH] [MNG-6819] Refactor unit tests for ModelInterpolator --- .../AbstractModelInterpolatorTest.java | 203 ++++++++++-------- .../StringSearchModelInterpolatorTest.java | 37 ++-- .../StringVisitorModelInterpolatorTest.java | 35 +++ 3 files changed, 167 insertions(+), 108 deletions(-) create mode 100644 maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java index 19a28c1f5c..01cac27310 100644 --- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java +++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/AbstractModelInterpolatorTest.java @@ -29,9 +29,9 @@ 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 junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; import java.io.File; import java.text.SimpleDateFormat; @@ -42,19 +42,19 @@ import java.util.List; import java.util.Properties; import java.util.TimeZone; +import static org.junit.Assert.*; + /** * @author jdcasey */ public abstract class AbstractModelInterpolatorTest - extends TestCase { + protected ModelInterpolator interpolator; private Properties context; - protected void setUp() - throws Exception + @Before + public void setUp() { - super.setUp(); - context = new Properties(); context.put( "basedir", "myBasedir" ); context.put( "project.baseUri", "myBaseUri" ); @@ -68,24 +68,13 @@ public abstract class AbstractModelInterpolatorTest assertEquals( "Expected no fatals", 0, collector.getFatals().size() ); } - /** - * @deprecated instead use {@link #assertCollectorState(int, int, int, SimpleProblemCollector)} - */ - @Deprecated - protected void assertColllectorState( int numFatals, int numErrors, int numWarnings, - SimpleProblemCollector collector ) + protected void assertCollectorState( int numFatals, int numErrors, int numWarnings, SimpleProblemCollector collector ) { - assertEquals( "Errors", numErrors, collector.getErrors().size() ); + assertEquals( "Errors", numErrors, collector.getErrors().size() ); assertEquals( "Warnings", numWarnings, collector.getWarnings().size() ); assertEquals( "Fatals", numFatals, collector.getFatals().size() ); } - protected void assertCollectorState( int numFatals, int numErrors, int numWarnings, - SimpleProblemCollector collector ) - { - assertColllectorState(numFatals, numErrors, numWarnings, collector); - } - private ModelBuildingRequest createModelBuildingRequest( Properties p ) { ModelBuildingRequest config = new DefaultModelBuildingRequest(); @@ -96,6 +85,7 @@ public abstract class AbstractModelInterpolatorTest return config; } + @Test public void testDefaultBuildTimestampFormatShouldFormatTimeIn24HourFormat() { Calendar cal = Calendar.getInstance(); @@ -121,13 +111,13 @@ public abstract class AbstractModelInterpolatorTest Date secondTestDate = cal.getTime(); - SimpleDateFormat format = - new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT ); + SimpleDateFormat format = new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT ); format.setTimeZone( MavenBuildTimestamp.DEFAULT_BUILD_TIME_ZONE ); assertEquals( "1976-11-11T00:16:00Z", format.format( firstTestDate ) ); assertEquals( "1976-11-11T23:16:00Z", format.format( secondTestDate ) ); } + @Test public void testDefaultBuildTimestampFormatWithLocalTimeZoneMidnightRollover() { Calendar cal = Calendar.getInstance(); @@ -146,15 +136,14 @@ public abstract class AbstractModelInterpolatorTest Date secondTestDate = cal.getTime(); - SimpleDateFormat format = - new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT ); + SimpleDateFormat format = new SimpleDateFormat( MavenBuildTimestamp.DEFAULT_BUILD_TIMESTAMP_FORMAT ); format.setTimeZone( MavenBuildTimestamp.DEFAULT_BUILD_TIME_ZONE ); assertEquals( "2014-06-15T23:16:00Z", format.format( firstTestDate ) ); assertEquals( "2014-11-16T00:16:00Z", format.format( secondTestDate ) ); } - public void testShouldNotThrowExceptionOnReferenceToNonExistentValue() - throws Exception + @Test + public void testShouldNotThrowExceptionOnReferenceToNonExistentValue() throws Exception { Model model = new Model(); @@ -166,15 +155,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + collector ); - assertProblemFree( collector ); + assertProblemFree( collector ); assertEquals( "${test}/somepath", out.getScm().getConnection() ); } - public void testShouldThrowExceptionOnRecursiveScmConnectionReference() - throws Exception + @Test + public void testShouldThrowExceptionOnRecursiveScmConnectionReference() throws Exception { Model model = new Model(); @@ -183,22 +172,15 @@ public abstract class AbstractModelInterpolatorTest model.setScm( scm ); - try - { - ModelInterpolator interpolator = createInterpolator(); + ModelInterpolator interpolator = createInterpolator(); - final SimpleProblemCollector collector = new SimpleProblemCollector(); - interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector ); - assertCollectorState( 0, 1, 0, collector ); - } - catch ( Exception e ) - { - - } + final SimpleProblemCollector collector = new SimpleProblemCollector(); + interpolator.interpolateModel( model, null, createModelBuildingRequest( context ), collector ); + assertCollectorState( 0, 1, 0, collector ); } - public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression() - throws Exception + @Test + public void testShouldNotThrowExceptionOnReferenceToValueContainingNakedExpression() throws Exception { Model model = new Model(); @@ -212,16 +194,16 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + collector ); - assertProblemFree( collector ); + assertProblemFree( collector ); assertEquals( "test/somepath", out.getScm().getConnection() ); } - public void testShouldInterpolateOrganizationNameCorrectly() - throws Exception + @Test + public void shouldInterpolateOrganizationNameCorrectly() throws Exception { String orgName = "MyCo"; @@ -235,15 +217,14 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), - new SimpleProblemCollector() ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + new SimpleProblemCollector() ); assertEquals( orgName + " Tools", out.getName() ); } - public void testShouldInterpolateDependencyVersionToSetSameAsProjectVersion() - throws Exception + @Test + public void shouldInterpolateDependencyVersionToSetSameAsProjectVersion() throws Exception { Model model = new Model(); model.setVersion( "3.8.1" ); @@ -256,15 +237,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); - assertCollectorState(0, 0, 1, collector ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + collector ); + assertCollectorState( 0, 0, 1, collector ); assertEquals( "3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() ); } - public void testShouldNotInterpolateDependencyVersionWithInvalidReference() - throws Exception + @Test + public void testShouldNotInterpolateDependencyVersionWithInvalidReference() throws Exception { Model model = new Model(); model.setVersion( "3.8.1" ); @@ -292,15 +273,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + collector ); assertProblemFree( collector ); assertEquals( "${something}", ( out.getDependencies().get( 0 ) ).getVersion() ); } - public void testTwoReferences() - throws Exception + @Test + public void testTwoReferences() throws Exception { Model model = new Model(); model.setVersion( "3.8.1" ); @@ -314,15 +295,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + Model out = interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), + collector ); assertCollectorState( 0, 0, 2, collector ); assertEquals( "foo-3.8.1", ( out.getDependencies().get( 0 ) ).getVersion() ); } - public void testBasedir() - throws Exception + @Test + public void testBasedir() throws Exception { Model model = new Model(); model.setVersion( "3.8.1" ); @@ -343,8 +324,8 @@ public abstract class AbstractModelInterpolatorTest assertEquals( "file://localhost/myBasedir/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() ); } - public void testBaseUri() - throws Exception + @Test + public void testBaseUri() throws Exception { Model model = new Model(); model.setVersion( "3.8.1" ); @@ -365,10 +346,10 @@ public abstract class AbstractModelInterpolatorTest assertEquals( "myBaseUri/temp-repo", ( out.getRepositories().get( 0 ) ).getUrl() ); } - public void testEnvars() - throws Exception + @Test + public void testEnvars() throws Exception { - Properties context = new Properties(); + Properties context = new Properties(); context.put( "env.HOME", "/path/to/home" ); @@ -383,15 +364,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + 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 + @Test + public void envarExpressionThatEvaluatesToNullReturnsTheLiteralString() throws Exception { Model model = new Model(); @@ -404,15 +385,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + 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 + @Test + public void expressionThatEvaluatesToNullReturnsTheLiteralString() throws Exception { Model model = new Model(); @@ -425,15 +406,15 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model out = - interpolator.interpolateModel( model, new File( "." ), createModelBuildingRequest( context ), collector ); + 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 + @Test + public void shouldInterpolateSourceDirectoryReferencedFromResourceDirectoryCorrectly() throws Exception { Model model = new Model(); @@ -472,8 +453,8 @@ public abstract class AbstractModelInterpolatorTest assertEquals( build.getSourceDirectory(), resIt.next().getDirectory() ); } - public void testShouldInterpolateUnprefixedBasedirExpression() - throws Exception + @Test + public void shouldInterpolateUnprefixedBasedirExpression() throws Exception { File basedir = new File( "/test/path" ); Model model = new Model(); @@ -485,21 +466,57 @@ public abstract class AbstractModelInterpolatorTest ModelInterpolator interpolator = createInterpolator(); final SimpleProblemCollector collector = new SimpleProblemCollector(); - Model result = interpolator.interpolateModel( model, basedir, createModelBuildingRequest( context ), collector ); - assertProblemFree( collector ); + Model result = interpolator.interpolateModel( model, basedir, createModelBuildingRequest( context ), + collector ); + assertProblemFree( collector ); List rDeps = result.getDependencies(); assertNotNull( rDeps ); assertEquals( 1, rDeps.size() ); assertEquals( new File( basedir, "artifact.jar" ).getAbsolutePath(), - new File( rDeps.get( 0 ).getSystemPath() ).getAbsolutePath() ); + new File( rDeps.get( 0 ).getSystemPath() ).getAbsolutePath() ); } - protected abstract ModelInterpolator createInterpolator( PathTranslator translator ) - throws Exception; + @Test + public void testRecursiveExpressionCycleNPE() throws Exception + { + Properties props = new Properties(); + props.setProperty( "aa", "${bb}" ); + props.setProperty( "bb", "${aa}" ); + DefaultModelBuildingRequest request = new DefaultModelBuildingRequest(); - protected abstract ModelInterpolator createInterpolator() - throws Exception; + Model model = new Model(); + model.setProperties( props ); + + SimpleProblemCollector collector = new SimpleProblemCollector(); + ModelInterpolator interpolator = createInterpolator(); + interpolator.interpolateModel( model, null, request, collector ); + + assertCollectorState( 0, 2, 0, collector ); + assertTrue( collector.getErrors().get( 0 ).contains( "Detected the following recursive expression cycle" ) ); + } + + @Test + public void testRecursiveExpressionCycleBaseDir() throws Exception + { + Properties props = new Properties(); + props.setProperty( "basedir", "${basedir}" ); + DefaultModelBuildingRequest request = new DefaultModelBuildingRequest(); + + Model model = new Model(); + model.setProperties( props ); + + SimpleProblemCollector collector = new SimpleProblemCollector(); + ModelInterpolator interpolator = createInterpolator(); + interpolator.interpolateModel( model, null, request, collector ); + + assertCollectorState( 0, 1, 0, collector ); + assertEquals( + "Resolving expression: '${basedir}': Detected the following recursive expression cycle in 'basedir': [basedir]", + collector.getErrors().get( 0 ) ); + } + + protected abstract ModelInterpolator createInterpolator() throws Exception; } diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java index 479f68172f..3672c202c4 100644 --- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java +++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java @@ -25,6 +25,7 @@ import org.apache.maven.model.Model; import org.apache.maven.model.building.DefaultModelBuildingRequest; import org.apache.maven.model.building.ModelBuildingRequest; import org.apache.maven.model.building.SimpleProblemCollector; +import org.junit.Test; import java.io.File; import java.lang.reflect.Field; @@ -37,6 +38,8 @@ import java.util.concurrent.FutureTask; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; /** * StringSearchModelInterpolatorTest - not in use @@ -48,28 +51,19 @@ import static org.hamcrest.MatcherAssert.assertThat; public class StringSearchModelInterpolatorTest extends AbstractModelInterpolatorTest { - - protected ModelInterpolator interpolator; - @Override - protected void setUp() - throws Exception + public void setUp() { super.setUp(); interpolator = new StringSearchModelInterpolator(); } - - protected ModelInterpolator createInterpolator( org.apache.maven.model.path.PathTranslator translator ) - { - return this.interpolator; - } - protected ModelInterpolator createInterpolator() { return this.interpolator; } + @Test public void testInterpolateStringArray() { Model model = new Model(); @@ -99,6 +93,7 @@ public class StringSearchModelInterpolatorTest return config; } + @Test public void testInterpolateObjectWithStringArrayField() { Model model = new Model(); @@ -123,6 +118,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value2", obj.values[1] ); } + @Test public void testInterpolateObjectWithStringListField() { Model model = new Model(); @@ -149,6 +145,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value2", obj.values.get( 1 ) ); } + @Test public void testInterpolateObjectWithStringListFieldAndOneLiteralValue() { Model model = new Model(); @@ -175,6 +172,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value2", obj.values.get( 1 ) ); } + @Test public void testInterpolateObjectWithUnmodifiableStringListField() { Model model = new Model(); @@ -198,6 +196,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "${key}", obj.values.get( 0 ) ); } + @Test public void testInterpolateObjectWithStringArrayListField() { Model model = new Model(); @@ -228,6 +227,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value4", ( (String[]) obj.values.get( 1 ) )[1] ); } + @Test public void testInterpolateObjectWithStringToStringMapField() { Model model = new Model(); @@ -254,6 +254,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value2", obj.values.get( "key2" ) ); } + @Test public void testInterpolateObjectWithStringToStringMapFieldAndOneLiteralValue() { Model model = new Model(); @@ -280,6 +281,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value2", obj.values.get( "key2" ) ); } + @Test public void testInterpolateObjectWithUnmodifiableStringToStringMapField() { Model model = new Model(); @@ -303,6 +305,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "${key}", obj.values.get( "key" ) ); } + @Test public void testInterpolateObjectWithStringToStringArrayMapField() { Model model = new Model(); @@ -333,6 +336,7 @@ public class StringSearchModelInterpolatorTest assertEquals( "value4", ( (String[]) obj.values.get( "key2" ) )[1] ); } + @Test public void testInterpolateObjectWithPomFile() throws Exception { @@ -364,6 +368,7 @@ public class StringSearchModelInterpolatorTest ) ) ); } + @Test public void testNotInterpolateObjectWithFile() throws Exception { @@ -411,6 +416,7 @@ public class StringSearchModelInterpolatorTest return (Map, ?>) field.get( null ); } + @Test public void testNotInterpolateFile() throws Exception { @@ -438,6 +444,7 @@ public class StringSearchModelInterpolatorTest } + @Test public void testConcurrentInterpolation() throws Exception { @@ -452,7 +459,6 @@ public class StringSearchModelInterpolatorTest final StringSearchModelInterpolator interpolator = (StringSearchModelInterpolator) createInterpolator(); - int numItems = 100; final CountDownLatch countDownLatch = new CountDownLatch(1); @@ -497,7 +503,6 @@ public class StringSearchModelInterpolatorTest return new ObjectWithMixedProtection( values, values2, values3, "${key5}" ); } - private static final class ObjectWithStringArrayField { private final String[] values; @@ -567,6 +572,7 @@ public class StringSearchModelInterpolatorTest } } + @Test public void testFinalFieldsExcludedFromInterpolation() { Properties props = new Properties(); @@ -578,7 +584,7 @@ public class StringSearchModelInterpolatorTest StringSearchModelInterpolator interpolator = new StringSearchModelInterpolator(); interpolator.interpolateObject( new ClassWithFinalField(), new Model(), null, request, problems ); - assertProblemFree( problems ); + assertProblemFree( problems ); } static class ClassWithFinalField @@ -586,7 +592,8 @@ public class StringSearchModelInterpolatorTest public static final String CONSTANT = "${expression}"; } - public void testLocationTrackerShouldBeExcludedFromInterpolation() + @Test + public void locationTrackerShouldBeExcludedFromInterpolation() { Properties props = new Properties(); props.setProperty( "expression", "value" ); diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java new file mode 100644 index 0000000000..bd201ed780 --- /dev/null +++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringVisitorModelInterpolatorTest.java @@ -0,0 +1,35 @@ +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. + */ + +public class StringVisitorModelInterpolatorTest extends AbstractModelInterpolatorTest +{ + @Override + public void setUp() + { + super.setUp(); + interpolator = new StringVisitorModelInterpolator(); + } + + protected ModelInterpolator createInterpolator() + { + return this.interpolator; + } +} \ No newline at end of file