[MNG-5760] Added several more test cases for the --resume feature

Enable test for --resume feature

Verifying that resuming the build works when the resume.properties file does not have excludedProjects to skip in the next build.

Enabled back temporarily ignored test.

Added a test case for the --resume feature to skip failed modules after the first multi module project failed.

Maven invocations without project shouldn't fail

Ensure empty folder is there
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
index 67a2c8e..33dc60b 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/IntegrationTestSuite.java
@@ -106,7 +106,8 @@
         // Tests that don't run stable and need to be fixed
         // -------------------------------------------------------------------------------------------------------------
         // suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137
-        
+
+        suite.addTestSuite( MavenITmng5760ResumeFeatureTest.class );
         suite.addTestSuite( MavenITmng6656BuildConsumer.class );
         suite.addTestSuite( MavenITmng6562WarnDefaultBindings.class );
         suite.addTestSuite( MavenITmng5868NoDuplicateAttachedArtifacts.class );
diff --git a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5760ResumeFeatureTest.java b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5760ResumeFeatureTest.java
index aa001a0..7342f31 100644
--- a/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5760ResumeFeatureTest.java
+++ b/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng5760ResumeFeatureTest.java
@@ -40,11 +40,18 @@
  * @author Martin Kanters
  */
 public class MavenITmng5760ResumeFeatureTest extends AbstractMavenIntegrationTestCase {
-    private final File testDir;
+    private final File parentDependentTestDir;
+    private final File parentIndependentTestDir;
+    private final File noProjectTestDir;
 
     public MavenITmng5760ResumeFeatureTest() throws IOException {
         super( "[3.7.0,)" );
-        this.testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-5760-resume-feature" );
+        this.parentDependentTestDir = ResourceExtractor.simpleExtractResources( getClass(),
+                "/mng-5760-resume-feature/parent-dependent" );
+        this.parentIndependentTestDir = ResourceExtractor.simpleExtractResources( getClass(),
+                "/mng-5760-resume-feature/parent-independent" );
+        this.noProjectTestDir = ResourceExtractor.simpleExtractResources( getClass(),
+                "/mng-5760-resume-feature/no-project" );
     }
 
     /**
@@ -52,7 +59,7 @@
      */
     public void testShouldSuggestToResumeWithoutArgs() throws Exception
     {
-        final Verifier verifier = newVerifier( testDir.getAbsolutePath() );
+        final Verifier verifier = newVerifier( parentDependentTestDir.getAbsolutePath() );
         verifier.addCliOption( "-Dmodule-b.fail=true" );
 
         try
@@ -69,11 +76,19 @@
         {
             verifier.resetStreams();
         }
+
+        // New build with -r should resume the build from module-b, skipping module-a since it has succeeded already.
+        verifier.getCliOptions().clear();
+        verifier.addCliOption( "-r" );
+        verifier.executeGoal( "test" );
+        verifyTextNotInLog( verifier, "Building module-a 1.0" );
+        verifier.verifyTextInLog( "Building module-b 1.0" );
+        verifier.verifyTextInLog( "Building module-c 1.0" );
     }
 
     public void testShouldSkipSuccessfulProjects() throws Exception
     {
-        final Verifier verifier = newVerifier( testDir.getAbsolutePath() );
+        final Verifier verifier = newVerifier( parentDependentTestDir.getAbsolutePath() );
         verifier.addCliOption( "-Dmodule-a.fail=true" );
         verifier.addCliOption( "--fail-at-end");
 
@@ -109,6 +124,56 @@
         }
     }
 
