Author: krosenvold Date: Fri Dec 12 14:57:54 2014 New Revision: 1644916 URL: http://svn.apache.org/r1644916 Log: [MASSEMBLY-743] Cannot interpolate boolean values
Fixed with IT. Testcase supplied by Jean-Eric Cuendet. Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/verify.bsh Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/assembly.xml maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/pom.xml maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Fri Dec 12 14:57:54 2014 @@ -250,6 +250,7 @@ under the License. <plugin> <groupId>org.codehaus.modello</groupId> <artifactId>modello-maven-plugin</artifactId> + <version>1.8.3</version> <configuration> <version>${mdoVersion}</version> <models> Modified: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/assembly.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/assembly.xml?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/assembly.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/assembly.xml Fri Dec 12 14:57:54 2014 @@ -24,7 +24,7 @@ under the License. <!-- Generates a zip package containing the needed files --> <formats> - <format>tar.gz</format> + <format>dir</format> </formats> <includeBaseDirectory>${mine.includeBaseDirectory}</includeBaseDirectory> Modified: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/pom.xml?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/pom.xml (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/pom.xml Fri Dec 12 14:57:54 2014 @@ -29,7 +29,6 @@ under the License. <version>1</version> </parent> - <!-- groupId>ch.vd</groupId --> <artifactId>massembly-743</artifactId> <version>1.0.0-SNAPSHOT</version> @@ -69,7 +68,7 @@ under the License. </build> <properties> - <mine.includeBaseDirectory>faXse</mine.includeBaseDirectory> + <mine.includeBaseDirectory>true</mine.includeBaseDirectory> </properties> </project> Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/verify.bsh?rev=1644916&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/verify.bsh (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/bugs/massembly-743/verify.bsh Fri Dec 12 14:57:54 2014 @@ -0,0 +1,44 @@ +/* + * 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 java.io.*; +import java.net.*; +import java.util.zip.*; + + + +boolean result = true; + +try +{ + File zipFile = new File( basedir, "target/massembly-743-1.0.0-SNAPSHOT/massembly-743-1.0.0-SNAPSHOT/folder/README.txt" ); + + if ( !zipFile.exists() ) + { + System.err.println( "incorrect path of file." ); + result = false; + } +} +catch( IOException e ) +{ + e.printStackTrace(); + result = false; +} + +return result; Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java Fri Dec 12 14:57:54 2014 @@ -51,7 +51,7 @@ public class AssemblyExpressionEvaluator final MavenProject project = configSource.getProject(); final FixedStringSearchInterpolator projectInterpolator = DefaultAssemblyReader.createProjectInterpolator( project ); - interpolator = AssemblyInterpolator.buildInterpolator( project, projectInterpolator, configSource ); + interpolator = AssemblyInterpolator.fullInterpolator( project, projectInterpolator, configSource ); interceptor = new PrefixAwareRecursionInterceptor( InterpolationConstants.PROJECT_PREFIXES, true ); } Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java Fri Dec 12 14:57:54 2014 @@ -20,40 +20,31 @@ package org.apache.maven.plugin.assembly */ import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; -import org.apache.maven.plugin.assembly.model.Assembly; +import org.apache.maven.plugin.assembly.model.io.xpp3.AssemblyXpp3Reader; +import org.apache.maven.plugin.assembly.model.io.xpp3.ComponentXpp3Reader; +import org.apache.maven.plugin.assembly.resolved.AssemblyId; import org.apache.maven.plugin.assembly.utils.AssemblyFileUtils; -import org.apache.maven.plugin.assembly.utils.InterpolationConstants; import org.apache.maven.project.MavenProject; -import org.codehaus.plexus.interpolation.InterpolationException; import org.codehaus.plexus.interpolation.InterpolationPostProcessor; -import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor; -import org.codehaus.plexus.interpolation.RecursionInterceptor; import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator; +import org.codehaus.plexus.interpolation.fixed.InterpolationState; import org.codehaus.plexus.interpolation.object.FieldBasedObjectInterpolator; -import org.codehaus.plexus.interpolation.object.ObjectInterpolationWarning; -import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; -import org.codehaus.plexus.util.cli.CommandLineUtils; import javax.annotation.Nonnull; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.List; -import java.util.Properties; import java.util.Set; /** * @version $Id$ */ public class AssemblyInterpolator - extends AbstractLogEnabled { private static final Set<String> INTERPOLATION_BLACKLIST; - private static final Properties ENVIRONMENT_VARIABLES; - static { final Set<String> blacklist = new HashSet<String>(); @@ -63,18 +54,6 @@ public class AssemblyInterpolator blacklist.add( "outputDirectory" ); INTERPOLATION_BLACKLIST = blacklist; - - Properties environmentVariables; - try - { - environmentVariables = CommandLineUtils.getSystemEnvVars( false ); - } - catch ( final IOException e ) - { - environmentVariables = new Properties(); - } - - ENVIRONMENT_VARIABLES = environmentVariables; } public AssemblyInterpolator() @@ -82,84 +61,93 @@ public class AssemblyInterpolator { } - public Assembly interpolate( final Assembly assembly, final MavenProject project, - final AssemblerConfigurationSource configSource, - FixedStringSearchInterpolator projectInterpolator ) - throws AssemblyInterpolationException + public static AssemblyXpp3Reader.ContentTransformer assemblyInterpolator( + final FixedStringSearchInterpolator interpolator, final InterpolationState is, final Logger logger ) { @SuppressWarnings( "unchecked" ) final Set<String> blacklistFields = new HashSet<String>( FieldBasedObjectInterpolator.DEFAULT_BLACKLISTED_FIELD_NAMES ); blacklistFields.addAll( INTERPOLATION_BLACKLIST ); - @SuppressWarnings( "unchecked" ) final Set<String> blacklistPkgs = - FieldBasedObjectInterpolator.DEFAULT_BLACKLISTED_PACKAGE_PREFIXES; - - final FieldBasedObjectInterpolator objectInterpolator = - new FieldBasedObjectInterpolator( blacklistFields, blacklistPkgs ); - - final FixedStringSearchInterpolator interpolator = - buildInterpolator( project, projectInterpolator, configSource ); + return new AssemblyXpp3Reader.ContentTransformer() + { + public String transform( String source, String contextDescription ) + { + if ( blacklistFields.contains( contextDescription ) ) + { + return source; + } + + String interpolated = interpolator.interpolate( source, is ); + if ( !source.equals( interpolated ) && logger.isDebugEnabled()) + { + logger.debug( + "Field" + contextDescription + " value: " + source + " interpolated to: " + interpolated ); + } + return interpolated; + } + }; + } - // TODO: Will this adequately detect cycles between prefixed property references and prefixed project - // references?? - final RecursionInterceptor interceptor = - new PrefixAwareRecursionInterceptor( InterpolationConstants.PROJECT_PREFIXES, true ); + public static ComponentXpp3Reader.ContentTransformer componentInterpolator( + final FixedStringSearchInterpolator interpolator, final InterpolationState is, final Logger logger ) + { + @SuppressWarnings( "unchecked" ) final Set<String> blacklistFields = + new HashSet<String>( FieldBasedObjectInterpolator.DEFAULT_BLACKLISTED_FIELD_NAMES ); + blacklistFields.addAll( INTERPOLATION_BLACKLIST ); - try + return new ComponentXpp3Reader.ContentTransformer() { - objectInterpolator.interpolate( assembly, interpolator.asBasicInterpolator(), interceptor ); - } - catch ( final InterpolationException e ) - { - throw new AssemblyInterpolationException( - "Failed to interpolate assembly with ID: " + assembly.getId() + ". Reason: " + e.getMessage(), e ); - } + public String transform( String source, String contextDescription ) + { + if ( blacklistFields.contains( contextDescription ) ) + { + return source; + } + + String interpolated = interpolator.interpolate( source, is ); + if ( !source.equals( interpolated ) ) + { + logger.debug( + "Field" + contextDescription + " value: " + source + " interpolated to: " + interpolated ); + } + return interpolated; + } + }; + } - if ( objectInterpolator.hasWarnings() && getLogger().isDebugEnabled() ) + + public static void checkErrors( AssemblyId assemblyId, InterpolationState interpolationState, Logger logger ) + { + if ( interpolationState.asList() != null && interpolationState.asList().size() > 0 && logger.isDebugEnabled() ) { final StringBuilder sb = new StringBuilder(); sb.append( "One or more minor errors occurred while interpolating the assembly with ID: " ).append( - assembly.getId() ).append( ":\n" ); + assemblyId ).append( ":\n" ); - @SuppressWarnings( "unchecked" ) final List<ObjectInterpolationWarning> warnings = - objectInterpolator.getWarnings(); - for ( final ObjectInterpolationWarning warning : warnings ) + @SuppressWarnings( "unchecked" ) final List<Object> warnings = interpolationState.asList(); + for ( final Object warning : warnings ) { sb.append( '\n' ).append( warning ); } sb.append( "\n\nThese values were SKIPPED, but the assembly process will continue.\n" ); - getLogger().debug( sb.toString() ); + logger.debug( sb.toString() ); } - - return assembly; } - public static FixedStringSearchInterpolator buildInterpolator( final MavenProject project, - @Nonnull FixedStringSearchInterpolator projectIp, - final AssemblerConfigurationSource configSource ) + public static FixedStringSearchInterpolator fullInterpolator( final MavenProject project, + @Nonnull FixedStringSearchInterpolator projectIp, + final AssemblerConfigurationSource configSource ) { - return FixedStringSearchInterpolator.create( configSource.getRepositoryInterpolator(), - configSource.getCommandLinePropsInterpolator(), - configSource.getEnvInterpolator(), projectIp ).withPostProcessor( + FixedStringSearchInterpolator fixedStringSearchInterpolator = + FixedStringSearchInterpolator.create( configSource.getRepositoryInterpolator(), + configSource.getCommandLinePropsInterpolator(), + configSource.getEnvInterpolator(), projectIp ); + return fixedStringSearchInterpolator.withPostProcessor( new PathTranslatingPostProcessor( project.getBasedir() ) ); - } - - @Override - protected Logger getLogger() - { - Logger logger = super.getLogger(); - - if ( logger == null ) - { - logger = new ConsoleLogger( Logger.LEVEL_INFO, "interpolator-internal" ); - - enableLogging( logger ); - } - return logger; } private static final class PathTranslatingPostProcessor Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReader.java Fri Dec 12 14:57:54 2014 @@ -23,8 +23,6 @@ import org.apache.commons.io.IOUtils; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException; import org.apache.maven.plugin.assembly.interpolation.AssemblyExpressionEvaluator; -import org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolationException; -import org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator; import org.apache.maven.plugin.assembly.model.Assembly; import org.apache.maven.plugin.assembly.model.Component; import org.apache.maven.plugin.assembly.model.ContainerDescriptorHandlerConfig; @@ -36,6 +34,7 @@ import org.apache.maven.plugin.assembly. import org.apache.maven.plugin.assembly.model.io.xpp3.AssemblyXpp3Reader; import org.apache.maven.plugin.assembly.model.io.xpp3.AssemblyXpp3Writer; import org.apache.maven.plugin.assembly.model.io.xpp3.ComponentXpp3Reader; +import org.apache.maven.plugin.assembly.resolved.AssemblyId; import org.apache.maven.plugin.assembly.utils.InterpolationConstants; import org.apache.maven.project.MavenProject; import org.apache.maven.shared.io.location.ClasspathResourceLocatorStrategy; @@ -44,7 +43,10 @@ import org.apache.maven.shared.io.locati import org.apache.maven.shared.io.location.Locator; import org.apache.maven.shared.io.location.LocatorStrategy; import org.apache.maven.shared.utils.ReaderFactory; +import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor; +import org.codehaus.plexus.interpolation.RecursionInterceptor; import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator; +import org.codehaus.plexus.interpolation.fixed.InterpolationState; import org.codehaus.plexus.interpolation.fixed.PrefixedObjectValueSource; import org.codehaus.plexus.interpolation.fixed.PrefixedPropertiesValueSource; import org.codehaus.plexus.logging.AbstractLogEnabled; @@ -66,6 +68,12 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import static org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator.componentInterpolator; +import static org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator.assemblyInterpolator; +import static org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator.fullInterpolator; +import static org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator.checkErrors; + + /** * @version $Id$ */ @@ -315,7 +323,7 @@ public class DefaultAssemblyReader } - protected Assembly readAssembly( final Reader reader, final String locationDescription, final File assemblyDir, + public Assembly readAssembly( final Reader reader, final String locationDescription, final File assemblyDir, final AssemblerConfigurationSource configSource ) throws AssemblyReadException, InvalidAssemblerConfigurationException { @@ -324,17 +332,25 @@ public class DefaultAssemblyReader final MavenProject project = configSource.getProject(); try { - final AssemblyXpp3Reader r = new AssemblyXpp3Reader(); - assembly = r.read( reader ); - - mergeComponentsWithMainAssembly( assembly, assemblyDir, configSource ); - debugPrintAssembly( "Before assembly is interpolated:", assembly ); + InterpolationState is = new InterpolationState(); + final RecursionInterceptor interceptor = + new PrefixAwareRecursionInterceptor( InterpolationConstants.PROJECT_PREFIXES, true ); + is.setRecursionInterceptor( interceptor ); + + FixedStringSearchInterpolator interpolator = + fullInterpolator( project, createProjectInterpolator( project ), configSource ); + AssemblyXpp3Reader.ContentTransformer transformer = assemblyInterpolator( interpolator, is, getLogger() ); - assembly = new AssemblyInterpolator().interpolate( assembly, project, configSource, - createProjectInterpolator( project ) ); + final AssemblyXpp3Reader r = new AssemblyXpp3Reader( transformer ); + assembly = r.read( reader ); + ComponentXpp3Reader.ContentTransformer ctrans = componentInterpolator( interpolator, is, getLogger() ); + mergeComponentsWithMainAssembly( assembly, assemblyDir, configSource, ctrans ); debugPrintAssembly( "After assembly is interpolated:", assembly ); + + checkErrors( AssemblyId.createAssemblyId( assembly ), is, getLogger() ); + } catch ( final IOException e ) { @@ -346,11 +362,6 @@ public class DefaultAssemblyReader throw new AssemblyReadException( "Error reading descriptor: " + locationDescription + ": " + e.getMessage(), e ); } - catch ( final AssemblyInterpolationException e ) - { - throw new AssemblyReadException( "Error reading descriptor: " + locationDescription + ": " + e.getMessage(), - e ); - } finally { IOUtil.close( reader ); @@ -364,6 +375,7 @@ public class DefaultAssemblyReader return assembly; } + public static FixedStringSearchInterpolator createProjectInterpolator( MavenProject project ) { return FixedStringSearchInterpolator.create( @@ -393,10 +405,12 @@ public class DefaultAssemblyReader * * @param assembly The assembly * @param assemblyDir The assembly directory + * @param transformer The component interpolator * @throws AssemblyReadException . */ protected void mergeComponentsWithMainAssembly( final Assembly assembly, final File assemblyDir, - final AssemblerConfigurationSource configSource ) + final AssemblerConfigurationSource configSource, + ComponentXpp3Reader.ContentTransformer transformer ) throws AssemblyReadException { final Locator locator = new Locator(); @@ -439,7 +453,7 @@ public class DefaultAssemblyReader try { reader = new InputStreamReader( resolvedLocation.getInputStream() ); - component = new ComponentXpp3Reader().read( reader ); + component = new ComponentXpp3Reader( transformer ).read( reader ); } catch ( final IOException e ) { Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java Fri Dec 12 14:57:54 2014 @@ -25,7 +25,10 @@ import org.apache.maven.execution.MavenS import org.apache.maven.model.Build; import org.apache.maven.model.Model; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; +import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException; +import org.apache.maven.plugin.assembly.io.AssemblyReadException; import org.apache.maven.plugin.assembly.io.DefaultAssemblyReader; +import org.apache.maven.plugin.assembly.io.DefaultAssemblyReaderTest; import org.apache.maven.plugin.assembly.model.Assembly; import org.apache.maven.plugin.assembly.model.DependencySet; import org.apache.maven.plugin.assembly.testutils.PojoConfigSource; @@ -37,6 +40,7 @@ import org.codehaus.plexus.logging.conso import org.easymock.classextension.EasyMockSupport; import java.io.IOException; +import java.io.StringReader; import java.util.List; import java.util.Properties; @@ -46,21 +50,9 @@ public class AssemblyInterpolatorTest extends TestCase { - private AssemblyInterpolator interpolator; - - private final PojoConfigSource configSourceStub = new PojoConfigSource(); - - @Override - public void setUp() - throws IOException - { - interpolator = new AssemblyInterpolator(); - - interpolator.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ); - } - public void testDependencySetOutputFileNameMappingsAreNotInterpolated() - throws IOException, AssemblyInterpolationException + throws IOException, AssemblyInterpolationException, AssemblyReadException, + InvalidAssemblerConfigurationException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -80,10 +72,14 @@ public class AssemblyInterpolatorTest assembly.addDependencySet( set ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create( ) ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); - final Assembly outputAssembly = interpolator.interpolate( assembly, project, configSourceStub, - createProjectInterpolator( project ) ); + + configSourceStub.setMavenProject( project); + final Assembly outputAssembly = roundTripInterpolation( assembly, configSourceStub ); final List<DependencySet> outputDependencySets = outputAssembly.getDependencySets(); assertEquals( 1, outputDependencySets.size() ); @@ -94,7 +90,8 @@ public class AssemblyInterpolatorTest } public void testDependencySetOutputDirectoryIsNotInterpolated() - throws IOException, AssemblyInterpolationException + throws IOException, AssemblyInterpolationException, AssemblyReadException, + InvalidAssemblerConfigurationException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -111,12 +108,15 @@ public class AssemblyInterpolatorTest assembly.addDependencySet( set ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create() ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); final MavenProject project = new MavenProject( model ); - final Assembly outputAssembly = - interpolator.interpolate( assembly, project, configSourceStub, createProjectInterpolator( project ) ); + configSourceStub.setMavenProject( project); + final Assembly outputAssembly = roundTripInterpolation( assembly, configSourceStub ); final List<DependencySet> outputDependencySets = outputAssembly.getDependencySets(); assertEquals( 1, outputDependencySets.size() ); @@ -126,8 +126,17 @@ public class AssemblyInterpolatorTest assertEquals( "${artifactId}.${packaging}", outputSet.getOutputDirectory() ); } + public Assembly roundTripInterpolation( Assembly assembly, AssemblerConfigurationSource configSource ) + throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException + { + final StringReader stringReader = DefaultAssemblyReaderTest.writeToStringReader( assembly ); + return new DefaultAssemblyReader().readAssembly( stringReader, "testLocation", null, + configSource ); + } + public void testShouldResolveModelGroupIdInAssemblyId() - throws AssemblyInterpolationException + throws AssemblyInterpolationException, InvalidAssemblerConfigurationException, AssemblyReadException, + IOException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -140,16 +149,18 @@ public class AssemblyInterpolatorTest assembly.setId( "assembly.${groupId}" ); final MavenProject project = new MavenProject( model ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create() ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); - final Assembly result = interpolator.interpolate( assembly, project, configSourceStub, - createProjectInterpolator( project ) ); - - assertEquals( "assembly.group.id", result.getId() ); + configSourceStub.setMavenProject( project); + final Assembly outputAssembly = roundTripInterpolation( assembly, configSourceStub ); + assertEquals( "assembly.group.id", outputAssembly.getId() ); } public void testShouldResolveModelPropertyBeforeModelGroupIdInAssemblyId() - throws AssemblyInterpolationException + throws AssemblyInterpolationException, InvalidAssemblerConfigurationException, AssemblyReadException, + IOException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -162,6 +173,8 @@ public class AssemblyInterpolatorTest model.setProperties( props ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create( ) ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); @@ -170,19 +183,15 @@ public class AssemblyInterpolatorTest assembly.setId( "assembly.${groupId}" ); final MavenProject project = new MavenProject( model ); - final Assembly result = interpolator.interpolate( assembly, project, configSourceStub, - createProjectInterpolator( project ) ); + configSourceStub.setMavenProject( project); + final Assembly result = roundTripInterpolation( assembly, configSourceStub ); assertEquals( "assembly.other.id", result.getId() ); } - private FixedStringSearchInterpolator createProjectInterpolator( MavenProject project ) - { - return DefaultAssemblyReader.createProjectInterpolator( project ); - } - public void testShouldResolveContextValueBeforeModelPropertyOrModelGroupIdInAssemblyId() - throws AssemblyInterpolationException + throws AssemblyInterpolationException, InvalidAssemblerConfigurationException, AssemblyReadException, + IOException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -210,25 +219,24 @@ public class AssemblyInterpolatorTest expect( session.getUserProperties()).andReturn( new Properties()).anyTimes(); - final AssemblerConfigurationSource cs = mm.createMock( AssemblerConfigurationSource.class ); + final PojoConfigSource cs = new PojoConfigSource(); final ArtifactRepository lr = mm.createMock( ArtifactRepository.class ); - expect( lr.getBasedir()).andReturn( "/path/to/local/repo").anyTimes(); - - expect(cs.getLocalRepository()).andReturn( lr ).anyTimes(); + cs.setLocalRepository( lr ); + cs.setMavenSession( session ); + cs.setRootInterpolator( FixedStringSearchInterpolator.create() ); + cs.setEnvironmentInterpolator( FixedStringSearchInterpolator.create( + new PropertiesBasedValueSource(execProps) )); + cs.setEnvInterpolator( FixedStringSearchInterpolator.empty() ); - expect( cs.getMavenSession()).andReturn( session ).anyTimes(); - - expect( cs.getRepositoryInterpolator()).andReturn( FixedStringSearchInterpolator.create( ) ).anyTimes(); - expect( cs.getCommandLinePropsInterpolator()).andReturn( FixedStringSearchInterpolator.create( - new PropertiesBasedValueSource(execProps) ) ).anyTimes(); - expect( cs.getEnvInterpolator()).andReturn( FixedStringSearchInterpolator.empty() ).anyTimes(); + expect( lr.getBasedir() ).andReturn( "/path/to/local/repo").anyTimes(); mm.replayAll(); final MavenProject project = new MavenProject( model ); - final Assembly result = interpolator.interpolate( assembly, project, cs, createProjectInterpolator( project ) ); + cs.setMavenProject( project ); + final Assembly result = roundTripInterpolation( assembly, cs ); assertEquals( "assembly.still.another.id", result.getId() ); @@ -237,7 +245,8 @@ public class AssemblyInterpolatorTest } public void testShouldNotTouchUnresolvedExpression() - throws AssemblyInterpolationException + throws AssemblyInterpolationException, InvalidAssemblerConfigurationException, AssemblyReadException, + IOException { final Model model = new Model(); model.setArtifactId( "artifact-id" ); @@ -249,18 +258,21 @@ public class AssemblyInterpolatorTest assembly.setId( "assembly.${unresolved}" ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create( ) ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); - final MavenProject project = new MavenProject( model ); - final Assembly result = interpolator.interpolate( assembly, project, configSourceStub, - createProjectInterpolator( project ) ); + final MavenProject project = new MavenProject( model ); + configSourceStub.setMavenProject( project); + final Assembly result = roundTripInterpolation( assembly, configSourceStub ); assertEquals( "assembly.${unresolved}", result.getId() ); } public void testShouldInterpolateMultiDotProjectExpression() - throws AssemblyInterpolationException + throws AssemblyInterpolationException, InvalidAssemblerConfigurationException, AssemblyReadException, + IOException { final Build build = new Build(); build.setFinalName( "final-name" ); @@ -272,13 +284,14 @@ public class AssemblyInterpolatorTest assembly.setId( "assembly.${project.build.finalName}" ); + final PojoConfigSource configSourceStub = new PojoConfigSource(); + configSourceStub.setRootInterpolator( FixedStringSearchInterpolator.create( ) ); configSourceStub.setEnvironmentInterpolator( FixedStringSearchInterpolator.create() ); final MavenProject project = new MavenProject( model ); - final Assembly result = interpolator.interpolate( assembly, project, configSourceStub, - createProjectInterpolator( project ) ); - + configSourceStub.setMavenProject( project); + final Assembly result = roundTripInterpolation( assembly, configSourceStub ); assertEquals( "assembly.final-name", result.getId() ); } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java?rev=1644916&r1=1644915&r2=1644916&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/io/DefaultAssemblyReaderTest.java Fri Dec 12 14:57:54 2014 @@ -26,6 +26,7 @@ import org.apache.maven.model.Model; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException; import org.apache.maven.plugin.assembly.archive.DefaultAssemblyArchiverTest; +import org.apache.maven.plugin.assembly.interpolation.AssemblyInterpolator; import org.apache.maven.plugin.assembly.model.Assembly; import org.apache.maven.plugin.assembly.model.Component; import org.apache.maven.plugin.assembly.model.ContainerDescriptorHandlerConfig; @@ -34,9 +35,14 @@ import org.apache.maven.plugin.assembly. import org.apache.maven.plugin.assembly.model.FileSet; import org.apache.maven.plugin.assembly.model.Repository; import org.apache.maven.plugin.assembly.model.io.xpp3.AssemblyXpp3Writer; +import org.apache.maven.plugin.assembly.model.io.xpp3.ComponentXpp3Reader; import org.apache.maven.plugin.assembly.model.io.xpp3.ComponentXpp3Writer; import org.apache.maven.plugin.assembly.testutils.TestFileManager; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator; +import org.codehaus.plexus.interpolation.fixed.InterpolationState; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.logging.console.ConsoleLogger; import org.codehaus.plexus.util.IOUtil; import org.easymock.classextension.EasyMockSupport; @@ -66,8 +72,6 @@ public class DefaultAssemblyReaderTest private AssemblerConfigurationSource configSource; - private ArtifactRepository localRepo; - @Override public void setUp() @@ -77,9 +81,9 @@ public class DefaultAssemblyReaderTest configSource = mockManager.createMock(AssemblerConfigurationSource.class); - localRepo = mockManager.createMock( ArtifactRepository.class ); + ArtifactRepository localRepo = mockManager.createMock( ArtifactRepository.class ); - expect(localRepo.getBasedir()).andReturn("/path/to/local/repo").anyTimes(); + expect( localRepo.getBasedir()).andReturn("/path/to/local/repo").anyTimes(); expect(configSource.getLocalRepository()).andReturn( localRepo ).anyTimes(); expect( configSource.getRemoteRepositories()).andReturn( Collections.<ArtifactRepository>emptyList()).anyTimes(); expect(configSource.getMavenSession()).andReturn( null).anyTimes(); @@ -494,10 +498,14 @@ public class DefaultAssemblyReaderTest expect( configSource.getProject()).andReturn( project ).anyTimes(); expect( configSource.getBasedir()).andReturn( basedir ).anyTimes(); DefaultAssemblyArchiverTest.setupInterpolators( configSource ); + InterpolationState is = new InterpolationState(); + ComponentXpp3Reader.ContentTransformer componentIp = AssemblyInterpolator.componentInterpolator( + FixedStringSearchInterpolator.create(), is, new ConsoleLogger( Logger.LEVEL_DEBUG, "console" ) ); + mockManager.replayAll(); - new DefaultAssemblyReader().mergeComponentsWithMainAssembly( assembly, null, configSource ); + new DefaultAssemblyReader().mergeComponentsWithMainAssembly( assembly, null, configSource, componentIp ); final List<FileSet> fileSets = assembly.getFileSets(); @@ -517,12 +525,7 @@ public class DefaultAssemblyReaderTest final Assembly assembly = new Assembly(); assembly.setId( "test" ); - final StringWriter sw = new StringWriter(); - final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); - - assemblyWriter.write( sw, assembly ); - - final StringReader sr = new StringReader( sw.toString() ); + final StringReader sr = writeToStringReader( assembly ); final File basedir = fileManager.createTempDir(); @@ -557,12 +560,7 @@ public class DefaultAssemblyReaderTest assembly.setIncludeSiteDirectory( true ); - final StringWriter sw = new StringWriter(); - final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); - - assemblyWriter.write( sw, assembly ); - - final StringReader sr = new StringReader( sw.toString() ); + final StringReader sr = writeToStringReader( assembly ); final File siteDir = fileManager.createTempDir(); @@ -606,12 +604,7 @@ public class DefaultAssemblyReaderTest final Assembly assembly = new Assembly(); assembly.setId( "test" ); - final StringWriter sw = new StringWriter(); - final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); - - assemblyWriter.write( sw, assembly ); - - final StringReader sr = new StringReader( sw.toString() ); + final StringReader sr = writeToStringReader( assembly ); final File siteDir = fileManager.createTempDir(); @@ -681,12 +674,7 @@ public class DefaultAssemblyReaderTest assembly.addComponentDescriptor( componentsFilename ); - final StringWriter sw = new StringWriter(); - final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); - - assemblyWriter.write( sw, assembly ); - - final StringReader sr = new StringReader( sw.toString() ); + final StringReader sr = writeToStringReader( assembly ); expect( configSource.getBasedir()).andReturn( basedir ).anyTimes(); @@ -749,12 +737,7 @@ public class DefaultAssemblyReaderTest assembly.addComponentDescriptor( componentsFilename ); - final StringWriter sw = new StringWriter(); - final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); - - assemblyWriter.write( sw, assembly ); - - final StringReader sr = new StringReader( sw.toString() ); + final StringReader sr = writeToStringReader( assembly ); expect( configSource.getBasedir()).andReturn( basedir ).atLeastOnce(); @@ -786,18 +769,24 @@ public class DefaultAssemblyReaderTest mockManager.verifyAll(); } - public void testReadAssembly_ShouldReadAssemblyWithInterpolationWithoutComponentsOrSiteDirInclusion() - throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException + public static StringReader writeToStringReader( Assembly assembly ) + throws IOException { - final Assembly assembly = new Assembly(); - assembly.setId( "${groupId}-assembly" ); - final StringWriter sw = new StringWriter(); final AssemblyXpp3Writer assemblyWriter = new AssemblyXpp3Writer(); assemblyWriter.write( sw, assembly ); - final StringReader sr = new StringReader( sw.toString() ); + return new StringReader( sw.toString() ); + } + + public void testReadAssembly_ShouldReadAssemblyWithInterpolationWithoutComponentsOrSiteDirInclusion() + throws IOException, AssemblyReadException, InvalidAssemblerConfigurationException + { + final Assembly assembly = new Assembly(); + assembly.setId( "${groupId}-assembly" ); + + final StringReader sr = writeToStringReader( assembly ); final File basedir = fileManager.createTempDir();