blob: 968ff66958a4a7db9e607e057fb53c0cc0d4aa26 [file] [log] [blame]
package org.apache.maven.shared.filtering;
/*
* 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.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Properties;
import org.apache.maven.execution.MavenSession;
import org.apache.maven.model.Resource;
import org.apache.maven.settings.Settings;
import org.apache.maven.shared.utils.io.FileUtils;
import org.apache.maven.shared.utils.io.IOUtil;
import org.codehaus.plexus.PlexusTestCase;
import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
import org.codehaus.plexus.interpolation.ValueSource;
/**
* @author Olivier Lamy
* @version $Id$
* @since 1.0-beta-1
*/
public class DefaultMavenResourcesFilteringTest
extends PlexusTestCase
{
File outputDirectory = new File( getBasedir(), "target/DefaultMavenResourcesFilteringTest" );
protected void setUp()
throws Exception
{
super.setUp();
if ( outputDirectory.exists() )
{
FileUtils.forceDelete( outputDirectory );
}
outputDirectory.mkdirs();
}
public void testSimpleFiltering()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
Properties projectProperties = new Properties();
projectProperties.put( "foo", "bar" );
projectProperties.put( "java.version", "zloug" );
mavenProject.setProperties( projectProperties );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
nonFilteredFileExtensions, new StubMavenSession() );
mavenResourcesExecution.setUseDefaultFilterWrappers( true );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
assertFiltering( baseDir, initialImageFile, false, false );
}
public void testSessionFiltering()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/session-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
List<String> filtersFile = new ArrayList<String>();
Settings settings = new Settings();
settings.setLocalRepository( System.getProperty( "localRepository",
System.getProperty( "maven.repo.local",
"/path/to/local/repo" ) ) );
MavenSession session = new StubMavenSession( settings );
MavenResourcesExecution mre = new MavenResourcesExecution();
mre.setResources( resources );
mre.setOutputDirectory( outputDirectory );
mre.setEncoding( "UTF-8" );
mre.setMavenProject( mavenProject );
mre.setFilters( filtersFile );
mre.setNonFilteredFileExtensions( Collections.<String> emptyList() );
mre.setMavenSession( session );
mre.setUseDefaultFilterWrappers( true );
mavenResourcesFiltering.filterResources( mre );
Properties result = new Properties();
FileInputStream in = null;
try
{
in = new FileInputStream( new File( outputDirectory, "session-filter-target.txt" ) );
result.load( in );
in.close();
in = null;
}
finally
{
IOUtil.close( in );
}
assertEquals( settings.getLocalRepository(), result.getProperty( "session.settings.local.repo" ) );
assertEquals( settings.getLocalRepository(), result.getProperty( "settings.local.repo" ) );
assertEquals( settings.getLocalRepository(), result.getProperty( "local.repo" ) );
}
public void testWithMavenResourcesExecution()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
Properties projectProperties = new Properties();
projectProperties.put( "foo", "bar" );
projectProperties.put( "java.version", "zloug" );
mavenProject.setProperties( projectProperties );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
nonFilteredFileExtensions, new StubMavenSession() );
mavenResourcesExecution.setEscapeString( "\\" );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
assertFiltering( baseDir, initialImageFile, true, false );
}
public void testWithMavenResourcesExecutionWithAdditionnalProperties()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
Properties projectProperties = new Properties();
projectProperties.put( "foo", "bar" );
projectProperties.put( "java.version", "zloug" );
mavenProject.setProperties( projectProperties );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
Properties additionalProperties = new Properties();
additionalProperties.put( "greatDate", "1973-06-14" );
additionalProperties.put( "pom.version", "99.00" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
nonFilteredFileExtensions, new StubMavenSession() );
mavenResourcesExecution.setAdditionalProperties( additionalProperties );
mavenResourcesExecution.setEscapeString( "\\" );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
assertFiltering( baseDir, initialImageFile, true, true );
}
private void assertFiltering( File baseDir, File initialImageFile, boolean escapeTest,
boolean additionnalProperties )
throws Exception
{
assertEquals( 7, outputDirectory.listFiles().length );
Properties result = new Properties();
FileInputStream in = null;
try
{
in = new FileInputStream( new File( outputDirectory, "empty-maven-resources-filtering.txt" ) );
result.load( in );
in.close();
in = null;
}
finally
{
IOUtil.close( in );
}
assertTrue( result.isEmpty() );
result = new Properties();
in = null;
try
{
in = new FileInputStream( new File( outputDirectory, "maven-resources-filtering.txt" ) );
result.load( in );
in.close();
in = null;
}
finally
{
IOUtil.close( in );
}
assertFalse( result.isEmpty() );
if ( additionnalProperties )
{
assertEquals( "1973-06-14", result.getProperty( "goodDate" ) );
assertEquals( "99.00", result.get( "version" ) );
}
else
{
assertEquals( "1.0", result.get( "version" ) );
}
assertEquals( "org.apache", result.get( "groupId" ) );
assertEquals( "bar", result.get( "foo" ) );
assertEquals( "${foo.version}", result.get( "fooVersion" ) );
assertEquals( "@@", result.getProperty( "emptyexpression" ) );
assertEquals( "${}", result.getProperty( "emptyexpression2" ) );
assertEquals( System.getProperty( "user.dir" ), result.getProperty( "userDir" ) );
String userDir = result.getProperty( "userDir" );
assertTrue( new File( userDir ).exists() );
assertEquals( new File( System.getProperty( "user.dir" ) ), new File( userDir ) );
assertEquals( System.getProperty( "java.version" ), result.getProperty( "javaVersion" ) );
String userHome = result.getProperty( "userHome" );
assertTrue( "'" + userHome + "' does not exist.", new File( userHome ).exists() );
assertEquals( new File( System.getProperty( "user.home" ) ), new File( userHome ) );
if ( escapeTest )
{
assertEquals( "${java.version}", result.getProperty( "escapeJavaVersion" ) );
assertEquals( "@user.dir@", result.getProperty( "escapeuserDir" ) );
}
assertEquals( baseDir.toString(), result.get( "base" ) );
assertEquals( new File( baseDir.toString() ).getPath(), new File( result.getProperty( "base" ) ).getPath() );
File imageFile = new File( outputDirectory, "happy_duke.gif" );
assertTrue( imageFile.exists() );
// assertEquals( initialImageFile.length(), imageFile.length() );
assertTrue( filesAreIdentical( initialImageFile, imageFile ) );
}
public void testAddingTokens()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
final StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
Properties projectProperties = new Properties();
projectProperties.put( "foo", "bar" );
projectProperties.put( "java.version", "zloug" );
mavenProject.setProperties( projectProperties );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
List<String> nonFilteredFileExtensions = Collections.singletonList( "gif" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", null,
nonFilteredFileExtensions, new StubMavenSession() );
ValueSource vs =
new PrefixedObjectValueSource( mavenResourcesExecution.getProjectStartExpressions(), mavenProject, true );
mavenResourcesExecution.addFilerWrapperWithEscaping( vs, "@", "@", null, false );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
Properties result =
PropertyUtils.loadPropertyFile( new File( outputDirectory, "maven-resources-filtering.txt" ), null );
assertFalse( result.isEmpty() );
assertEquals( mavenProject.getName(), result.get( "pomName" ) );
assertFiltering( baseDir, initialImageFile, false, false );
}
public void testNoFiltering()
throws Exception
{
StubMavenProject mavenProject = new StubMavenProject( new File( getBasedir() ) );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
File initialImageFile = new File( unitFilesDir, "happy_duke.gif" );
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( false );
MavenResourcesExecution mre = new MavenResourcesExecution();
mre.setResources( resources );
mre.setOutputDirectory( outputDirectory );
mre.setEncoding( "UTF-8" );
mre.setMavenProject( mavenProject );
mre.setFilters( null );
mre.setNonFilteredFileExtensions( Collections.<String> emptyList() );
mre.setMavenSession( new StubMavenSession() );
mavenResourcesFiltering.filterResources( mre );
assertEquals( 7, outputDirectory.listFiles().length );
Properties result =
PropertyUtils.loadPropertyFile( new File( outputDirectory, "empty-maven-resources-filtering.txt" ), null );
assertTrue( result.isEmpty() );
result = PropertyUtils.loadPropertyFile( new File( outputDirectory, "maven-resources-filtering.txt" ), null );
assertFalse( result.isEmpty() );
assertEquals( "${pom.version}", result.get( "version" ) );
assertEquals( "${pom.groupId}", result.get( "groupId" ) );
assertEquals( "${foo}", result.get( "foo" ) );
assertEquals( "@@", result.getProperty( "emptyexpression" ) );
assertEquals( "${}", result.getProperty( "emptyexpression2" ) );
File imageFile = new File( outputDirectory, "happy_duke.gif" );
assertTrue( filesAreIdentical( initialImageFile, imageFile ) );
}
public static boolean filesAreIdentical( File expected, File current )
throws IOException
{
if ( expected.length() != current.length() )
{
return false;
}
FileInputStream expectedIn = null;
FileInputStream currentIn = null;
try
{
expectedIn = new FileInputStream( expected );
currentIn = new FileInputStream( current );
byte[] expectedBuffer = IOUtil.toByteArray( expectedIn );
byte[] currentBuffer = IOUtil.toByteArray( currentIn );
if ( expectedBuffer.length != currentBuffer.length )
{
return false;
}
for ( int i = 0, size = expectedBuffer.length; i < size; i++ )
{
if ( expectedBuffer[i] != currentBuffer[i] )
{
return false;
}
}
expectedIn.close();
expectedIn = null;
currentIn.close();
currentIn = null;
}
finally
{
IOUtil.close( expectedIn );
IOUtil.close( currentIn );
}
return true;
}
public void testIncludeOneFile()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addInclude( "includ*" );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] files = outputDirectory.listFiles();
assertEquals( 1, files.length );
assertEquals( "includefile.txt", files[0].getName() );
}
public void testIncludeOneFileAndDirectory()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addInclude( "includ*" );
resource.addInclude( "**/includ*" );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] files = outputDirectory.listFiles();
assertNotNull( files );
assertEquals( 2, files.length );
File includeFile = new File( outputDirectory, "includefile.txt" );
assertTrue( includeFile.exists() );
includeFile = new File( new File( outputDirectory, "includedir" ), "include.txt" );
assertTrue( includeFile.exists() );
}
public void testExcludeOneFile()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addExclude( "*.gif" );
resource.addExclude( "**/excludedir/**" );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] files = outputDirectory.listFiles();
assertEquals( 5, files.length );
File includeFile = new File( outputDirectory, "includefile.txt" );
assertTrue( includeFile.exists() );
includeFile = new File( new File( outputDirectory, "includedir" ), "include.txt" );
assertTrue( includeFile.exists() );
File imageFile = new File( outputDirectory, "happy_duke.gif" );
assertFalse( imageFile.exists() );
File excludeDir = new File( outputDirectory, "excludedir" );
assertFalse( excludeDir.exists() );
}
public void testTargetAbsolutePath()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addInclude( "includ*" );
String targetPath = getBasedir() + "/target/testAbsolutePath/";
File targetPathFile = new File( targetPath );
resource.setTargetPath( targetPathFile.getAbsolutePath() );
if ( !targetPathFile.exists() )
{
targetPathFile.mkdirs();
}
else
{
FileUtils.cleanDirectory( targetPathFile );
}
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] files = targetPathFile.listFiles();
assertEquals( 1, files.length );
assertEquals( "includefile.txt", files[0].getName() );
}
public void testTargetPath()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-resources-filtering";
Resource resource = new Resource();
List<Resource> resources = new ArrayList<Resource>();
resources.add( resource );
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addInclude( "includ*" );
resource.setTargetPath( "testTargetPath" );
List<String> filtersFile = new ArrayList<String>();
filtersFile.add( getBasedir()
+ "/src/test/units-files/maven-resources-filtering/empty-maven-resources-filtering.txt" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File targetPathFile = new File( outputDirectory, "testTargetPath" );
File[] files = targetPathFile.listFiles();
assertEquals( 1, files.length );
assertEquals( "includefile.txt", files[0].getName() );
}
@SuppressWarnings( "serial" )
public void testEmptyDirectories()
throws Exception
{
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
List<Resource> resources = new ArrayList<Resource>();
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/includeEmptyDirs" );
setExcludes( Arrays.asList( "**/.gitignore" ) );
}
} );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8",
Collections.<String> emptyList(), Collections.<String> emptyList(),
new StubMavenSession() );
mavenResourcesExecution.setIncludeEmptyDirs( true );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] childs = outputDirectory.listFiles();
assertNotNull( childs );
assertEquals( 3, childs.length );
for ( File file : childs )
{
if ( file.getName().endsWith( "dir1" ) || file.getName().endsWith( "empty-directory" )
|| file.getName().endsWith( "empty-directory-child" ) )
{
if ( file.getName().endsWith( "dir1" ) )
{
assertEquals( 1, file.list().length );
assertTrue( file.listFiles()[0].getName().endsWith( "foo.txt" ) );
}
if ( file.getName().endsWith( "empty-directory" ) )
{
assertEquals( 0, file.list().length );
}
if ( file.getName().endsWith( "empty-directory-child" ) )
{
assertEquals( 1, file.list().length );
assertTrue( file.listFiles()[0].isDirectory() );
assertEquals( 0, file.listFiles()[0].listFiles().length );
}
}
else
{
fail( "unknow child file found " + file.getName() );
}
}
}
@SuppressWarnings( "serial" )
public void testShouldReturnGitIgnoreFiles()
throws Exception
{
File sourceDirectory = new File( getBasedir(), "/target/sourceTestGitIgnoreFile" );
FileUtils.forceDelete( sourceDirectory );
createTestDataStructure( sourceDirectory );
File outputDirectory = new File( getBasedir(), "/target/testGitIgnoreFile" );
File baseDir = new File( "c:\\foo\\bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
List<Resource> resources = new ArrayList<Resource>();
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/target/sourceTestGitIgnoreFile" );
setIncludes( Arrays.asList( "**/*" ) );
}
} );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, outputDirectory, mavenProject, "UTF-8",
Collections.<String> emptyList(), Collections.<String> emptyList(),
new StubMavenSession() );
mavenResourcesExecution.setIncludeEmptyDirs( true );
mavenResourcesExecution.setAddDefaultExcludes( false );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File[] childs = outputDirectory.listFiles();
assertNotNull( childs );
assertEquals( 3, childs.length );
for ( File file : childs )
{
if ( file.getName().endsWith( "dir1" ) || file.getName().endsWith( "empty-directory" )
|| file.getName().endsWith( "empty-directory-child" ) )
{
if ( file.getName().endsWith( "dir1" ) )
{
assertEquals( 1, file.list().length );
assertTrue( file.listFiles()[0].getName().endsWith( "foo.txt" ) );
}
if ( file.getName().endsWith( "empty-directory" ) )
{
assertEquals( 1, file.list().length );
assertTrue( file.listFiles()[0].getName().endsWith( ".gitignore" ) );
}
if ( file.getName().endsWith( "empty-directory-child" ) )
{
assertEquals( 1, file.list().length );
assertTrue( file.listFiles()[0].isDirectory() );
assertEquals( 1, file.listFiles()[0].listFiles().length );
assertTrue( file.listFiles()[0].listFiles()[0].getName().endsWith( ".gitignore" ) );
}
}
else
{
fail( "unknow child file found " + file.getName() );
}
}
}
/**
* The folder and file structure will be created instead of letting this resource plugin copying the structure which
* will not work.
*
* @param sourceDirectory The source folder where the structure will be created.
* @throws IOException
*/
private void createTestDataStructure( File sourceDirectory )
throws IOException
{
File dir1 = new File( sourceDirectory, "dir1" );
dir1.mkdirs();
FileUtils.fileWrite( new File( dir1, "foo.txt" ), "UTF-8", "This is a Test File" );
File emptyDirectory = new File( sourceDirectory, "empty-directory" );
emptyDirectory.mkdirs();
FileUtils.fileWrite( new File( emptyDirectory, ".gitignore" ), "UTF-8", "# .gitignore file" );
File emptyDirectoryChild = new File( sourceDirectory, "empty-directory-child" );
emptyDirectory.mkdirs();
File emptyDirectoryChildEmptyChild = new File( emptyDirectoryChild, "empty-child" );
emptyDirectoryChildEmptyChild.mkdirs();
FileUtils.fileWrite( new File( emptyDirectoryChildEmptyChild, ".gitignore" ), "UTF-8", "# .gitignore file" );
}
/**
* unit test for MSHARED-81 : https://issues.apache.org/jira/browse/MSHARED-81
*/
@SuppressWarnings( "serial" )
public void testMSHARED81()
throws Exception
{
StubMavenProject mavenProject = new StubMavenProject( new File( "/foo/bar" ) );
mavenProject.setVersion( "1.0" );
mavenProject.addProperty( "escaped", "this is escaped" );
mavenProject.addProperty( "escaped.at", "this is escaped.at" );
mavenProject.addProperty( "foo", "this is foo" );
mavenProject.addProperty( "bar", "this is bar" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
List<Resource> resources = new ArrayList<Resource>();
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/MSHARED-81/resources" );
setFiltering( false );
}
} );
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/MSHARED-81/filtered" );
setFiltering( true );
}
} );
File output = new File( outputDirectory, "MSHARED-81" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, output, mavenProject, "UTF-8", Collections.<String> emptyList(),
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesExecution.setIncludeEmptyDirs( true );
mavenResourcesExecution.setEscapeString( "\\" );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
Properties filteredResult = PropertyUtils.loadPropertyFile( new File( output, "filtered.properties" ), null );
Properties expectedFilteredResult =
PropertyUtils.loadPropertyFile( new File( getBasedir() + "/src/test/units-files/MSHARED-81",
"expected-filtered.properties" ),
null );
assertEquals( expectedFilteredResult, filteredResult );
Properties nonFilteredResult =
PropertyUtils.loadPropertyFile( new File( output, "unfiltered.properties" ), null );
Properties expectedNonFilteredResult =
PropertyUtils.loadPropertyFile( new File( getBasedir() + "/src/test/units-files/MSHARED-81/resources",
"unfiltered.properties" ),
null );
assertTrue( nonFilteredResult.equals( expectedNonFilteredResult ) );
}
/**
* unit test for MRESOURCES-230 : https://issues.apache.org/jira/browse/MRESOURCES-230
*/
public void testCorrectlyEscapesEscapeString()
throws Exception
{
StubMavenProject mavenProject = new StubMavenProject( new File( "/foo/bar" ) );
mavenProject.setVersion( "1.0" );
mavenProject.addProperty( "a", "DONE_A" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
List<Resource> resources = new ArrayList<Resource>();
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/MRESOURCES-230" );
setFiltering( true );
}
} );
resources.get( 0 ).addExclude( "expected.txt" );
File output = new File( outputDirectory, "MRESOURCES-230" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, output, mavenProject, "UTF-8", Collections.<String>emptyList(),
Collections.<String>emptyList(), new StubMavenSession() );
mavenResourcesExecution.setIncludeEmptyDirs( true );
mavenResourcesExecution.setEscapeString( "\\" );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
final String filtered = FileUtils.fileRead( new File( output, "resource.txt" ), "UTF-8" );
final String expected =
FileUtils.fileRead( new File( getBasedir() + "/src/test/units-files/MRESOURCES-230/expected.txt" ) );
assertEquals( expected, filtered );
}
/**
* unit test for edge cases : https://issues.apache.org/jira/browse/MSHARED-228
*/
@SuppressWarnings( "serial" )
public void testEdgeCases()
throws Exception
{
StubMavenProject mavenProject = new StubMavenProject( new File( "/foo/bar" ) );
mavenProject.setVersion( "1.0" );
mavenProject.addProperty( "escaped", "this is escaped" );
mavenProject.addProperty( "escaped.at", "this is escaped.at" );
mavenProject.addProperty( "foo", "this is foo" );
mavenProject.addProperty( "bar", "this is bar" );
mavenProject.addProperty( "domain", "this.is.domain.com" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
List<Resource> resources = new ArrayList<Resource>();
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/edge-cases/resources" );
setFiltering( false );
}
} );
resources.add( new Resource()
{
{
setDirectory( getBasedir() + "/src/test/units-files/edge-cases/filtered" );
setFiltering( true );
}
} );
File output = new File( outputDirectory, "edge-cases" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( resources, output, mavenProject, "UTF-8", Collections.<String> emptyList(),
Collections.<String> emptyList(), new StubMavenSession() );
mavenResourcesExecution.setIncludeEmptyDirs( true );
mavenResourcesExecution.setEscapeString( "\\" );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
Properties filteredResult = PropertyUtils.loadPropertyFile( new File( output, "filtered.properties" ), null );
Properties expectedFilteredResult =
PropertyUtils.loadPropertyFile( new File( getBasedir() + "/src/test/units-files/edge-cases",
"expected-filtered.properties" ),
null );
assertEquals( expectedFilteredResult, filteredResult );
Properties nonFilteredResult =
PropertyUtils.loadPropertyFile( new File( output, "unfiltered.properties" ), null );
Properties expectedNonFilteredResult =
PropertyUtils.loadPropertyFile( new File( getBasedir() + "/src/test/units-files/edge-cases/resources",
"unfiltered.properties" ),
null );
assertTrue( nonFilteredResult.equals( expectedNonFilteredResult ) );
}
// MSHARED-220: Apply filtering to filenames
public void testFilterFileName()
throws Exception
{
File baseDir = new File( "/foo/bar" );
StubMavenProject mavenProject = new StubMavenProject( baseDir );
mavenProject.setVersion( "1.0" );
mavenProject.setGroupId( "org.apache" );
mavenProject.setName( "test project" );
MavenResourcesFiltering mavenResourcesFiltering = lookup( MavenResourcesFiltering.class );
String unitFilesDir = getBasedir() + "/src/test/units-files/maven-filename-filtering";
Resource resource = new Resource();
resource.setDirectory( unitFilesDir );
resource.setFiltering( true );
resource.addInclude( "${pom.version}*" );
resource.setTargetPath( "testTargetPath" );
MavenResourcesExecution mavenResourcesExecution =
new MavenResourcesExecution( Collections.singletonList( resource ), outputDirectory, mavenProject, "UTF-8",
Collections.<String> emptyList(), Collections.<String> emptyList(),
new StubMavenSession() );
mavenResourcesExecution.setFilterFilenames( true );
mavenResourcesFiltering.filterResources( mavenResourcesExecution );
File targetPathFile = new File( outputDirectory, "testTargetPath" );
File[] files = targetPathFile.listFiles();
assertEquals( 1, files.length );
assertEquals( "1.0.txt", files[0].getName() );
}
}