You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kr...@apache.org on 2014/12/12 15:57:55 UTC

svn commit: r1644916 - in /maven/plugins/trunk/maven-assembly-plugin: ./ src/it/projects/bugs/massembly-743/ src/main/java/org/apache/maven/plugin/assembly/interpolation/ src/main/java/org/apache/maven/plugin/assembly/io/ src/test/java/org/apache/maven...

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();