Author: jdcasey Date: Tue Sep 16 17:37:20 2008 New Revision: 696113 URL: http://svn.apache.org/viewvc?rev=696113&view=rev Log: [MASSEMBLY-345] Allow archiver instances to be configured from a new parameter in the plugin config within the POM: <archiverConfig>. This will allow <archiverConfig><appxml>somepath</appxml></archiverConfig> to work for EAR format assemblies.
Integration test submitted by: Petar Tahchiev Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt (with props) maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml (with props) maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml (with props) maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml (with props) maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh (with props) maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java (with props) maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java (with props) Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.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/mojos/AbstractAssemblyMojo.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt Tue Sep 16 17:37:20 2008 @@ -0,0 +1,2 @@ +clean +package Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/goals.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml Tue Sep 16 17:37:20 2008 @@ -0,0 +1,33 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.maven.plugin.assembly.test</groupId> + <artifactId>it-project-parent</artifactId> + <version>1</version> + </parent> + + <artifactId>massembly-345</artifactId> + + <build> + <plugins> + <plugin> + <artifactId>maven-assembly-plugin</artifactId> + <configuration> + <archiverConfig> + <appxml>src/main/resources/application.xml</appxml> + </archiverConfig> + <descriptors> + <descriptor>src/assemble/bin.xml</descriptor> + </descriptors> + </configuration> + <executions> + <execution> + <phase>package</phase> + <goals><goal>single</goal></goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/pom.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml Tue Sep 16 17:37:20 2008 @@ -0,0 +1,16 @@ +<assembly> + <id>bin</id> + + <formats> + <format>ear</format> + </formats> + + <includeBaseDirectory>false</includeBaseDirectory> + + <fileSets> + <fileSet> + <directory>src/main/</directory> + </fileSet> + </fileSets> + +</assembly> Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/assemble/bin.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml Tue Sep 16 17:37:20 2008 @@ -0,0 +1 @@ +Test \ No newline at end of file Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/src/main/resources/application.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh Tue Sep 16 17:37:20 2008 @@ -0,0 +1,6 @@ +import java.io.*; + +// verify that the ear is created +result = new File( basedir, "target/massembly-345-1-bin.ear" ).exists(); + +return result; Propchange: maven/plugins/trunk/maven-assembly-plugin/src/it/projects/dependency-sets/massembly-345/verify.bsh ------------------------------------------------------------------------------ svn:eol-style = native Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java?rev=696113&r1=696112&r2=696113&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AssemblerConfigurationSource.java Tue Sep 16 17:37:20 2008 @@ -84,4 +84,6 @@ boolean isIgnoreMissingDescriptor(); MavenSession getMavenSession(); + + String getArchiverConfig(); } Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java?rev=696113&r1=696112&r2=696113&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiver.java Tue Sep 16 17:37:20 2008 @@ -19,6 +19,7 @@ * under the License. */ +import org.apache.maven.plugin.DebugConfigurationListener; import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; import org.apache.maven.plugin.assembly.InvalidAssemblerConfigurationException; import org.apache.maven.plugin.assembly.archive.archiver.AssemblyProxyArchiver; @@ -26,10 +27,13 @@ import org.apache.maven.plugin.assembly.filter.ComponentsXmlArchiverFileFilter; import org.apache.maven.plugin.assembly.filter.ContainerDescriptorHandler; import org.apache.maven.plugin.assembly.format.AssemblyFormattingException; +import org.apache.maven.plugin.assembly.interpolation.AssemblyExpressionEvaluator; import org.apache.maven.plugin.assembly.model.Assembly; import org.apache.maven.plugin.assembly.model.ContainerDescriptorHandlerConfig; import org.apache.maven.plugin.assembly.utils.AssemblyFileUtils; import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverException; import org.codehaus.plexus.archiver.filters.JarSecurityFileSelector; @@ -40,10 +44,23 @@ import org.codehaus.plexus.archiver.tar.TarLongFileMode; import org.codehaus.plexus.archiver.war.WarArchiver; import org.codehaus.plexus.collections.ActiveCollectionManager; +import org.codehaus.plexus.component.configurator.ComponentConfigurationException; +import org.codehaus.plexus.component.configurator.ComponentConfigurator; +import org.codehaus.plexus.component.configurator.ConfigurationListener; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration; +import org.codehaus.plexus.context.Context; +import org.codehaus.plexus.context.ContextException; import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.util.xml.Xpp3DomBuilder; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; import java.io.IOException; +import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -56,7 +73,7 @@ */ public class DefaultAssemblyArchiver extends AbstractLogEnabled - implements AssemblyArchiver + implements AssemblyArchiver, Contextualizable { /** @@ -74,6 +91,8 @@ */ private Map containerDescriptorHandlers; + private PlexusContainer container; + public DefaultAssemblyArchiver() { // needed for plexus @@ -229,18 +248,20 @@ } List extraSelectors = null; + List extraFinalizers = null; if ( archiver instanceof JarArchiver ) { extraSelectors = Collections.singletonList( new JarSecurityFileSelector() ); - } - - List extraFinalizers = null; - if ( "jar".equals( format ) ) - { + extraFinalizers = Collections.singletonList( new ManifestCreationFinalizer( configSource.getProject(), configSource.getJarArchiveConfiguration() ) ); } + + if ( configSource.getArchiverConfig() != null ) + { + configureArchiver( archiver, configSource ); + } String prefix = ""; if ( includeBaseDir ) @@ -253,6 +274,53 @@ return archiver; } + private void configureArchiver( Archiver archiver, AssemblerConfigurationSource configSource ) + throws ArchiverException + { + ComponentConfigurator configurator; + try + { + configurator = (ComponentConfigurator) container.lookup( ComponentConfigurator.ROLE, "basic" ); + } + catch ( ComponentLookupException e ) + { + throw new ArchiverException( "Failed to lookup configurator component for setup of archiver: " + archiver.getClass().getName(), e ); + } + + Xpp3Dom config; + try + { + config = Xpp3DomBuilder.build( new StringReader( configSource.getArchiverConfig() ) ); + } + catch ( XmlPullParserException e ) + { + throw new ArchiverException( "Failed to parse archiver configuration for: " + archiver.getClass().getName(), e ); + } + catch ( IOException e ) + { + throw new ArchiverException( "Failed to parse archiver configuration for: " + archiver.getClass().getName(), e ); + } + + XmlPlexusConfiguration configuration = new XmlPlexusConfiguration( config ); + + ConfigurationListener listener = new DebugConfigurationListener( getLogger() ); + ExpressionEvaluator expressionEvaluator = new AssemblyExpressionEvaluator( configSource ); + + getLogger().debug( "Configuring archiver: '" + archiver.getClass().getName() + "' -->" ); + + try + { + configurator.configureComponent( archiver, configuration, expressionEvaluator, + container.getContainerRealm(), listener ); + } + catch ( ComponentConfigurationException e ) + { + throw new ArchiverException( "Failed to configure archiver: " + archiver.getClass().getName(), e ); + } + + getLogger().debug( "-- end configuration --" ); + } + protected Archiver createWarArchiver() throws NoSuchArchiverException { @@ -300,4 +368,15 @@ return tarArchiver; } + public void contextualize( Context context ) + throws ContextException + { + container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); + } + + protected void setContainer( PlexusContainer container ) + { + this.container = container; + } + } Added: 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=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java Tue Sep 16 17:37:20 2008 @@ -0,0 +1,57 @@ +package org.apache.maven.plugin.assembly.interpolation; + +import java.io.File; + +import org.apache.maven.plugin.assembly.AssemblerConfigurationSource; +import org.apache.maven.plugin.assembly.utils.InterpolationConstants; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator; +import org.codehaus.plexus.interpolation.InterpolationException; +import org.codehaus.plexus.interpolation.Interpolator; +import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor; + +public class AssemblyExpressionEvaluator + implements ExpressionEvaluator +{ + + private final AssemblerConfigurationSource configSource; + private Interpolator interpolator; + private PrefixAwareRecursionInterceptor interceptor; + + public AssemblyExpressionEvaluator( AssemblerConfigurationSource configSource ) + { + this.configSource = configSource; + + interpolator = AssemblyInterpolator.buildInterpolator( configSource.getProject(), configSource ); + interceptor = new PrefixAwareRecursionInterceptor( InterpolationConstants.PROJECT_PREFIXES, true ); + } + + public File alignToBaseDirectory( File f ) + { + String basePath = configSource.getBasedir().getAbsolutePath(); + String path = f.getPath(); + + if ( !f.isAbsolute() && !path.startsWith( basePath ) ) + { + return new File( configSource.getBasedir(), path ); + } + else + { + return f; + } + } + + public Object evaluate( String expression ) + throws ExpressionEvaluationException + { + try + { + return interpolator.interpolate( expression, interceptor ); + } + catch ( InterpolationException e ) + { + throw new ExpressionEvaluationException( "Interpolation failed for archiver expression: " + expression, e ); + } + } + +} Propchange: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluator.java ------------------------------------------------------------------------------ svn:eol-style = native 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=696113&r1=696112&r2=696113&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 Tue Sep 16 17:37:20 2008 @@ -55,6 +55,8 @@ { private static final Set INTERPOLATION_BLACKLIST; + private static final Properties ENVIRONMENT_VARIABLES; + static { Set blacklist = new HashSet(); @@ -64,19 +66,23 @@ blacklist.add( "outputDirectory" ); INTERPOLATION_BLACKLIST = blacklist; - } - - private Properties envars; - - public AssemblyInterpolator( Properties envars ) - { - this.envars = envars; + + Properties environmentVariables; + try + { + environmentVariables = CommandLineUtils.getSystemEnvVars( false ); + } + catch ( IOException e ) + { + environmentVariables = new Properties(); + } + + ENVIRONMENT_VARIABLES = environmentVariables; } public AssemblyInterpolator() throws IOException { - envars = CommandLineUtils.getSystemEnvVars( false ); } public Assembly interpolate( Assembly assembly, MavenProject project, AssemblerConfigurationSource configSource ) @@ -105,6 +111,10 @@ throw new AssemblyInterpolationException( "Failed to interpolate assembly with ID: " + assembly.getId() + ". Reason: " + e.getMessage(), e ); } + finally + { + interpolator.clearAnswers(); + } if ( objectInterpolator.hasWarnings() && getLogger().isDebugEnabled() ) { @@ -129,9 +139,10 @@ return assembly; } - private Interpolator buildInterpolator( MavenProject project, AssemblerConfigurationSource configSource ) + public static Interpolator buildInterpolator( MavenProject project, AssemblerConfigurationSource configSource ) { StringSearchInterpolator interpolator = new StringSearchInterpolator(); + interpolator.setCacheAnswers( true ); MavenSession session = configSource.getMavenSession(); @@ -176,7 +187,7 @@ // 7 interpolator.addValueSource( new PropertiesBasedValueSource( commandLineProperties ) ); - interpolator.addValueSource( new PrefixedPropertiesValueSource( Collections.singletonList( "env." ), envars, + interpolator.addValueSource( new PrefixedPropertiesValueSource( Collections.singletonList( "env." ), ENVIRONMENT_VARIABLES, true ) ); return interpolator; Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java?rev=696113&r1=696112&r2=696113&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/mojos/AbstractAssemblyMojo.java Tue Sep 16 17:37:20 2008 @@ -36,6 +36,8 @@ import org.apache.maven.plugin.assembly.utils.AssemblyFormatUtils; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; +import org.codehaus.plexus.configuration.PlexusConfiguration; +import org.codehaus.plexus.util.xml.Xpp3Dom; import java.io.File; import java.util.Iterator; @@ -284,6 +286,24 @@ * @component */ private AssemblyReader assemblyReader; + + /** + * Allows additional configuration options that are specific to a particular + * type of archive format. This is intended to capture an XML configuration + * that will be used to reflectively setup the options on the archiver instance. + * <br/> + * For instance, to direct an assembly with the "ear" format to use a particular + * appXml file, you should specify the following for the archiverConfig value + * in your plugin configuration: + * <br/> + * <pre> + * <appXml>${project.basedir}/somepath/app.xml</appXml> + * </pre> + * + * @parameter + * @since 2.2-beta-3 + */ + private PlexusConfiguration archiverConfig; /** * Create the binary distribution. @@ -652,5 +672,10 @@ public MavenSession getMavenSession() { return this.mavenSession; } + + public String getArchiverConfig() + { + return archiverConfig == null ? null : archiverConfig.toString(); + } } Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java?rev=696113&r1=696112&r2=696113&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/DefaultAssemblyArchiverTest.java Tue Sep 16 17:37:20 2008 @@ -19,6 +19,7 @@ * under the License. */ +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.phase.AssemblyArchiverPhase; @@ -26,10 +27,15 @@ import org.apache.maven.plugin.assembly.model.Assembly; import org.apache.maven.plugin.assembly.testutils.MockManager; import org.apache.maven.plugin.assembly.testutils.TestFileManager; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.PlexusTestCase; import org.codehaus.plexus.archiver.ArchiveFinalizer; +import org.codehaus.plexus.archiver.ArchivedFileSet; import org.codehaus.plexus.archiver.Archiver; import org.codehaus.plexus.archiver.ArchiverException; +import org.codehaus.plexus.archiver.FileSet; import org.codehaus.plexus.archiver.FinalizerEnabled; +import org.codehaus.plexus.archiver.ResourceIterator; import org.codehaus.plexus.archiver.manager.ArchiverManager; import org.codehaus.plexus.archiver.manager.NoSuchArchiverException; import org.codehaus.plexus.archiver.tar.TarArchiver; @@ -37,6 +43,8 @@ import org.codehaus.plexus.archiver.war.WarArchiver; import org.codehaus.plexus.archiver.zip.ZipArchiver; import org.codehaus.plexus.collections.ActiveCollectionManager; +import org.codehaus.plexus.components.io.resources.PlexusIoResource; +import org.codehaus.plexus.components.io.resources.PlexusIoResourceCollection; import org.codehaus.plexus.logging.Logger; import org.codehaus.plexus.logging.console.ConsoleLogger; import org.codehaus.plexus.util.FileUtils; @@ -49,20 +57,23 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import junit.framework.Assert; import junit.framework.TestCase; public class DefaultAssemblyArchiverTest - extends TestCase + extends PlexusTestCase { private TestFileManager fileManager = new TestFileManager( "def-assy-archiver.test.", "" ); - public void tearDown() throws IOException + public void tearDown() + throws Exception { fileManager.cleanUp(); + super.tearDown(); } public void testCreateArchive() @@ -79,7 +90,7 @@ MockControl phaseControl = MockControl.createControl( AssemblyArchiverPhase.class ); mm.add( phaseControl ); - AssemblyArchiverPhase phase = ( AssemblyArchiverPhase ) phaseControl.getMock(); + AssemblyArchiverPhase phase = (AssemblyArchiverPhase) phaseControl.getMock(); phase.execute( null, null, null ); phaseControl.setMatcher( MockControl.ALWAYS_MATCHER ); @@ -87,7 +98,7 @@ MockControl csControl = MockControl.createControl( AssemblerConfigurationSource.class ); mm.add( csControl ); - AssemblerConfigurationSource configSource = ( AssemblerConfigurationSource ) csControl.getMock(); + AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) csControl.getMock(); File tempDir = fileManager.createTempDir(); FileUtils.deleteDirectory( tempDir ); @@ -123,6 +134,9 @@ configSource.getFinalName(); csControl.setReturnValue( "finalName" ); + + configSource.getArchiverConfig(); + csControl.setReturnValue( null, MockControl.ZERO_OR_MORE ); Assembly assembly = new Assembly(); @@ -135,6 +149,49 @@ mm.verifyAll(); } + public void testCreateArchiver_ShouldConfigureArchiver() + throws NoSuchArchiverException, ArchiverException + { + MockManager mm = new MockManager(); + + MockAndControlForAssemblyArchiver macArchiverManager = new MockAndControlForAssemblyArchiver( mm ); + + TestArchiverWithConfig archiver = new TestArchiverWithConfig(); + + macArchiverManager.expectGetArchiver( "dummy", archiver ); + + MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class ); + AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock(); + + String simpleConfig = "value"; + + configSource.getArchiverConfig(); + configCtl.setReturnValue( "<configuration><simpleConfig>" + simpleConfig + "</simpleConfig></configuration>", MockControl.ZERO_OR_MORE ); + + MavenProject project = new MavenProject( new Model() ); + + configSource.getProject(); + configCtl.setReturnValue( project, MockControl.ZERO_OR_MORE ); + + configSource.getMavenSession(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + + configSource.isDryRun(); + configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE ); + + mm.add( configCtl ); + + mm.replayAll(); + + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + + subject.createArchiver( "dummy", false, "finalName", configSource, null ); + + assertEquals( simpleConfig, archiver.getSimpleConfig() ); + + mm.verifyAll(); + } + public void testCreateArchiver_ShouldCreateTarArchiverWithNoCompression() throws NoSuchArchiverException, ArchiverException { @@ -155,12 +212,20 @@ configSource.isDryRun(); configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE ); + configSource.getArchiverConfig(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + + configSource.getProject(); + configCtl.setReturnValue( new MavenProject( new Model() ), MockControl.ZERO_OR_MORE ); + + configSource.getJarArchiveConfiguration(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + mm.add( configCtl ); mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createArchiver( "tar", false, "finalName", configSource, null ); @@ -187,10 +252,20 @@ configSource.isDryRun(); configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE ); + configSource.getArchiverConfig(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + + configSource.getProject(); + configCtl.setReturnValue( new MavenProject( new Model() ), MockControl.ZERO_OR_MORE ); + + configSource.getJarArchiveConfiguration(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + + mm.add( configCtl ); + mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createArchiver( "war", false, null, configSource, null ); @@ -214,117 +289,121 @@ configSource.isDryRun(); configCtl.setReturnValue( false, MockControl.ZERO_OR_MORE ); + configSource.getArchiverConfig(); + configCtl.setReturnValue( null, MockControl.ZERO_OR_MORE ); + + mm.add( configCtl ); + mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createArchiver( "zip", false, null, configSource, null ); } // TODO: Re-implement these tests on the createArchiver(..) method. For now, they're no big loss. -// public void testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver() -// { -// MockManager mm = new MockManager(); -// -// MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); -// -// macArchiverManager.createArchiver( Archiver.class ); -// -// ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); -// -// mm.replayAll(); -// -// DefaultAssemblyArchiver subject = -// createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); -// -// subject.configureArchiverFinalizers( macArchiverManager.archiver, "format", null, filter ); -// -// mm.verifyAll(); -// } -// -// public void testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver() -// { -// MockManager mm = new MockManager(); -// -// MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); -// -// macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class ); -// -// Set finalizerClasses = new HashSet(); -// finalizerClasses.add( ComponentsXmlArchiverFileFilter.class ); -// finalizerClasses.add( ManifestCreationFinalizer.class ); -// -// macArchiverManager.expectSetArchiverFinalizers( finalizerClasses ); -// -// ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); -// -// MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class ); -// AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock(); -// -// Model model = new Model(); -// model.setGroupId( "group" ); -// model.setArtifactId( "artifact" ); -// model.setVersion( "1" ); -// -// configSource.getProject(); -// configCtl.setReturnValue( new MavenProject( model ), MockControl.ZERO_OR_MORE ); -// -// configSource.getJarArchiveConfiguration(); -// configCtl.setReturnValue( new MavenArchiveConfiguration() ); -// -// mm.add( configCtl ); -// -// mm.replayAll(); -// -// DefaultAssemblyArchiver subject = -// createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); -// -// subject.configureArchiverFinalizers( macArchiverManager.archiver, "jar", configSource, filter ); -// -// mm.verifyAll(); -// } -// -// public void testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver() -// { -// MockManager mm = new MockManager(); -// -// MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); -// -// macArchiverManager.createArchiver( Archiver.class ); -// -// ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); -// -// mm.replayAll(); -// -// DefaultAssemblyArchiver subject = -// createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); -// -// subject.configureArchiverFilters( macArchiverManager.archiver, filter ); -// -// mm.verifyAll(); -// } -// -// public void testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver() -// { -// MockManager mm = new MockManager(); -// -// MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); -// -// macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class ); -// macArchiverManager.expectSetArchiverFilters(); -// -// ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); -// -// mm.replayAll(); -// -// DefaultAssemblyArchiver subject = -// createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); -// -// subject.configureArchiverFilters( macArchiverManager.archiver, filter ); -// -// mm.verifyAll(); -// } + // public void testConfigureArchiverFinalizers_ShouldDoNothingWhenNotSupportedByArchiver() + // { + // MockManager mm = new MockManager(); + // + // MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); + // + // macArchiverManager.createArchiver( Archiver.class ); + // + // ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); + // + // mm.replayAll(); + // + // DefaultAssemblyArchiver subject = + // createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); + // + // subject.configureArchiverFinalizers( macArchiverManager.archiver, "format", null, filter ); + // + // mm.verifyAll(); + // } + // + // public void testConfigureArchiverFinalizers_ShouldAddManifestFinalizerWhenSupportedByArchiver() + // { + // MockManager mm = new MockManager(); + // + // MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); + // + // macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class ); + // + // Set finalizerClasses = new HashSet(); + // finalizerClasses.add( ComponentsXmlArchiverFileFilter.class ); + // finalizerClasses.add( ManifestCreationFinalizer.class ); + // + // macArchiverManager.expectSetArchiverFinalizers( finalizerClasses ); + // + // ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); + // + // MockControl configCtl = MockControl.createControl( AssemblerConfigurationSource.class ); + // AssemblerConfigurationSource configSource = (AssemblerConfigurationSource) configCtl.getMock(); + // + // Model model = new Model(); + // model.setGroupId( "group" ); + // model.setArtifactId( "artifact" ); + // model.setVersion( "1" ); + // + // configSource.getProject(); + // configCtl.setReturnValue( new MavenProject( model ), MockControl.ZERO_OR_MORE ); + // + // configSource.getJarArchiveConfiguration(); + // configCtl.setReturnValue( new MavenArchiveConfiguration() ); + // + // mm.add( configCtl ); + // + // mm.replayAll(); + // + // DefaultAssemblyArchiver subject = + // createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); + // + // subject.configureArchiverFinalizers( macArchiverManager.archiver, "jar", configSource, filter ); + // + // mm.verifyAll(); + // } + // + // public void testConfigureArchiverFilters_ShouldDoNothingWhenNotSupportedByArchiver() + // { + // MockManager mm = new MockManager(); + // + // MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); + // + // macArchiverManager.createArchiver( Archiver.class ); + // + // ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); + // + // mm.replayAll(); + // + // DefaultAssemblyArchiver subject = + // createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); + // + // subject.configureArchiverFilters( macArchiverManager.archiver, filter ); + // + // mm.verifyAll(); + // } + // + // public void testConfigureArchiverFilters_ShouldAddComponentsFilterWhenSupportedByArchiver() + // { + // MockManager mm = new MockManager(); + // + // MockAndControlForArchiverManager macArchiverManager = new MockAndControlForArchiverManager( mm ); + // + // macArchiverManager.createArchiver( TestFinalizerFilteredArchiver.class ); + // macArchiverManager.expectSetArchiverFilters(); + // + // ComponentsXmlArchiverFileFilter filter = new ComponentsXmlArchiverFileFilter(); + // + // mm.replayAll(); + // + // DefaultAssemblyArchiver subject = + // createSubject( macArchiverManager.archiverManager, Collections.EMPTY_LIST, null ); + // + // subject.configureArchiverFilters( macArchiverManager.archiver, filter ); + // + // mm.verifyAll(); + // } public void testCreateWarArchiver_ShouldDisableIgnoreWebxmlOption() throws NoSuchArchiverException @@ -339,8 +418,7 @@ mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createWarArchiver(); @@ -360,8 +438,7 @@ mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createTarArchiver( "tar", TarLongFileMode.FAIL ); @@ -384,8 +461,7 @@ mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createTarArchiver( "tar.gz", TarLongFileMode.FAIL ); @@ -408,8 +484,7 @@ mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); subject.createTarArchiver( "tar.bz2", TarLongFileMode.FAIL ); @@ -432,8 +507,7 @@ mm.replayAll(); - DefaultAssemblyArchiver subject = - createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); + DefaultAssemblyArchiver subject = createSubject( macArchiverManager, Collections.EMPTY_LIST, null ); try { @@ -451,7 +525,10 @@ private DefaultAssemblyArchiver createSubject( MockAndControlForAssemblyArchiver macMgr, List phases, Logger logger ) { - DefaultAssemblyArchiver subject = new DefaultAssemblyArchiver( macMgr.archiverManager, macMgr.collectionManager, phases ); + DefaultAssemblyArchiver subject = + new DefaultAssemblyArchiver( macMgr.archiverManager, macMgr.collectionManager, phases ); + + subject.setContainer( getContainer() ); if ( logger == null ) { @@ -485,7 +562,7 @@ control = MockControl.createControl( ArchiverManager.class ); mm.add( control ); - archiverManager = ( ArchiverManager ) control.getMock(); + archiverManager = (ArchiverManager) control.getMock(); collectionManagerControl = MockControl.createControl( ActiveCollectionManager.class ); mm.add( collectionManagerControl ); @@ -504,18 +581,18 @@ archiverControl = MockControl.createControl( archiverClass ); mm.add( archiverControl ); - archiver = ( Archiver ) archiverControl.getMock(); + archiver = (Archiver) archiverControl.getMock(); } void expectSetArchiverFinalizers() { - ( ( FinalizerEnabled ) archiver ).setArchiveFinalizers( null ); + ( (FinalizerEnabled) archiver ).setArchiveFinalizers( null ); archiverControl.setMatcher( MockControl.ALWAYS_MATCHER ); } void expectSetArchiverFinalizers( final Set finalizerClasses ) { - ( ( FinalizerEnabled ) archiver ).setArchiveFinalizers( null ); + ( (FinalizerEnabled) archiver ).setArchiveFinalizers( null ); archiverControl.setMatcher( new ArgumentsMatcher() { @@ -540,14 +617,14 @@ return "Matcher for finalizer-classes: " + finalizerClasses; } - }); + } ); } -// void expectSetArchiverFilters() -// { -// ( ( FilterEnabled ) archiver ).setArchiveFilters( null ); -// archiverControl.setMatcher( MockControl.ALWAYS_MATCHER ); -// } + // void expectSetArchiverFilters() + // { + // ( ( FilterEnabled ) archiver ).setArchiveFilters( null ); + // archiverControl.setMatcher( MockControl.ALWAYS_MATCHER ); + // } void expectGetArchiver( String format, Class archiverClass ) { @@ -656,4 +733,162 @@ } + public static final class TestArchiverWithConfig + implements Archiver + { + + private String simpleConfig; + + public void setSimpleConfig( String simpleConfig ) + { + this.simpleConfig = simpleConfig; + } + + public String getSimpleConfig() + { + return simpleConfig; + } + + public void addArchivedFileSet( File arg0 ) + throws ArchiverException + { + } + + public void addArchivedFileSet( ArchivedFileSet arg0 ) + throws ArchiverException + { + } + + public void addArchivedFileSet( File arg0, String arg1 ) + throws ArchiverException + { + } + + public void addArchivedFileSet( File arg0, String[] arg1, String[] arg2 ) + throws ArchiverException + { + } + + public void addArchivedFileSet( File arg0, String arg1, String[] arg2, String[] arg3 ) + throws ArchiverException + { + } + + public void addDirectory( File arg0 ) + throws ArchiverException + { + } + + public void addDirectory( File arg0, String arg1 ) + throws ArchiverException + { + } + + public void addDirectory( File arg0, String[] arg1, String[] arg2 ) + throws ArchiverException + { + } + + public void addDirectory( File arg0, String arg1, String[] arg2, String[] arg3 ) + throws ArchiverException + { + } + + public void addFile( File arg0, String arg1 ) + throws ArchiverException + { + } + + public void addFile( File arg0, String arg1, int arg2 ) + throws ArchiverException + { + } + + public void addFileSet( FileSet arg0 ) + throws ArchiverException + { + } + + public void addResource( PlexusIoResource arg0, String arg1, int arg2 ) + throws ArchiverException + { + } + + public void addResources( PlexusIoResourceCollection arg0 ) + throws ArchiverException + { + } + + public void createArchive() + throws ArchiverException, IOException + { + } + + public int getDefaultDirectoryMode() + { + return 0; + } + + public int getDefaultFileMode() + { + return 0; + } + + public File getDestFile() + { + return null; + } + + public Map getFiles() + { + return null; + } + + public boolean getIncludeEmptyDirs() + { + return false; + } + + public ResourceIterator getResources() + throws ArchiverException + { + return null; + } + + public boolean isForced() + { + return false; + } + + public boolean isSupportingForced() + { + return false; + } + + public void setDefaultDirectoryMode( int arg0 ) + { + } + + public void setDefaultFileMode( int arg0 ) + { + } + + public void setDestFile( File arg0 ) + { + } + + public void setDotFileDirectory( File arg0 ) + { + } + + public void setForced( boolean arg0 ) + { + } + + public void setIncludeEmptyDirs( boolean arg0 ) + { + } + + } + } Added: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java?rev=696113&view=auto ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java (added) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java Tue Sep 16 17:37:20 2008 @@ -0,0 +1,173 @@ +package org.apache.maven.plugin.assembly.interpolation; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.util.Properties; + +import junit.framework.TestCase; + +import org.apache.maven.execution.MavenSession; +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.testutils.ConfigSourceStub; +import org.apache.maven.plugin.assembly.testutils.MockManager; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException; +import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.logging.console.ConsoleLogger; +import org.easymock.MockControl; +import org.easymock.classextension.MockClassControl; + +public class AssemblyExpressionEvaluatorTest + extends TestCase +{ + + private AssemblyInterpolator interpolator; + + private ConfigSourceStub configSourceStub = new ConfigSourceStub(); + + public void setUp() + throws IOException + { + interpolator = new AssemblyInterpolator(); + + interpolator.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, "test" ) ); + } + + public void testShouldResolveModelGroupId() + throws ExpressionEvaluationException + { + Model model = new Model(); + model.setArtifactId( "artifact-id" ); + model.setGroupId( "group.id" ); + model.setVersion( "1" ); + model.setPackaging( "jar" ); + + configSourceStub.setProject( new MavenProject( model ) ); + + Object result = new AssemblyExpressionEvaluator( configSourceStub ).evaluate( "assembly.${groupId}" ); + + assertEquals( "assembly.group.id", result ); + } + + public void testShouldResolveModelPropertyBeforeModelGroupId() + throws ExpressionEvaluationException + { + Model model = new Model(); + model.setArtifactId( "artifact-id" ); + model.setGroupId( "group.id" ); + model.setVersion( "1" ); + model.setPackaging( "jar" ); + + Properties props = new Properties(); + props.setProperty( "groupId", "other.id" ); + + model.setProperties( props ); + + configSourceStub.setProject( new MavenProject( model ) ); + + Object result = new AssemblyExpressionEvaluator( configSourceStub ).evaluate( "assembly.${groupId}" ); + + assertEquals( "assembly.other.id", result ); + } + + public void testShouldResolveContextValueBeforeModelPropertyOrModelGroupIdInAssemblyId() + throws ExpressionEvaluationException + { + Model model = new Model(); + model.setArtifactId( "artifact-id" ); + model.setGroupId( "group.id" ); + model.setVersion( "1" ); + model.setPackaging( "jar" ); + + Properties props = new Properties(); + props.setProperty( "groupId", "other.id" ); + + model.setProperties( props ); + + MockManager mm = new MockManager(); + + MockControl sessionControl = MockClassControl.createControl( MavenSession.class ); + MavenSession session = (MavenSession) sessionControl.getMock(); + + mm.add( sessionControl ); + + Properties execProps = new Properties(); + execProps.setProperty( "groupId", "still.another.id" ); + + session.getExecutionProperties(); + sessionControl.setReturnValue( execProps, MockControl.ZERO_OR_MORE ); + + MockControl csControl = MockControl.createControl( AssemblerConfigurationSource.class ); + AssemblerConfigurationSource cs = (AssemblerConfigurationSource) csControl.getMock(); + + mm.add( csControl ); + + cs.getMavenSession(); + csControl.setReturnValue( session, MockControl.ZERO_OR_MORE ); + + cs.getProject(); + csControl.setReturnValue( new MavenProject( model ), MockControl.ZERO_OR_MORE ); + + mm.replayAll(); + + Object result = new AssemblyExpressionEvaluator( cs ).evaluate( "assembly.${groupId}" ); + + assertEquals( "assembly.still.another.id", result ); + + mm.verifyAll(); + mm.clear(); + } + + public void testShouldReturnUnchangedInputForUnresolvedExpression() + throws ExpressionEvaluationException + { + Model model = new Model(); + model.setArtifactId( "artifact-id" ); + model.setGroupId( "group.id" ); + model.setVersion( "1" ); + model.setPackaging( "jar" ); + + configSourceStub.setProject( new MavenProject( model ) ); + + Object result = new AssemblyExpressionEvaluator( configSourceStub ).evaluate( "assembly.${unresolved}" ); + + assertEquals( "assembly.${unresolved}", result ); + } + + public void testShouldInterpolateMultiDotProjectExpression() + throws ExpressionEvaluationException + { + Build build = new Build(); + build.setFinalName( "final-name" ); + + Model model = new Model(); + model.setBuild( build ); + + configSourceStub.setProject( new MavenProject( model ) ); + + Object result = new AssemblyExpressionEvaluator( configSourceStub ).evaluate( "assembly.${project.build.finalName}" ); + + assertEquals( "assembly.final-name", result ); + } + +} Propchange: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyExpressionEvaluatorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java?rev=696113&r1=696112&r2=696113&view=diff ============================================================================== --- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java (original) +++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/testutils/ConfigSourceStub.java Tue Sep 16 17:37:20 2008 @@ -13,6 +13,9 @@ implements AssemblerConfigurationSource { + private String archiverConfig; + private MavenProject project; + public File getArchiveBaseDirectory() { return null; @@ -85,7 +88,7 @@ public MavenProject getProject() { - return null; + return project; } public List getReactorProjects() @@ -142,5 +145,20 @@ { return false; } + + public void setArchiverConfig( String archiverConfig ) + { + this.archiverConfig = archiverConfig; + } + + public String getArchiverConfig() + { + return archiverConfig; + } + + public void setProject( MavenProject mavenProject ) + { + this.project = mavenProject; + } }