o adding tests for the new incremental mode
Submitted by: Igor Fedorenko
git-svn-id: https://svn.apache.org/repos/asf/maven/shared/trunk@744576 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
new file mode 100644
index 0000000..50a3de4
--- /dev/null
+++ b/src/test/java/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.java
@@ -0,0 +1,166 @@
+package org.apache.maven.shared.filtering;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.maven.model.Resource;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.sonatype.plexus.build.incremental.ThreadBuildContext;
+import org.sonatype.plexus.build.incremental.test.TestIncrementalBuildContext;
+
+public class IncrementalResourceFilteringTest
+ extends PlexusTestCase
+{
+
+ File outputDirectory = new File( getBasedir(), "target/IncrementalResourceFilteringTest" );
+
+ String unitDirectory = getBasedir() + "/src/test/units-files/incremental";
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ if ( outputDirectory.exists() )
+ {
+ FileUtils.forceDelete( outputDirectory );
+ }
+ outputDirectory.mkdirs();
+ }
+
+ public void testSimpleIncrementalFiltering()
+ throws Exception
+ {
+ // run full build first
+ filter( "time" );
+
+ assertTime( "time", "file01.txt" );
+ assertTime( "time", "file02.txt" );
+
+ // only one file is expected to change
+ HashSet changedFiles = new HashSet();
+ changedFiles.add( "file01.txt" );
+
+ TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( new File(unitDirectory), changedFiles, new HashMap() );
+ ThreadBuildContext.setThreadBuildContext( ctx );
+
+ filter( "notime" );
+ assertTime( "notime", "file01.txt" );
+ assertTime( "time", "file02.txt" ); // this one is unchanged
+
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file01.txt") ) );
+
+ // one file is expected to be deleted
+ HashSet deletedFiles = new HashSet();
+ deletedFiles.add( "file01.txt" );
+
+ ctx = new TestIncrementalBuildContext( new File(unitDirectory), new HashSet(), changedFiles, new HashMap() );
+ ThreadBuildContext.setThreadBuildContext( ctx );
+
+ filter( "moretime" );
+ assertFalse( new File( outputDirectory, "file01.txt" ).exists() );
+ assertTime( "time", "file02.txt" ); // this one is unchanged
+
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file01.txt") ) );
+
+ }
+
+ public void testFilterChange()
+ throws Exception
+ {
+ // run full build first
+ filter( "time" );
+
+ // all files are reprocessed after content of filters changes
+ HashSet changedFiles = new HashSet();
+ changedFiles.add( "filters.txt" );
+ TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( new File(unitDirectory), changedFiles, new HashMap() );
+ ThreadBuildContext.setThreadBuildContext( ctx );
+
+ filter( "notime" );
+ assertTime( "notime", "file01.txt" );
+ assertTime( "notime", "file02.txt" );
+
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file01.txt") ) );
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file02.txt") ) );
+
+ }
+
+ public void testFilterDeleted()
+ throws Exception
+ {
+ // run full build first
+ filter( "time" );
+
+ // all files are reprocessed after content of filters changes
+ HashSet deletedFiles = new HashSet();
+ deletedFiles.add( "filters.txt" );
+ TestIncrementalBuildContext ctx = new TestIncrementalBuildContext( new File(unitDirectory), new HashSet(), deletedFiles, new HashMap() );
+ ThreadBuildContext.setThreadBuildContext( ctx );
+
+ filter( "notime" );
+ assertTime( "notime", "file01.txt" );
+ assertTime( "notime", "file02.txt" );
+
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file01.txt") ) );
+ assertTrue( ctx.getRefreshFiles().contains( new File(outputDirectory, "file02.txt") ) );
+ }
+
+ private void assertTime( String time, String relpath )
+ throws IOException
+ {
+ Properties properties = new Properties();
+
+ InputStream is = new FileInputStream( new File( outputDirectory, relpath ) );
+ try
+ {
+ properties.load( is );
+ }
+ finally
+ {
+ IOUtil.close( is );
+ }
+
+ assertEquals( time, properties.getProperty( "time" ) );
+ }
+
+ private void filter( String time )
+ throws Exception, MavenFilteringException
+ {
+ 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( "time", time );
+ projectProperties.put( "java.version", "zloug" );
+ mavenProject.setProperties( projectProperties );
+ MavenResourcesFiltering mavenResourcesFiltering =
+ (MavenResourcesFiltering) lookup( MavenResourcesFiltering.class.getName() );
+
+ String unitFilesDir = unitDirectory + "/files";
+
+ Resource resource = new Resource();
+ List resources = new ArrayList();
+ resources.add( resource );
+ resource.setDirectory( unitFilesDir );
+ resource.setFiltering( true );
+
+ List filtersFile = new ArrayList();
+ filtersFile.add( unitDirectory + "/filters.txt" );
+
+ mavenResourcesFiltering.filterResources( resources, outputDirectory, mavenProject, "UTF-8", filtersFile,
+ new ArrayList(), new StubMavenSession() );
+ }
+
+}
diff --git a/src/test/resources/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.xml b/src/test/resources/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.xml
new file mode 100644
index 0000000..d946539
--- /dev/null
+++ b/src/test/resources/org/apache/maven/shared/filtering/IncrementalResourceFilteringTest.xml
@@ -0,0 +1,9 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.sonatype.plexus.build.incremental.BuildContext</role>
+ <role-hint>default</role-hint>
+ <implementation>org.sonatype.plexus.build.incremental.ThreadBuildContext</implementation>
+ </component>
+ </components>
+</component-set>
diff --git a/src/test/units-files/incremental/files/file01.txt b/src/test/units-files/incremental/files/file01.txt
new file mode 100644
index 0000000..26f8e41
--- /dev/null
+++ b/src/test/units-files/incremental/files/file01.txt
@@ -0,0 +1,2 @@
+time=${time}
+foo=${foo}
diff --git a/src/test/units-files/incremental/files/file02.txt b/src/test/units-files/incremental/files/file02.txt
new file mode 100644
index 0000000..26f8e41
--- /dev/null
+++ b/src/test/units-files/incremental/files/file02.txt
@@ -0,0 +1,2 @@
+time=${time}
+foo=${foo}
diff --git a/src/test/units-files/incremental/filters.txt b/src/test/units-files/incremental/filters.txt
new file mode 100644
index 0000000..b2dea0b
--- /dev/null
+++ b/src/test/units-files/incremental/filters.txt
@@ -0,0 +1 @@
+foo=bar\ No newline at end of file