+    public void testShouldSkipSuccessfulModulesWhenTheFirstModuleFailed() throws Exception
+    {
+        // In this multi-module project, the submodules are not dependent on the parent.
+        // This results in the parent to be built last, and module-a to be built first.
+        // This enables us to let the first module in the reactor (module-a) fail.
+        final Verifier verifier = newVerifier( parentIndependentTestDir.getAbsolutePath() );
+        verifier.addCliOption( "-Dmodule-a.fail=true" );
+        verifier.addCliOption( "--fail-at-end");
+
+        try
+        {
+            verifier.executeGoal( "test" );
+            fail( "Expected this invocation to fail" );
+        }
+        catch ( final VerificationException ve )
+        {
+            verifier.verifyTextInLog( "mvn <args> -r" );
+        }
+        finally
+        {
+            verifier.resetStreams();
+        }
+
+        verifier.getCliOptions().clear();
+        verifier.addCliOption( "-r" );
+        verifier.executeGoal( "test" );
+        verifier.verifyTextInLog( "Building module-a 1.0" );
+        verifyTextNotInLog( verifier, "Building module-b 1.0" );
+    }
+
+    public void testShouldNotCrashWithoutProject() throws Exception
+    {
+        // There is no Maven project available in the test directory.
+        // As reported in JIRA this would previously break with a NullPointerException.
+        // (see https://issues.apache.org/jira/browse/MNG-5760?focusedCommentId=17143795&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-17143795)
+        final Verifier verifier = newVerifier( noProjectTestDir.getAbsolutePath() );
+        try
+        {
+            verifier.executeGoal( "resources:resources" );
+        }
+        catch ( final VerificationException ve )
+        {
+            verifier.verifyTextInLog( "Goal requires a project to execute but there is no POM in this directory" );
+        }
+        finally
+        {
+            verifier.resetStreams();
+        }
+    }
+
     /**
      * Throws an exception if the text <strong>is</strong> present in the log.
      *
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/no-project/.gitkeep b/core-it-suite/src/test/resources/mng-5760-resume-feature/no-project/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-5760-resume-feature/no-project/.gitkeep
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-a/pom.xml
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/pom.xml
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-a/pom.xml
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/src/test/java/org/apache/maven/it/TestCase.java b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-a/src/test/java/org/apache/maven/it/TestCase.java
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/src/test/java/org/apache/maven/it/TestCase.java
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-a/src/test/java/org/apache/maven/it/TestCase.java
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-b/pom.xml
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/pom.xml
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-b/pom.xml
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/src/test/java/org/apache/maven/it/TestCase.java b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-b/src/test/java/org/apache/maven/it/TestCase.java
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/src/test/java/org/apache/maven/it/TestCase.java
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-b/src/test/java/org/apache/maven/it/TestCase.java
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-c/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-c/pom.xml
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-c/pom.xml
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-c/pom.xml
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-c/src/test/java/org/apache/maven/it/TestCase.java b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-c/src/test/java/org/apache/maven/it/TestCase.java
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/module-c/src/test/java/org/apache/maven/it/TestCase.java
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/module-c/src/test/java/org/apache/maven/it/TestCase.java
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/pom.xml
similarity index 100%
rename from core-it-suite/src/test/resources/mng-5760-resume-feature/pom.xml
rename to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-dependent/pom.xml
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-a/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-a/pom.xml
new file mode 100644
index 0000000..b7a0c07
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-a/pom.xml
@@ -0,0 +1,41 @@
+<?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>
+
+    <groupId>org.apache.maven.its.mng5760.parentindependent</groupId>
+    <artifactId>module-a</artifactId>
+    <version>1.0</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/src/test/java/org/apache/maven/it/TestCase.java b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-a/src/test/java/org/apache/maven/it/TestCase.java
similarity index 100%
copy from core-it-suite/src/test/resources/mng-5760-resume-feature/module-a/src/test/java/org/apache/maven/it/TestCase.java
copy to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-a/src/test/java/org/apache/maven/it/TestCase.java
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-b/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-b/pom.xml
new file mode 100644
index 0000000..4b8e415
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-b/pom.xml
@@ -0,0 +1,41 @@
+<?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>
+
+    <groupId>org.apache.maven.its.mng5760.parentindependent</groupId>
+    <artifactId>module-b</artifactId>
+    <version>1.0</version>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.12</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/src/test/java/org/apache/maven/it/TestCase.java b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-b/src/test/java/org/apache/maven/it/TestCase.java
similarity index 100%
copy from core-it-suite/src/test/resources/mng-5760-resume-feature/module-b/src/test/java/org/apache/maven/it/TestCase.java
copy to core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/module-b/src/test/java/org/apache/maven/it/TestCase.java
diff --git a/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/pom.xml b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/pom.xml
new file mode 100644
index 0000000..45463c5
--- /dev/null
+++ b/core-it-suite/src/test/resources/mng-5760-resume-feature/parent-independent/pom.xml
@@ -0,0 +1,49 @@
+<?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>
+
+    <groupId>org.apache.maven.its.mng5760.parentindependent</groupId>
+    <artifactId>parent</artifactId>
+    <version>1.0</version>
+
+    <packaging>pom</packaging>
+
+    <name>Maven Integration Test :: MNG-5760</name>
+    <description>
+        Tests for the --resume flag.
+    </description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <maven.compiler.source>1.8</maven.compiler.source>
+        <maven.compiler.target>1.8</maven.compiler.target>
+    </properties>
+
+    <modules>
+        <module>module-a</module>
+        <module>module-b</module>
+    </modules>
+
+</project>