You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/04/17 16:46:54 UTC
[maven-assembly-plugin] 01/01: [MASSEMBLY-934] Support
concatenation of files
This is an automated email from the ASF dual-hosted git repository.
rfscholte pushed a commit to branch MASSEMBLY-934
in repository https://gitbox.apache.org/repos/asf/maven-assembly-plugin.git
commit 5ba9b81c27302c582e609a06865cc2e83ab2a047
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Apr 17 18:46:40 2020 +0200
[MASSEMBLY-934] Support concatenation of files
---
pom.xml | 9 +-
.../massembly-934_concat-files/a.properties | 18 +
.../massembly-934_concat-files/invoker.properties | 18 +
src/it/projects/massembly-934_concat-files/pom.xml | 54 +++
.../src/assemble/bin.xml | 40 ++
.../src/config/a/file.txt | 2 +
.../src/config/b/file.txt | 2 +
.../massembly-934_concat-files/verify.groovy | 29 ++
.../archive/phase/FileItemAssemblyPhase.java | 87 ++++-
src/main/mdo/assembly-component.mdo | 12 +
src/main/mdo/assembly.mdo | 14 +-
.../archive/phase/FileItemAssemblyPhaseTest.java | 413 ++++++++-------------
12 files changed, 431 insertions(+), 267 deletions(-)
diff --git a/pom.xml b/pom.xml
index d61916d..0b27d7c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -62,7 +62,7 @@ under the License.
<properties>
<javaVersion>7</javaVersion>
- <mdoVersion>2.0.0</mdoVersion>
+ <mdoVersion>2.1.0</mdoVersion>
<mavenArchiverVersion>3.5.0</mavenArchiverVersion>
<mavenFilteringVersion>3.1.1</mavenFilteringVersion>
<mavenVersion>3.0</mavenVersion>
@@ -199,6 +199,12 @@ under the License.
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>2.28.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<version>2.5.2</version>
@@ -281,7 +287,6 @@ under the License.
<plugin>
<groupId>org.codehaus.modello</groupId>
<artifactId>modello-maven-plugin</artifactId>
- <version>1.8.3</version>
<configuration>
<version>${mdoVersion}</version>
<models>
diff --git a/src/it/projects/massembly-934_concat-files/a.properties b/src/it/projects/massembly-934_concat-files/a.properties
new file mode 100644
index 0000000..aa0aca5
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/a.properties
@@ -0,0 +1,18 @@
+# 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.
+
+testProp=boo
diff --git a/src/it/projects/massembly-934_concat-files/invoker.properties b/src/it/projects/massembly-934_concat-files/invoker.properties
new file mode 100644
index 0000000..2da4fe6
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/invoker.properties
@@ -0,0 +1,18 @@
+# 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.
+
+invoker.goals=org.apache.maven.plugins:maven-assembly-plugin:${testVersion}:single
diff --git a/src/it/projects/massembly-934_concat-files/pom.xml b/src/it/projects/massembly-934_concat-files/pom.xml
new file mode 100644
index 0000000..5cc1857
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/pom.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+
+<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>
+
+ <groupId>org.test</groupId>
+ <artifactId>massembly934</artifactId>
+ <version>1.0</version>
+ <packaging>pom</packaging>
+
+ <url>https://issues.apache.org/jira/browse/MASSEMBLY-934</url>
+
+ <build>
+ <filters>
+ <filter>a.properties</filter>
+ </filters>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <descriptors>
+ <descriptor>src/assemble/bin.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/src/it/projects/massembly-934_concat-files/src/assemble/bin.xml b/src/it/projects/massembly-934_concat-files/src/assemble/bin.xml
new file mode 100644
index 0000000..dd9697d
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/src/assemble/bin.xml
@@ -0,0 +1,40 @@
+<?xml version='1.0'?>
+<!--
+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.
+-->
+
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
+ <id>massembly-934</id>
+ <formats>
+ <format>dir</format>
+ <format>zip</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <files>
+ <file>
+ <sources>
+ <source>src/config/a/file.txt</source>
+ <source>src/config/b/file.txt</source>
+ </sources>
+ <destName>ab.txt</destName>
+ <filtered>true</filtered>
+ </file>
+ </files>
+</assembly>
diff --git a/src/it/projects/massembly-934_concat-files/src/config/a/file.txt b/src/it/projects/massembly-934_concat-files/src/config/a/file.txt
new file mode 100644
index 0000000..7301c3c
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/src/config/a/file.txt
@@ -0,0 +1,2 @@
+file A
+${testProp}
diff --git a/src/it/projects/massembly-934_concat-files/src/config/b/file.txt b/src/it/projects/massembly-934_concat-files/src/config/b/file.txt
new file mode 100644
index 0000000..4b001d2
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/src/config/b/file.txt
@@ -0,0 +1,2 @@
+file B
+${testProp}
diff --git a/src/it/projects/massembly-934_concat-files/verify.groovy b/src/it/projects/massembly-934_concat-files/verify.groovy
new file mode 100644
index 0000000..0e4d987
--- /dev/null
+++ b/src/it/projects/massembly-934_concat-files/verify.groovy
@@ -0,0 +1,29 @@
+
+/*
+ * 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.
+ */
+
+def buildDirectory = new File(basedir, 'target')
+
+def dirFile = new File(buildDirectory, 'massembly934-1.0')
+
+assert new File( dirFile, "ab.txt").readLines() == ['file A','boo','file B','boo']
+
+def zipFile = new java.util.zip.ZipFile(new File(buildDirectory, 'massembly934-1.0.zip'))
+
+assert zipFile.getInputStream(zipFile.entries().next()).readLines() == ['file A','boo','file B','boo']
\ No newline at end of file
diff --git a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
index 4572449..f866ffb 100644
--- a/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
+++ b/src/main/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhase.java
@@ -19,7 +19,20 @@ package org.apache.maven.plugins.assembly.archive.phase;
* under the License.
*/
+import static org.codehaus.plexus.components.io.resources.ResourceFactory.createResource;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.SequenceInputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
+import org.apache.maven.plugins.assembly.InvalidAssemblerConfigurationException;
import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
import org.apache.maven.plugins.assembly.format.ReaderFormatter;
@@ -31,16 +44,12 @@ import org.apache.maven.plugins.assembly.utils.TypeConversionUtils;
import org.codehaus.plexus.archiver.Archiver;
import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.components.io.functions.ContentSupplier;
import org.codehaus.plexus.components.io.functions.InputStreamTransformer;
+import org.codehaus.plexus.components.io.resources.PlexusIoFileResource;
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
import org.codehaus.plexus.logging.AbstractLogEnabled;
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import static org.codehaus.plexus.components.io.resources.ResourceFactory.createResource;
-
/**
* Handles the top-level <files/> section of the assembly descriptor.
*
@@ -58,14 +67,36 @@ public class FileItemAssemblyPhase
@Override
public void execute( final Assembly assembly, final Archiver archiver,
final AssemblerConfigurationSource configSource )
- throws ArchiveCreationException, AssemblyFormattingException
+ throws ArchiveCreationException, AssemblyFormattingException, InvalidAssemblerConfigurationException
{
final List<FileItem> fileList = assembly.getFiles();
final File basedir = configSource.getBasedir();
for ( final FileItem fileItem : fileList )
{
- final String sourcePath = fileItem.getSource();
+ if ( fileItem.getSource() != null ^ fileItem.getSources().isEmpty() )
+ {
+ throw new InvalidAssemblerConfigurationException(
+ "Misconfigured file: one of source or sources must be set" );
+ }
+
+ String destName = fileItem.getDestName();
+
+ final String sourcePath;
+ if ( fileItem.getSource() != null )
+ {
+ sourcePath = fileItem.getSource();
+ }
+ else if ( destName != null )
+ {
+ // because createResource() requires a file
+ sourcePath = fileItem.getSources().get( 0 );
+ }
+ else
+ {
+ throw new InvalidAssemblerConfigurationException(
+ "Misconfigured file: specify destName when using sources" );
+ }
// ensure source file is in absolute path for reactor build to work
File source = new File( sourcePath );
@@ -78,9 +109,6 @@ public class FileItemAssemblyPhase
{
source = new File( basedir, sourcePath );
}
-
- String destName = fileItem.getDestName();
-
if ( destName == null )
{
destName = sourceName;
@@ -115,8 +143,28 @@ public class FileItemAssemblyPhase
final InputStreamTransformer fileSetTransformers =
ReaderFormatter.getFileSetTransformers( configSource, fileItem.isFiltered(),
fileItem.getLineEnding() );
-
- final PlexusIoResource restoUse = createResource( source, fileSetTransformers );
+
+ final PlexusIoResource restoUse;
+ if ( !fileItem.getSources().isEmpty() )
+ {
+ List<InputStream> content = new ArrayList<>( fileItem.getSources().size() );
+ for ( String contentSourcePath : fileItem.getSources() )
+ {
+ File contentSource = new File( contentSourcePath );
+ if ( !AssemblyFileUtils.isAbsolutePath( contentSource ) )
+ {
+ contentSource = new File( basedir, contentSourcePath );
+ }
+ content.add( new FileInputStream( contentSource ) );
+ }
+
+ String name = PlexusIoFileResource.getName( source );
+ restoUse = createResource( source, name, getContentSupplier( content ), fileSetTransformers );
+ }
+ else
+ {
+ restoUse = createResource( source, fileSetTransformers );
+ }
int mode = TypeConversionUtils.modeToInt( fileItem.getFileMode(), getLogger() );
archiver.addResource( restoUse, target, mode );
@@ -133,4 +181,17 @@ public class FileItemAssemblyPhase
{
return 10;
}
+
+ private ContentSupplier getContentSupplier( final Collection<InputStream> contentStreams )
+ {
+ return new ContentSupplier()
+ {
+ @Override
+ public InputStream getContents()
+ throws IOException
+ {
+ return new SequenceInputStream( Collections.enumeration( contentStreams ) );
+ }
+ };
+ }
}
diff --git a/src/main/mdo/assembly-component.mdo b/src/main/mdo/assembly-component.mdo
index 18ae461..32b5f97 100644
--- a/src/main/mdo/assembly-component.mdo
+++ b/src/main/mdo/assembly-component.mdo
@@ -304,6 +304,18 @@
</description>
</field>
<field>
+ <name>sources</name>
+ <version>2.1.0+</version>
+ <description>
+ Set of absolute or relative paths from the module's directory
+ of the files be combined and included in the assembly.
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
<name>outputDirectory</name>
<version>1.0.0+</version>
<type>String</type>
diff --git a/src/main/mdo/assembly.mdo b/src/main/mdo/assembly.mdo
index b8d584d..2b6517f 100644
--- a/src/main/mdo/assembly.mdo
+++ b/src/main/mdo/assembly.mdo
@@ -411,19 +411,31 @@
<description>
A file allows individual file inclusion with the option to change
the destination filename not supported by fileSets.
+ Note: either source or sources is required
</description>
<fields>
<field>
<name>source</name>
<version>1.0.0+</version>
<type>String</type>
- <required>true</required>
<description>
Sets the absolute or relative path from the module's directory
of the file to be included in the assembly.
</description>
</field>
<field>
+ <name>sources</name>
+ <version>2.1.0+</version>
+ <description>
+ Set of absolute or relative paths from the module's directory
+ of the files be combined and included in the assembly.
+ </description>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
<name>outputDirectory</name>
<version>1.0.0+</version>
<type>String</type>
diff --git a/src/test/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhaseTest.java b/src/test/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhaseTest.java
index 3603066..3be332b 100644
--- a/src/test/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhaseTest.java
+++ b/src/test/java/org/apache/maven/plugins/assembly/archive/phase/FileItemAssemblyPhaseTest.java
@@ -19,90 +19,76 @@ package org.apache.maven.plugins.assembly.archive.phase;
* under the License.
*/
-import junit.framework.Assert;
-import junit.framework.TestCase;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Arrays;
+
import org.apache.maven.model.Model;
import org.apache.maven.plugins.assembly.AssemblerConfigurationSource;
-import org.apache.maven.plugins.assembly.archive.ArchiveCreationException;
-import org.apache.maven.plugins.assembly.format.AssemblyFormattingException;
import org.apache.maven.plugins.assembly.model.Assembly;
import org.apache.maven.plugins.assembly.model.FileItem;
-import org.apache.maven.plugins.assembly.testutils.TestFileManager;
import org.apache.maven.plugins.assembly.utils.TypeConversionUtils;
import org.apache.maven.project.MavenProject;
-import org.apache.maven.shared.utils.Os;
import org.codehaus.plexus.archiver.Archiver;
-import org.codehaus.plexus.archiver.ArchiverException;
import org.codehaus.plexus.components.io.resources.PlexusIoResource;
import org.codehaus.plexus.interpolation.fixed.FixedStringSearchInterpolator;
import org.codehaus.plexus.logging.Logger;
import org.codehaus.plexus.logging.console.ConsoleLogger;
-import org.easymock.classextension.EasyMockSupport;
-
-import java.io.File;
-import java.io.IOException;
-
-import static org.easymock.EasyMock.anyInt;
-import static org.easymock.EasyMock.anyObject;
-import static org.easymock.EasyMock.expect;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
public class FileItemAssemblyPhaseTest
- extends TestCase
{
-
- private final TestFileManager fileManager = new TestFileManager( "file-item-phase.test.", "" );
-
- @Override
- public void tearDown()
- throws IOException
- {
- fileManager.cleanUp();
- }
-
+ @Rule
+ public TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ @Test
public void testExecute_ShouldAddNothingWhenNoFileItemsArePresent()
- throws ArchiveCreationException, AssemblyFormattingException
+ throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
-
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- final File basedir = fileManager.createTempDir();
+ final File basedir = temporaryFolder.getRoot();
- macCS.expectGetBasedir( basedir );
+ when( macCS.getBasedir()).thenReturn( basedir );
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+ final Logger macLogger = mock( Logger.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, null, macCS.configSource );
+ createPhase( macLogger ).execute( assembly, null, macCS );
- mm.verifyAll();
+ verify( macCS ).getBasedir();
}
+ @Test
public void testExecute_ShouldAddAbsoluteFileNoFilterNoLineEndingConversion()
- throws ArchiveCreationException, AssemblyFormattingException, IOException
+ throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
-
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
-
- final File basedir = fileManager.createTempDir();
-
- final File file = fileManager.createFile( basedir, "file.txt", "This is a test file." );
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- macCS.expectGetBasedir( basedir );
+ final File basedir = temporaryFolder.getRoot();
- macCS.expectGetProject( new MavenProject( new Model() ) );
+ final File file = temporaryFolder.newFile( "file.txt" );
+ Files.write( file.toPath(), Arrays.asList( "This is a test file." ), StandardCharsets.UTF_8 );
- macCS.expectGetFinalName( "final-name" );
- macCS.expectInterpolators();
+ when( macCS.getBasedir() ).thenReturn( basedir );
+ when( macCS.getProject() ).thenReturn( new MavenProject( new Model() ) );
+ when( macCS.getFinalName() ) .thenReturn( "final-name" );
+ prepareInterpolators( macCS );
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+ final Logger macLogger = mock( Logger.class );
- final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
+ final Archiver macArchiver = mock( Archiver.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
@@ -113,39 +99,36 @@ public class FileItemAssemblyPhaseTest
fi.setLineEnding( "keep" );
fi.setFileMode( "777" );
- macArchiver.expectAddFile( file, "file.txt", TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
- Logger.LEVEL_DEBUG, "test" ) ) );
-
assembly.addFile( fi );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource );
+ createPhase( macLogger ).execute( assembly, macArchiver, macCS );
- mm.verifyAll();
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "file.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
}
+ @Test
public void testExecute_ShouldAddRelativeFileNoFilterNoLineEndingConversion()
- throws ArchiveCreationException, AssemblyFormattingException, IOException
+ throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
+ final File basedir = temporaryFolder.getRoot();
- final File basedir = fileManager.createTempDir();
+ final File file = temporaryFolder.newFile( "file.txt" );
+ Files.write( file.toPath(), Arrays.asList( "This is a test file." ), StandardCharsets.UTF_8 );
- final File file = fileManager.createFile( basedir, "file.txt", "This is a test file." );
+ when( macCS.getBasedir() ).thenReturn( basedir );
+ when( macCS.getProject() ).thenReturn( new MavenProject( new Model() ) );
+ when( macCS.getFinalName() ) .thenReturn( "final-name" );
+ prepareInterpolators( macCS );
- macCS.expectGetBasedir( basedir );
+ final Logger macLogger = mock( Logger.class );
- macCS.expectGetProject( new MavenProject( new Model() ) );
-
- macCS.expectGetFinalName( "final-name" );
- macCS.expectInterpolators();
-
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
-
- final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
+ final Archiver macArchiver = mock( Archiver.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
@@ -156,43 +139,42 @@ public class FileItemAssemblyPhaseTest
fi.setLineEnding( "keep" );
fi.setFileMode( "777" );
- macArchiver.expectAddFile( file, "file.txt", TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
- Logger.LEVEL_DEBUG, "test" ) ) );
-
assembly.addFile( fi );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource );
+ createPhase( macLogger ).execute( assembly, macArchiver, macCS );
- mm.verifyAll();
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "file.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
}
+ @Test
public void testExecute_WithOutputDirectory()
throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
-
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- final File basedir = fileManager.createTempDir();
+ final File basedir = temporaryFolder.getRoot();
- final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
- final File licenseFile =
- fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
- final File configFile =
- fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
+ final File readmeFile = temporaryFolder.newFile( "README.txt" );
+ Files.write( readmeFile.toPath(), Arrays.asList( "This is a test file for README.txt." ), StandardCharsets.UTF_8 );
- macCS.expectGetBasedir( basedir );
+ final File licenseFile = temporaryFolder.newFile( "LICENSE.txt" );
+ Files.write( licenseFile.toPath(), Arrays.asList( "This is a test file for LICENSE.txt." ), StandardCharsets.UTF_8 );
- macCS.expectGetProject( new MavenProject( new Model() ) );
+ final File configFile = new File( temporaryFolder.newFolder( "config" ), "config.txt" );
+ Files.write( configFile.toPath(), Arrays.asList( "This is a test file for config/config.txt" ), StandardCharsets.UTF_8 );
- macCS.expectGetFinalName( "final-name" );
- macCS.expectInterpolators();
+ when( macCS.getBasedir() ).thenReturn( basedir );
+ when( macCS.getProject() ).thenReturn( new MavenProject( new Model() ) );
+ when( macCS.getFinalName() ) .thenReturn( "final-name" );
+ prepareInterpolators( macCS );
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+ final Logger macLogger = mock( Logger.class );
- final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
+ final Archiver macArchiver = mock( Archiver.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
@@ -219,52 +201,55 @@ public class FileItemAssemblyPhaseTest
configFileItem.setLineEnding( "keep" );
configFileItem.setFileMode( "777" );
- macArchiver.expectAddFile( readmeFile, "README.txt", TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
- Logger.LEVEL_DEBUG, "test" ) ) );
- macArchiver.expectAddFile( licenseFile, "LICENSE.txt", TypeConversionUtils.modeToInt( "777", new ConsoleLogger(
- Logger.LEVEL_DEBUG, "test" ) ) );
- macArchiver.expectAddFile( configFile, "config/config.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test" ) ) );
-
assembly.addFile( readmeFileItem );
assembly.addFile( licenseFileItem );
assembly.addFile( configFileItem );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource );
-
- mm.verifyAll();
+ createPhase( macLogger ).execute( assembly, macArchiver, macCS );
+
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "README.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "LICENSE.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "config/config.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+
}
+ @Test
public void testExecute_WithOutputDirectoryAndDestName()
throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
-
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- final File basedir = fileManager.createTempDir();
+ final File basedir = temporaryFolder.getRoot();
- final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
- final File licenseFile =
- fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
- final File configFile =
- fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
+ final File readmeFile = temporaryFolder.newFile( "README.txt" );
+ Files.write( readmeFile.toPath(), Arrays.asList( "This is a test file for README.txt." ), StandardCharsets.UTF_8 );
- macCS.expectGetBasedir( basedir );
+ final File licenseFile = temporaryFolder.newFile( "LICENSE.txt" );
+ Files.write( licenseFile.toPath(), Arrays.asList( "This is a test file for LICENSE.txt." ), StandardCharsets.UTF_8 );
- macCS.expectGetProject( new MavenProject( new Model() ) );
+ final File configFile = new File( temporaryFolder.newFolder( "config" ), "config.txt" );
+ Files.write( configFile.toPath(), Arrays.asList( "This is a test file for config/config.txt" ), StandardCharsets.UTF_8 );
- macCS.expectGetFinalName( "final-name" );
- macCS.expectInterpolators();
+ when( macCS.getBasedir() ).thenReturn( basedir );
+ when( macCS.getProject() ).thenReturn( new MavenProject( new Model() ) );
+ when( macCS.getFinalName() ) .thenReturn( "final-name" );
+ prepareInterpolators( macCS );
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
+ final Logger macLogger = mock( Logger.class );
- final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
+ final Archiver macArchiver = mock( Archiver.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
@@ -294,59 +279,54 @@ public class FileItemAssemblyPhaseTest
configFileItem.setLineEnding( "keep" );
configFileItem.setFileMode( "777" );
- macArchiver.expectAddFile( readmeFile, "README_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test" ) ) );
- macArchiver.expectAddFile( licenseFile, "LICENSE_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test" ) ) );
- macArchiver.expectAddFile( configFile, "config/config_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test"
- ) ) );
-
assembly.addFile( readmeFileItem );
assembly.addFile( licenseFileItem );
assembly.addFile( configFileItem );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource );
-
- mm.verifyAll();
+ createPhase( macLogger ).execute( assembly, macArchiver, macCS );
+
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "README_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "LICENSE_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "config/config_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
}
+ @Test
public void testExecute_WithOutputDirectoryAndDestNameAndIncludeBaseDirectoryFalse()
throws Exception
{
- final EasyMockSupport mm = new EasyMockSupport();
+ final AssemblerConfigurationSource macCS = mock( AssemblerConfigurationSource.class );
- final MockAndControlForConfigSource macCS = new MockAndControlForConfigSource( mm );
+ final File basedir = temporaryFolder.getRoot();
- final File basedir = fileManager.createTempDir();
+ final File readmeFile = temporaryFolder.newFile( "README.txt" );
+ Files.write( readmeFile.toPath(), Arrays.asList( "This is a test file for README.txt." ), StandardCharsets.UTF_8 );
- final File readmeFile = fileManager.createFile( basedir, "README.txt", "This is a test file for README.txt." );
- final File licenseFile =
- fileManager.createFile( basedir, "LICENSE.txt", "This is a test file for LICENSE.txt." );
- final File configFile =
- fileManager.createFile( basedir, "config/config.txt", "This is a test file for config/config.txt" );
+ final File licenseFile = temporaryFolder.newFile( "LICENSE.txt" );
+ Files.write( licenseFile.toPath(), Arrays.asList( "This is a test file for LICENSE.txt." ), StandardCharsets.UTF_8 );
- macCS.expectGetBasedir( basedir );
+ final File configFile = new File( temporaryFolder.newFolder( "config" ), "config.txt" );
+ Files.write( configFile.toPath(), Arrays.asList( "This is a test file for config/config.txt" ), StandardCharsets.UTF_8 );
- macCS.expectGetProject( new MavenProject( new Model() ) );
+ when( macCS.getBasedir() ).thenReturn( basedir );
+ when( macCS.getProject() ).thenReturn( new MavenProject( new Model() ) );
+ when( macCS.getFinalName() ) .thenReturn( "final-name" );
+ prepareInterpolators( macCS );
- macCS.expectGetFinalName( "final-name" );
- macCS.expectInterpolators();
+ final Logger macLogger = mock( Logger.class );
- final MockAndControlForLogger macLogger = new MockAndControlForLogger( mm );
-
- final MockAndControlForArchiver macArchiver = new MockAndControlForArchiver( mm );
+ final Archiver macArchiver = mock( Archiver.class );
final Assembly assembly = new Assembly();
assembly.setId( "test" );
@@ -374,32 +354,27 @@ public class FileItemAssemblyPhaseTest
configFileItem.setLineEnding( "keep" );
configFileItem.setFileMode( "777" );
- macArchiver.expectAddFile( readmeFile, "README_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test" ) ) );
- macArchiver.expectAddFile( licenseFile, "LICENSE_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test" ) ) );
- macArchiver.expectAddFile( configFile, "config/config_renamed.txt", TypeConversionUtils.modeToInt( "777",
- new ConsoleLogger(
- Logger
- .LEVEL_DEBUG,
- "test"
- ) ) );
-
assembly.addFile( readmeFileItem );
assembly.addFile( licenseFileItem );
assembly.addFile( configFileItem );
- mm.replayAll();
-
- createPhase( macLogger.logger ).execute( assembly, macArchiver.archiver, macCS.configSource );
-
- mm.verifyAll();
+ createPhase( macLogger ).execute( assembly, macArchiver, macCS );
+
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "README_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "LICENSE_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
+ verify( macArchiver ).addResource( any( PlexusIoResource.class ),
+ eq( "config/config_renamed.txt" ),
+ eq( TypeConversionUtils.modeToInt( "777",
+ new ConsoleLogger( Logger.LEVEL_DEBUG,
+ "test" ) ) ) );
}
private FileItemAssemblyPhase createPhase( final Logger logger )
@@ -410,75 +385,11 @@ public class FileItemAssemblyPhaseTest
return phase;
}
- private final class MockAndControlForArchiver
- {
- final Archiver archiver;
-
- public MockAndControlForArchiver( final EasyMockSupport mockManager )
- {
- archiver = mockManager.createMock( Archiver.class );
- }
-
- public void expectAddFile( final File file, final String outputLocation, final int fileMode )
- {
- try
- {
- archiver.addResource( (PlexusIoResource) anyObject(), (String) anyObject(), anyInt() );
- }
- catch ( final ArchiverException e )
- {
- Assert.fail( "Should never happen." );
- }
- }
- }
-
- private final class MockAndControlForConfigSource
+ private void prepareInterpolators( AssemblerConfigurationSource configSource )
{
- final AssemblerConfigurationSource configSource;
-
- public MockAndControlForConfigSource( final EasyMockSupport mockManager )
- {
-
- configSource = mockManager.createMock( AssemblerConfigurationSource.class );
-
- expect( configSource.getMavenSession() ).andReturn( null ).anyTimes();
- }
-
- public void expectGetProject( final MavenProject project )
- {
- expect( configSource.getProject() ).andReturn( project ).atLeastOnce();
- }
-
- public void expectGetFinalName( final String finalName )
- {
- expect( configSource.getFinalName() ).andReturn( finalName ).atLeastOnce();
- }
-
- public void expectInterpolators()
- {
- expect( configSource.getCommandLinePropsInterpolator() ).andReturn(
- FixedStringSearchInterpolator.empty() ).anyTimes();
- expect( configSource.getEnvInterpolator() ).andReturn( FixedStringSearchInterpolator.empty() ).anyTimes();
- expect( configSource.getMainProjectInterpolator() ).andReturn(
- FixedStringSearchInterpolator.empty() ).anyTimes();
- }
-
-
- public void expectGetBasedir( final File basedir )
- {
- expect( configSource.getBasedir() ).andReturn( basedir ).atLeastOnce();
- }
- }
-
- private final class MockAndControlForLogger
- {
- final Logger logger;
-
- public MockAndControlForLogger( final EasyMockSupport mockManager )
- {
-
- logger = mockManager.createMock( Logger.class );
- }
+ when( configSource.getCommandLinePropsInterpolator() ).thenReturn( FixedStringSearchInterpolator.empty() );
+ when( configSource.getEnvInterpolator() ).thenReturn( FixedStringSearchInterpolator.empty() );
+ when( configSource.getMainProjectInterpolator() ).thenReturn( FixedStringSearchInterpolator.empty() );
}
}