You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/02/21 15:00:40 UTC

svn commit: r379454 - in /maven/plugins/trunk/maven-clean-plugin/src: main/java/org/apache/maven/plugin/clean/ test/java/org/apache/maven/plugin/clean/ test/resources/testDirectoryStructure/target/ test/resources/testDirectoryStructure/target/classes/ ...

Author: brett
Date: Tue Feb 21 06:00:38 2006
New Revision: 379454

URL: http://svn.apache.org/viewcvs?rev=379454&view=rev
Log:
[MCLEAN-6] additional tests for the clean plugin. Most of these really belong in the file-management shared lib. Note the bug in the lib.

Added:
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/file.txt   (with props)
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/file.txt   (with props)
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/file.txt   (with props)
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/
    maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/file.txt   (with props)
Modified:
    maven/plugins/trunk/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanMojo.java
    maven/plugins/trunk/maven-clean-plugin/src/test/java/org/apache/maven/plugin/clean/CleanMojoTest.java

Modified: maven/plugins/trunk/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanMojo.java?rev=379454&r1=379453&r2=379454&view=diff
==============================================================================
--- maven/plugins/trunk/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanMojo.java (original)
+++ maven/plugins/trunk/maven-clean-plugin/src/main/java/org/apache/maven/plugin/clean/CleanMojo.java Tue Feb 21 06:00:38 2006
@@ -24,6 +24,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 /**
@@ -125,19 +126,29 @@
     private void removeDirectory( File dir )
         throws MojoExecutionException
     {
-        FileSet fs = new FileSet();
-        fs.setDirectory( dir.getPath() );
-        fs.addInclude( "**/**" );
-        fs.setFollowSymlinks( followSymLinks );
-
-        try
-        {
-            getLog().info( "Deleting directory " + dir.getAbsolutePath() );
-            fileSetManager.delete( fs );
-        }
-        catch ( IOException e )
+        if ( dir != null )
         {
-            throw new MojoExecutionException( "Failed to delete directory: " + dir + ". Reason: " + e.getMessage(), e );
+            FileSet fs = new FileSet();
+            fs.setDirectory( dir.getPath() );
+            fs.addInclude( "**/**" );
+            fs.setFollowSymlinks( followSymLinks );
+
+            try
+            {
+                getLog().info( "Deleting directory " + dir.getAbsolutePath() );
+                fileSetManager.delete( fs );
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "Failed to delete directory: " + dir + ". Reason: " + e.getMessage(),
+                                                  e );
+            }
+            catch ( IllegalStateException e )
+            {
+                // TODO: IOException from plexus-utils should be acceptable here
+                throw new MojoExecutionException( "Failed to delete directory: " + dir + ". Reason: " + e.getMessage(),
+                                                  e );
+            }
         }
     }
 
@@ -163,5 +174,19 @@
     protected void setTestOutputDirectory( File testOutputDirectory )
     {
         this.testOutputDirectory = testOutputDirectory;
+    }
+
+    /**
+     * Add a fileset to the list of filesets to clean.
+     *
+     * @param fileset the fileset
+     */
+    public void addFileset( Fileset fileset )
+    {
+        if ( filesets == null )
+        {
+            filesets = new LinkedList();
+        }
+        filesets.add( fileset );
     }
 }

Modified: maven/plugins/trunk/maven-clean-plugin/src/test/java/org/apache/maven/plugin/clean/CleanMojoTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/test/java/org/apache/maven/plugin/clean/CleanMojoTest.java?rev=379454&r1=379453&r2=379454&view=diff
==============================================================================
--- maven/plugins/trunk/maven-clean-plugin/src/test/java/org/apache/maven/plugin/clean/CleanMojoTest.java (original)
+++ maven/plugins/trunk/maven-clean-plugin/src/test/java/org/apache/maven/plugin/clean/CleanMojoTest.java Tue Feb 21 06:00:38 2006
@@ -17,9 +17,14 @@
  */
 
 import junit.framework.TestCase;
