You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2011/08/21 13:50:56 UTC

svn commit: r1159966 - /maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java

Author: hboutemy
Date: Sun Aug 21 11:50:56 2011
New Revision: 1159966

URL: http://svn.apache.org/viewvc?rev=1159966&view=rev
Log:
improved integration-test logs

Modified:
    maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java

Modified: maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java
URL: http://svn.apache.org/viewvc/maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java?rev=1159966&r1=1159965&r2=1159966&view=diff
==============================================================================
--- maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java (original)
+++ maven/archetype/trunk/maven-archetype-plugin/src/main/java/org/apache/maven/archetype/mojos/IntegrationTestMojo.java Sun Aug 21 11:50:56 2011
@@ -91,6 +91,8 @@ public class IntegrationTestMojo
 
         if ( !projectsDirectory.exists() )
         {
+            getLog().warn( "No Archetype IT projects: root 'projects' directory not found." );
+
             return;
         }
 
@@ -99,6 +101,13 @@ public class IntegrationTestMojo
             @SuppressWarnings( "unchecked" )
             List<File> projectsGoalFiles = FileUtils.getFiles( projectsDirectory, "*/goal.txt", "" );
 
+            if ( projectsGoalFiles.size() == 0 )
+            {
+                getLog().warn( "No Archetype IT projects: no directory with goal.txt found." );
+
+                return;
+            }
+
             File archetypeFile = project.getArtifact().getFile();
 
             StringWriter errorWriter = new StringWriter();
@@ -129,54 +138,69 @@ public class IntegrationTestMojo
         }
     }
 
-    private void assertTest( File reference, File basedir )
+    /**
+     * Checks that actual directory content is the same as reference.
+     *
+     * @param reference the reference directory
+     * @param actual the actual directory to compare with the reference
+     * @throws IntegrationTestFailure if content differs
+     */
+    private void assertDirectoryEquals( File reference, File actual )
         throws IntegrationTestFailure, IOException
     {
         @SuppressWarnings( "unchecked" )
         List<String> referenceFiles = FileUtils.getFileNames( reference, "**", null, false );
+        getLog().debug( "reference content: " + referenceFiles );
         @SuppressWarnings( "unchecked" )
-        List<String> projectFiles = FileUtils.getFileNames( basedir, "**", null, false );
+        List<String> actualFiles = FileUtils.getFileNames( actual, "**", null, false );
+        getLog().debug( "actual content: " + referenceFiles );
 
-        boolean fileNamesEquals = CollectionUtils.isEqualCollection( referenceFiles, projectFiles );
+        boolean fileNamesEquals = CollectionUtils.isEqualCollection( referenceFiles, actualFiles );
 
         if ( !fileNamesEquals )
         {
+            getLog().debug( "Actual list of files is not the same as reference:" );
+            int missing = 0;
             for ( String ref : referenceFiles )
             {
-                if ( projectFiles.contains( ref ) )
+                if ( actualFiles.contains( ref ) )
                 {
-                    projectFiles.remove( ref );
+                    actualFiles.remove( ref );
                     getLog().debug( "Contained " + ref );
                 }
                 else
                 {
+                    missing++;
                     getLog().error( "Not contained " + ref );
                 }
             }
-            getLog().error( "Remains " + projectFiles );
+            getLog().error( "Remains " + actualFiles );
 
-            throw new IntegrationTestFailure( "Reference and generated project differs" );
+            throw new IntegrationTestFailure( "Reference and generated project differs (missing: " + missing
+                + ", unexpected: " + actualFiles.size() + ")" );
         }
 
         boolean contentEquals = true;
 
         for ( String file : referenceFiles )
         {
-            if ( file.endsWith( "pom.xml" ) )
+            File referenceFile = new File( reference, file );
+            File actualFile = new File( actual, file );
+
+            if ( referenceFile.isDirectory() && actualFile.isFile() )
             {
-                if ( !modelEquals( new File( reference, file ), new File( basedir, file ) ) )
-                {
-                    getLog().warn( "Contents of file " + file + " are not equal" );
-                    contentEquals = false;
-                }
+                getLog().warn( "File " + file + " is a directory in the reference but a file in actual" );
+                contentEquals = false;
             }
-            else
+            else if ( referenceFile.isFile() && actualFile.isDirectory() )
             {
-                if ( !FileUtils.contentEquals( new File( reference, file ), new File( basedir, file ) ) )
-                {
-                    getLog().warn( "Contents of file " + file + " are not equal" );
-                    contentEquals = false;
-                }
+                getLog().warn( "File " + file + " is a file in the reference but a directory in actual" );
+                contentEquals = false;
+            }
+            else if ( !FileUtils.contentEquals( referenceFile, actualFile ) )
+            {
+                getLog().warn( "Contents of file " + file + " are not equal" );
+                contentEquals = false;
             }
         }
         if ( !contentEquals )
@@ -205,15 +229,11 @@ public class IntegrationTestMojo
         return properties;
     }
 
-    private boolean modelEquals( File referencePom, File generatedPom )
-        throws IOException
-    {
-        return FileUtils.contentEquals( referencePom, generatedPom );
-    }
-
     private void processIntegrationTest( File goalFile, File archetypeFile )
         throws IntegrationTestFailure
     {
+        getLog().info( "Processing Archetype IT project: " + goalFile.getParentFile().getName() );
+
         try
         {
             Properties properties = getProperties( goalFile );
@@ -249,7 +269,9 @@ public class IntegrationTestMojo
             if ( reference.exists() )
             {
                 // compare generated project with reference
-                assertTest( reference, new File( basedir, request.getArtifactId() ) );
+                getLog().info( "Comparing generated project with reference content: " + reference );
+
+                assertDirectoryEquals( reference, new File( basedir, request.getArtifactId() ) );
             }
         }
         catch ( IOException ioe )