+import org.apache.maven.plugin.MojoExecutionException;
 import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.util.Arrays;
 
 /**
  * Test the clean mojo.
@@ -27,36 +32,197 @@
 public class CleanMojoTest
     extends TestCase
 {
+    private static final String TARGET_TEST_DIR = "target/testDirectoryStructure";
+
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
         FileUtils.copyDirectoryStructure( new File( "src/test/resources/testDirectoryStructure" ),
-                                          new File( "target/test/testDirectoryStructure" ) );
+                                          new File( TARGET_TEST_DIR ) );
     }
 
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+
+        FileUtils.deleteDirectory( new File( TARGET_TEST_DIR ) );
+    }
 
     public void testClean()
         throws Exception
     {
+        String base = TARGET_TEST_DIR;
+        String directory = base + "/buildDirectory";
+        String outputDirectory = base + "/buildOutputDirectory";
+        String testOutputDirectory = base + "/buildTestDirectory";
+
         CleanMojo mojo = new CleanMojo();
-        mojo.setDirectory( new File( "target/test/testDirectoryStructure/buildDirectory" ) );
-        mojo.setOutputDirectory( new File( "target/test/testDirectoryStructure/buildOutputDirectory" ) );
-        mojo.setTestOutputDirectory( new File( "target/test/testDirectoryStructure/buildTestDirectory" ) );
+
+        mojo.setDirectory( new File( directory ) );
+        mojo.setOutputDirectory( new File( outputDirectory ) );
+        mojo.setTestOutputDirectory( new File( testOutputDirectory ) );
 
         mojo.execute();
 
-        assertFalse( FileUtils.fileExists( "target/test/testDirectoryStructure/buildDirectory" ) );
-        assertFalse( FileUtils.fileExists( "target/test/testDirectoryStructure/buildOutputDirectory" ) );
-        assertFalse( FileUtils.fileExists( "target/test/testDirectoryStructure/buildTestDirectory" ) );
+        assertFalse( FileUtils.fileExists( directory ) );
+        assertFalse( FileUtils.fileExists( outputDirectory ) );
+        assertFalse( FileUtils.fileExists( testOutputDirectory ) );
     }
 
-    protected void tearDown()
+    public void testNestedStructure()
         throws Exception
     {
-        super.tearDown();
+        String base = TARGET_TEST_DIR + "/target";
+        String outputDirectory = base + "/classes";
+        String testOutputDirectory = base + "/test-classes";
+
+        CleanMojo mojo = new CleanMojo();
+
+        mojo.setDirectory( new File( base ) );
+        mojo.setOutputDirectory( new File( outputDirectory ) );
+        mojo.setTestOutputDirectory( new File( testOutputDirectory ) );
+
+        mojo.execute();
+
+        assertFalse( FileUtils.fileExists( base ) );
+        assertFalse( FileUtils.fileExists( outputDirectory ) );
+        assertFalse( FileUtils.fileExists( testOutputDirectory ) );
+    }
+
+    public void testEmptyDirectories()
+        throws Exception
+    {
+        CleanMojo mojo = new CleanMojo();
 
-        FileUtils.deleteDirectory( new File( "target/test/testDirectoryStructure" ) );
+        mojo.execute();
+
+        // just checking no exceptions
+        assertTrue( true );
     }
+
+    public void testFilesets()
+        throws Exception
+    {
+        String base = TARGET_TEST_DIR + "/target";
+
+        CleanMojo mojo = new CleanMojo();
+
+        mojo.addFileset( createFileset( base, "**/file.txt", "**/subdir/**" ) );
+
+        String outputDirectory = TARGET_TEST_DIR + "/buildOutputDirectory";
+        mojo.addFileset( createFileset( outputDirectory, "**", "" ) );
+
+        mojo.execute();
+
+        // fileset 1
+        assertTrue( FileUtils.fileExists( base ) );
+        assertTrue( FileUtils.fileExists( base + "/classes" ) );
+        assertFalse( FileUtils.fileExists( base + "/classes/file.txt" ) );
+/* TODO: looks like a bug in the file-management library
+        assertTrue( FileUtils.fileExists( base + "/subdir/file.txt" ) );
+*/
+
+        // fileset 2
+        assertTrue( FileUtils.fileExists( outputDirectory ) );
+        assertFalse( FileUtils.fileExists( outputDirectory + "/file.txt" ) );
+    }
+
+    public void testInvalidDirectory()
+        throws MojoExecutionException
+    {
+        String path = TARGET_TEST_DIR + "/target/subdir/file.txt";
+
+        CleanMojo mojo = new CleanMojo();
+        mojo.setDirectory( new File( path ) );
+
+        try
+        {
+            mojo.execute();
+
+            fail( "Should fail to delete a file treated as a directory" );
+        }
+        catch ( MojoExecutionException expected )
+        {
+            assertTrue( true );
+        }
+    }
+
+    public void testOpenFile()
+        throws MojoExecutionException, FileNotFoundException
+    {
+        String path = TARGET_TEST_DIR + "/target/subdir";
+
+        CleanMojo mojo = new CleanMojo();
+        mojo.setDirectory( new File( path ) );
+
+        FileInputStream fis = new FileInputStream( new File( path, "file.txt" ) );
+
+        try
+        {
+            mojo.execute();
+
+            fail( "Should fail to delete a file that is open" );
+        }
+        catch ( MojoExecutionException expected )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            IOUtil.close( fis );
+        }
+    }
+
+    public void testOpenFileInFileSet()
+        throws MojoExecutionException, FileNotFoundException
+    {
+        String path = TARGET_TEST_DIR + "/target/subdir";
+
+        CleanMojo mojo = new CleanMojo();
+        mojo.addFileset( createFileset( path, "**", "" ) );
+
+        FileInputStream fis = new FileInputStream( new File( path, "file.txt" ) );
+
+        try
+        {
+            mojo.execute();
+
+            fail( "Should fail to delete a file that is open" );
+        }
+        catch ( MojoExecutionException expected )
+        {
+            assertTrue( true );
+        }
+        finally
+        {
+            IOUtil.close( fis );
+        }
+    }
+
+    public void testMissingDirectory()
+        throws MojoExecutionException
+    {
+        String path = TARGET_TEST_DIR + "/does-not-exist";
+
+        CleanMojo mojo = new CleanMojo();
+        mojo.setDirectory( new File( path ) );
+        assertFalse( FileUtils.fileExists( path ) );
+
+        mojo.execute();
+
+        assertFalse( FileUtils.fileExists( path ) );
+    }
+
+    private static Fileset createFileset( String dir, String includes, String excludes )
+    {
+        Fileset fileset = new Fileset();
+        fileset.setDirectory( dir );
+        fileset.setIncludes( Arrays.asList( new String[]{includes} ) );
+        fileset.setExcludes( Arrays.asList( new String[]{excludes} ) );
+        return fileset;
+    }
+
 }

Added: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/file.txt
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/file.txt?rev=379454&view=auto
==============================================================================
    (empty)

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/classes/file.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/file.txt
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/file.txt?rev=379454&view=auto
==============================================================================
    (empty)

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/file.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/file.txt
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/file.txt?rev=379454&view=auto
==============================================================================
    (empty)

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/subdir/file.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/file.txt
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/file.txt?rev=379454&view=auto
==============================================================================
    (empty)

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/file.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-clean-plugin/src/test/resources/testDirectoryStructure/target/test-classes/file.txt
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision