You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ti...@apache.org on 2018/02/18 00:47:29 UTC

[17/52] [abbrv] [partial] maven-surefire git commit: [SUREFIRE-1471] Too long Windows path cause CI issues. Renamed surefire-intergation-tests to surefire-its.

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncherTest.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncherTest.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncherTest.java
new file mode 100644
index 0000000..b5df941
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncherTest.java
@@ -0,0 +1,43 @@
+package org.apache.maven.surefire.its.fixture;
+
+/*
+ * 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.IOException;
+import org.apache.maven.it.VerificationException;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class SurefireLauncherTest
+{
+    @Test
+    public void launcherGetsProperMethodName()
+        throws IOException, VerificationException
+    {
+        MavenLauncher mavenLauncher = new MavenLauncher( SurefireLauncherTest.class, "foo", "" );
+        String method = new SurefireLauncher( mavenLauncher ).getTestMethodName();
+        assertEquals( "launcherGetsProperMethodName", method );
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireVerifierException.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireVerifierException.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireVerifierException.java
new file mode 100644
index 0000000..5201503
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/SurefireVerifierException.java
@@ -0,0 +1,37 @@
+package org.apache.maven.surefire.its.fixture;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class SurefireVerifierException
+    extends RuntimeException
+{
+    public SurefireVerifierException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public SurefireVerifierException( Throwable cause )
+    {
+        super( cause );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
new file mode 100644
index 0000000..cf6ad84
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFile.java
@@ -0,0 +1,155 @@
+package org.apache.maven.surefire.its.fixture;
+
+/*
+ * 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.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.List;
+import org.apache.commons.io.FileUtils;
+
+import junit.framework.Assert;
+
+import static junit.framework.Assert.assertTrue;
+
+/**
+ * @author Kristian Rosenvold
+ */
+public class TestFile
+{
+    private final File file;
+
+    private final Charset encoding;
+
+    private final OutputValidator surefireVerifier;
+
+    public TestFile( File file, OutputValidator surefireVerifier )
+    {
+        this( file, Charset.defaultCharset(), surefireVerifier);
+    }
+
+    public TestFile( File file, Charset charset, OutputValidator surefireVerifier )
+    {
+        this.file = file;
+        this.encoding = charset;
+        this.surefireVerifier = surefireVerifier;
+    }
+
+    public OutputValidator assertFileExists()
+    {
+        assertTrue( "File doesn't exist: " + file.getAbsolutePath(), file.exists() );
+        return surefireVerifier;
+    }
+
+    public OutputValidator assertFileNotExists()
+    {
+        assertTrue( "File doesn't exist: " + file.getAbsolutePath(), !file.exists() );
+        return surefireVerifier;
+    }
+
+    public void delete()
+    {
+        //noinspection ResultOfMethodCallIgnored
+        file.delete();
+    }
+
+    public String getAbsolutePath()
+    {
+        return file.getAbsolutePath();
+    }
+
+    public boolean exists()
+    {
+        return file.exists();
+    }
+
+    public FileInputStream getFileInputStream()
+        throws FileNotFoundException
+    {
+        return new FileInputStream( file );
+    }
+
+    public String slurpFile()
+    {
+        try
+        {
+            StringBuilder sb = new StringBuilder();
+            BufferedReader reader;
+            reader = new BufferedReader( new FileReader( file ) );
+            for ( String line = reader.readLine(); line != null; line = reader.readLine() )
+            {
+                sb.append( line );
+            }
+            reader.close();
+            return sb.toString();
+        }
+        catch ( IOException e )
+        {
+            throw new SurefireVerifierException( e );
+        }
+
+    }
+
+    public String readFileToString()
+    {
+        try
+        {
+            return FileUtils.readFileToString( file );
+        }
+        catch ( IOException e )
+        {
+            throw new SurefireVerifierException( e );
+        }
+    }
+
+    public boolean isFile()
+    {
+        return file.isFile();
+    }
+
+    public TestFile assertContainsText( String text )
+    {
+        final List<String> list = surefireVerifier.loadFile( file, encoding );
+        for ( String line : list )
+        {
+            if ( line.contains( text ) )
+            {
+                return this;
+            }
+        }
+        Assert.fail( "Did not find expected message in log" );
+        return null;
+    }
+
+    public URI toURI()
+    {
+        return file.toURI();
+    }
+
+    public File getFile()
+    {
+        return file;
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFramework.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFramework.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFramework.java
new file mode 100644
index 0000000..c544347
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/fixture/TestFramework.java
@@ -0,0 +1,29 @@
+package org.apache.maven.surefire.its.fixture;
+
+/*
+ * 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.
+ */
+
+/**
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 2.19
+ */
+public enum TestFramework
+{
+    JUNIT4, JUNIT47, TestNG
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1024VerifyFailsafeIfTestedIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1024VerifyFailsafeIfTestedIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1024VerifyFailsafeIfTestedIT.java
new file mode 100644
index 0000000..886cd07
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1024VerifyFailsafeIfTestedIT.java
@@ -0,0 +1,48 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * "verify" goal ignores "dependenciesToScan" parameter when checking tests existence
+ * <p>
+ * Found in Surefire 2.16.
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1024">SUREFIRE-1024</a>
+ * @since 2.19
+ */
+public class Surefire1024VerifyFailsafeIfTestedIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void shouldScanAndRunTestsInDependencyJars() throws Exception {
+        SurefireLauncher launcher = unpack( "surefire-1024" );
+        launcher.executeVerify()
+            .verifyTextInLog( "class jiras.surefire1024.A1IT#test() dependency to scan" );
+
+        launcher.getSubProjectValidator( "jiras-surefire-1024-it" )
+            .assertIntegrationTestSuiteResults( 1, 0, 0, 0 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1028UnableToRunSingleIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1028UnableToRunSingleIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1028UnableToRunSingleIT.java
new file mode 100644
index 0000000..ec63a8a
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1028UnableToRunSingleIT.java
@@ -0,0 +1,59 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * Plugin Configuration: parallel=classes
+ * <br>
+ * With Surefire 2.15
+ * {@code $ mvn test -Dtest=MyTest#testFoo}
+ * Results:
+ * Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+ * <br>
+ * With Surefire 2.16
+ * {@code $ mvn test -Dtest=MyTest#testFoo}
+ * <br>
+ * Results:
+ * Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1028">SUREFIRE-1028</a>
+ * @since 2.18
+ */
+public class Surefire1028UnableToRunSingleIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void methodFilteringParallelExecution()
+    {
+        unpack().setTestToRun( "SomeTest#test" ).parallelClasses().useUnlimitedThreads()
+                .executeTest().verifyErrorFree( 1 ).verifyTextInLog( "OK!" );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1028-unable-to-run-single-test" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1036NonFilterableJUnitRunnerWithCategoriesIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1036NonFilterableJUnitRunnerWithCategoriesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1036NonFilterableJUnitRunnerWithCategoriesIT.java
new file mode 100644
index 0000000..0d6d8b6
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1036NonFilterableJUnitRunnerWithCategoriesIT.java
@@ -0,0 +1,71 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.shared.utils.xml.Xpp3Dom;
+import org.apache.maven.shared.utils.xml.Xpp3DomBuilder;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.TestFile;
+import org.junit.Test;
+
+import java.io.FileNotFoundException;
+
+import static org.junit.Assert.*;
+
+/**
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1036">SUREFIRE-1036</a>
+ * @since 2.18
+ */
+public class Surefire1036NonFilterableJUnitRunnerWithCategoriesIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void test()
+        throws VerificationException, FileNotFoundException
+    {
+        OutputValidator validator = unpack().maven().executeTest();
+        validator.assertTestSuiteResults( 1, 0, 0, 0 );
+        assertFalse( validator.getSurefireReportsXmlFile(
+            "TEST-jiras.surefire1036.TestSomethingWithMockitoRunner.xml" ).exists() );
+        assertFalse( validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1036.TestSomeUnit.xml" ).exists() );
+        TestFile reportFile =
+            validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1036.TestSomeIntegration.xml" );
+        assertTestCount( reportFile, 1 );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1036-NonFilterableJUnitRunnerWithCategories" );
+    }
+
+    private void assertTestCount( TestFile reportFile, int tests )
+        throws FileNotFoundException
+    {
+        assertTrue( reportFile.exists() );
+        Xpp3Dom testResult = Xpp3DomBuilder.build( reportFile.getFileInputStream(), "UTF-8" );
+        Xpp3Dom[] children = testResult.getChildren( "testcase" );
+        assertEquals( tests, children.length );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1041FailingJUnitRunnerIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1041FailingJUnitRunnerIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1041FailingJUnitRunnerIT.java
new file mode 100644
index 0000000..bb65682
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1041FailingJUnitRunnerIT.java
@@ -0,0 +1,38 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+/**
+ * SUREFIRE-1041: An error in a JUnit runner should not lead to an error in Surefire
+ *
+ * @author Andreas Gudian
+ */
+public class Surefire1041FailingJUnitRunnerIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void reportErrorInJUnitRunnerAsTestError()
+    {
+        unpack( "surefire-1041-exception-in-junit-runner" ).mavenTestFailureIgnore( true ).executeTest().assertTestSuiteResults( 1, 1, 0, 0 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1053SystemPropertiesIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1053SystemPropertiesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1053SystemPropertiesIT.java
new file mode 100644
index 0000000..b3ed744
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1053SystemPropertiesIT.java
@@ -0,0 +1,72 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+
+/**
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1053">SUREFIRE-1053</a>
+ * @since 2.18
+ */
+public class Surefire1053SystemPropertiesIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void checkWarningsFileEncoding()
+    {
+        unpack().sysProp( "file.encoding", "ISO-8859-1" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog( "file.encoding cannot be set as system property, use <argLine>-D"
+                                  + "file.encoding=...</argLine> instead" );
+    }
+    @Test
+    public void checkWarningsSysPropTwice() throws Exception
+    {
+        OutputValidator validator = unpack()
+            .argLine( "-DmyArg=myVal2 -Dfile.encoding=ISO-8859-1" )
+            .sysProp( "file.encoding", "ISO-8859-1" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog( "The system property myArg is configured twice! "
+                                  + "The property appears in <argLine/> and any of <systemPropertyVariables/>, "
+                                  + "<systemProperties/> or user property." );
+
+        for ( String line : validator.loadLogLines() )
+        {
+            assertFalse( "no warning for file.encoding not in argLine",
+                         line.contains( "file.encoding cannot be set as system property, use <argLine>" ) );
+            assertFalse( "no warning for double definition of file.encoding",
+                         line.contains( "The system property file.encoding is configured twice!" ) );
+        }
+
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1053-system-properties" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1055CorrectConcurrentTestCountIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1055CorrectConcurrentTestCountIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1055CorrectConcurrentTestCountIT.java
new file mode 100644
index 0000000..0293a75
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1055CorrectConcurrentTestCountIT.java
@@ -0,0 +1,41 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+/**
+ * SUREFIRE-1055 Correct test count in parallel run mode.
+ *
+ * @author Kristian Rosenvold
+ */
+public class Surefire1055CorrectConcurrentTestCountIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void testTestNgAndJUnitTogether()
+    {
+        OutputValidator outputValidator = unpack( "surefire-1055-parallelTestCount" ).executeTest();
+        outputValidator.assertTestSuiteResults( 21, 0, 0, 0 );
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1080ParallelForkDoubleTestIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1080ParallelForkDoubleTestIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1080ParallelForkDoubleTestIT.java
new file mode 100644
index 0000000..d6a38fa
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1080ParallelForkDoubleTestIT.java
@@ -0,0 +1,54 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * Description of SUREFIRE-1080: <br>
+ * <br>
+ * There are 9 tests in total in the attached project, and mvn test will show 9 tests run.
+ * When I use the command " mvn test -Dparallel=classes -DforkCount=2 -DuseUnlimitedThreads=true", it shows 13 tests
+ * run (and sometimes 16), and some tests are run more than once.
+ * If I remove forkCount, or parallel, everything will be fine. But it is problematic when combining together.
+ * Apache Maven 3.2.2-SNAPSHOT
+ * Surefire 2.18-SNAPSHOT
+ * JUnit 4.11
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1080">SUREFIRE-1080</a>
+ * @since 2.18
+ */
+public class Surefire1080ParallelForkDoubleTestIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void test()
+    {
+        unpack().executeTest().assertTestSuiteResults( 9 );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1080-parallel-fork-double-test" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnitParameterizedIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnitParameterizedIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnitParameterizedIT.java
new file mode 100644
index 0000000..2669b2f
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1082ParallelJUnitParameterizedIT.java
@@ -0,0 +1,212 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.apache.maven.surefire.its.fixture.TestFile;
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.junit.Test;
+
+import java.nio.charset.Charset;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.TreeSet;
+
+import static org.hamcrest.core.AnyOf.anyOf;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.StringContains.containsString;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1082">SUREFIRE-1082</a>
+ * @since 2.18
+ */
+public class Surefire1082ParallelJUnitParameterizedIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    private static Set<String> printOnlyTestLinesFromConsole( OutputValidator validator )
+            throws VerificationException
+    {
+        return printOnlyTestLines( validator.loadLogLines() );
+    }
+
+    private static Set<String> printOnlyTestLinesFromOutFile( OutputValidator validator )
+            throws VerificationException
+    {
+        TestFile report = validator.getSurefireReportsFile( "jiras.surefire1082.Jira1082Test-output.txt" );
+        report.assertFileExists();
+        return printOnlyTestLines( validator.loadFile( report.getFile(), Charset.forName( "UTF-8" ) ) );
+    }
+
+    private static Set<String> printOnlyTestLines( Collection<String> logs )
+        throws VerificationException
+    {
+        Set<String> log = new TreeSet<String>();
+        for ( String line : logs )
+        {
+            if ( line.startsWith( "class jiras.surefire1082." ) )
+            {
+                log.add( line );
+            }
+        }
+        return log;
+    }
+
+    private static Matcher<Set<String>> regex( Set<String> r )
+    {
+        return new IsRegex( r );
+    }
+
+    private static void assertParallelRun( Set<String> log )
+    {
+        assertThat( log.size(), is( 4 ) );
+
+        Set<String> expectedLogs1 = new TreeSet<String>();
+        expectedLogs1.add( "class jiras.surefire1082.Jira1082Test a 0 pool-[\\d]+-thread-1" );
+        expectedLogs1.add( "class jiras.surefire1082.Jira1082Test b 0 pool-[\\d]+-thread-1" );
+        expectedLogs1.add( "class jiras.surefire1082.Jira1082Test a 1 pool-[\\d]+-thread-2" );
+        expectedLogs1.add( "class jiras.surefire1082.Jira1082Test b 1 pool-[\\d]+-thread-2" );
+
+        Set<String> expectedLogs2 = new TreeSet<String>();
+        expectedLogs2.add( "class jiras.surefire1082.Jira1082Test a 1 pool-[\\d]+-thread-1" );
+        expectedLogs2.add( "class jiras.surefire1082.Jira1082Test b 1 pool-[\\d]+-thread-1" );
+        expectedLogs2.add( "class jiras.surefire1082.Jira1082Test a 0 pool-[\\d]+-thread-2" );
+        expectedLogs2.add( "class jiras.surefire1082.Jira1082Test b 0 pool-[\\d]+-thread-2" );
+
+        assertThat( log, anyOf( regex( expectedLogs1 ), regex( expectedLogs2 ) ) );
+    }
+
+    @Test
+    public void checkClassesRunParallel()
+        throws VerificationException
+    {
+        OutputValidator validator = unpack().setTestToRun( "Jira1082Test" )
+                                            .parallelClasses()
+                                            .useUnlimitedThreads()
+                                            .executeTest()
+                                            .verifyErrorFree( 4 );
+
+        validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1082.Jira1082Test.xml" )
+                .assertFileExists();
+
+        validator.assertThatLogLine( containsString( "Running jiras.surefire1082.Jira1082Test" ), is( 1 ) );
+
+        Set<String> log = printOnlyTestLinesFromConsole( validator );
+        assertParallelRun( log );
+    }
+
+    @Test
+    public void checkOutFileClassesRunParallel()
+            throws VerificationException
+    {
+        OutputValidator validator = unpack().redirectToFile( true )
+                                            .setTestToRun( "Jira1082Test" )
+                                            .parallelClasses()
+                                            .useUnlimitedThreads()
+                                            .executeTest()
+                                            .verifyErrorFree( 4 );
+
+        validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1082.Jira1082Test.xml" )
+                .assertFileExists();
+
+        validator.assertThatLogLine( containsString( "Running jiras.surefire1082.Jira1082Test" ), is( 1 ) );
+
+        Set<String> log = printOnlyTestLinesFromOutFile( validator );
+        assertParallelRun( log );
+    }
+
+    @Test
+    public void shouldRunTwo() throws VerificationException
+    {
+        OutputValidator validator = unpack().redirectToFile( true )
+                                            .parallelClasses()
+                                            .useUnlimitedThreads()
+                                            .executeTest()
+                                            .verifyErrorFree( 8 );
+
+        validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1082.Jira1082Test.xml" )
+                .assertFileExists();
+
+        validator.getSurefireReportsXmlFile( "TEST-jiras.surefire1082.Jira1264Test.xml" )
+                .assertFileExists();
+
+        validator.getSurefireReportsFile( "jiras.surefire1082.Jira1082Test-output.txt" )
+                .assertFileExists();
+
+        validator.getSurefireReportsFile( "jiras.surefire1082.Jira1264Test-output.txt" )
+                .assertFileExists();
+
+        validator.assertThatLogLine( containsString( "Running jiras.surefire1082.Jira1082Test" ), is( 1 ) );
+
+        validator.assertThatLogLine( containsString( "Running jiras.surefire1082.Jira1264Test" ), is( 1 ) );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1082-parallel-junit-parameterized" );
+    }
+
+    private static class IsRegex
+        extends BaseMatcher<Set<String>>
+    {
+        private final Set<String> expectedRegex;
+
+        IsRegex( Set<String> expectedRegex )
+        {
+            this.expectedRegex = expectedRegex;
+        }
+
+        @Override
+        public boolean matches( Object o )
+        {
+            if ( o != null && o instanceof Set )
+            {
+                Set<String> actual = (Set<String>) o;
+                boolean matches = actual.size() == expectedRegex.size();
+                Iterator<String> regex = expectedRegex.iterator();
+                for ( String s : actual )
+                {
+                    if ( s == null || !regex.hasNext() || !s.matches( regex.next() ) )
+                    {
+                        matches = false;
+                    }
+                }
+                return matches;
+            }
+            else
+            {
+                return false;
+            }
+        }
+
+        @Override
+        public void describeTo( Description description )
+        {
+            description.appendValue( expectedRegex );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1095NpeInRunListener.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1095NpeInRunListener.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1095NpeInRunListener.java
new file mode 100644
index 0000000..f894265
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1095NpeInRunListener.java
@@ -0,0 +1,94 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+@SuppressWarnings( { "javadoc", "checkstyle:javadoctype" } )
+/**
+ *
+ * In the surefire plugin, it is possible to specify one or more RunListener when running tests with JUnit.
+ * However, it does not look like the listener is properly called by the plugin. In particular, there is a problem
+ * with the method:
+ * <pre>
+ * public void testRunStarted(Description description)
+ * </pre>
+ * it's javadoc at
+ * <a href="http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html#testRunStarted%28org.junit.runner.Description%29"/>
+ * states:
+ * "Parameters:
+ * description - describes the tests to be run "
+ * however, in all maven projects I tried ("mvn test"), the surefire plugin seems like passing a null reference instead
+ * of a Description instance that "describes the tests to be run "
+ * Note: other methods in the RunListener I tested seems fine (i.e., they get a valid Description object as input)
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1095}"/>
+ * @since 2.18
+ */
+public final class Surefire1095NpeInRunListener
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    /**
+     * Method Request.classes( String, Class[] ); exists in JUnit 4.0 - 4.4
+     * See JUnit4Reflector.
+     */
+    @Test
+    public void testRunStartedWithJUnit40()
+    {
+        unpack().setJUnitVersion( "4.0" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog( "Running JUnit 4.0" )
+            .verifyTextInLog( "testRunStarted [jiras.surefire1095.SomeTest]" );
+    }
+
+    /**
+     * Method Request.classes( Class[] ); Since of JUnit 4.5
+     * See JUnit4Reflector.
+     */
+    @Test
+    public void testRunStartedWithJUnit45()
+    {
+        unpack().setJUnitVersion( "4.5" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog( "Running JUnit 4.5" )
+            .verifyTextInLog( "testRunStarted [jiras.surefire1095.SomeTest]" );
+    }
+
+    @Test
+    public void testRunStartedWithJUnit47()
+    {
+        unpack().setJUnitVersion( "4.7" )
+            .executeTest()
+            .verifyErrorFree( 1 )
+            .verifyTextInLog( "Running JUnit 4.7" )
+            .verifyTextInLog( "testRunStarted [jiras.surefire1095.SomeTest]" );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1095-npe-in-runlistener" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java
new file mode 100644
index 0000000..e81f066
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1098BalancedRunOrderIT.java
@@ -0,0 +1,119 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.junit.Assert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.AnyOf.anyOf;
+
+/**
+ * The purpose of this IT is to assert that the run order of test classes is according to the settings:<br>
+ *
+ * runOrder=balanced<br>
+ * parallel=classes<br>
+ * threadCount=2<br>
+ * perCoreThreadCount=false<br>
+ * <br>
+ * The list of tests should be reordered to (DTest, CTest, BTest, ATest) in the second run.
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1098">SUREFIRE-1098</a>
+ * @since 2.18
+ */
+public class Surefire1098BalancedRunOrderIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void reorderedParallelClasses()
+        throws VerificationException
+    {
+        SurefireLauncher launcher = unpack();
+
+        launcher
+            // .runOrder( "balanced" ) call it in 3.x and remove it in surefire-1098-balanced-runorder/pom.xml
+            // as soon as there is prefix available "failsafe" and "surefire" in system property for this parameter.
+            .parallelClasses().threadCount( 2 ).disablePerCoreThreadCount()
+            .executeTest().verifyErrorFree( 4 );
+
+        OutputValidator validator =
+            launcher
+                // .runOrder( "balanced" ) call it in 3.x and remove it in surefire-1098-balanced-runorder/pom.xml
+                // as soon as there is prefix available "failsafe" and "surefire" in system property for this parameter.
+                .parallelClasses().threadCount( 2 ).disablePerCoreThreadCount()
+                .executeTest().verifyErrorFree( 4 );
+
+        List<String> log = printOnlyTestLines( validator );
+        assertThat( log.size(), is( 4 ) );
+        Collections.sort( log );
+        final int[] threadPoolIdsOfLongestTest = extractThreadPoolIds( log.get( 3 ) );
+        final int pool = threadPoolIdsOfLongestTest[0];
+        int thread = threadPoolIdsOfLongestTest[1];
+        assertThat( thread, anyOf( is( 1 ), is( 2 ) ) );
+        thread = thread == 1 ? 2 : 1;
+        // If the longest test class DTest is running in pool-2-thread-1, the others should run in pool-2-thread-2
+        // and vice versa.
+        assertThat( log.get( 0 ), is( testLine( "A", pool, thread ) ) );
+        assertThat( log.get( 1 ), is( testLine( "B", pool, thread ) ) );
+        assertThat( log.get( 2 ), is( testLine( "C", pool, thread ) ) );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1098-balanced-runorder" );
+    }
+
+    private static List<String> printOnlyTestLines( OutputValidator validator )
+        throws VerificationException
+    {
+        List<String> log = new ArrayList<String>( validator.loadLogLines() );
+        for ( Iterator<String> it = log.iterator(); it.hasNext(); ) {
+            String line = it.next();
+            if ( !line.startsWith( "class jiras.surefire1098." ) ) {
+                it.remove();
+            }
+        }
+        return log;
+    }
+
+    private static int[] extractThreadPoolIds(String logLine)
+    {
+        //Example to parse "class jiras.surefire1098.DTest pool-2-thread-1" into {2, 1}.
+        String t = logLine.split( " " )[2];
+        String[] ids = t.split( "-" );
+        return new int[]{ Integer.parseInt( ids[1] ), Integer.parseInt( ids[3] )};
+    }
+
+    private String testLine(String test, int pool, int thread)
+    {
+        return String.format( "class jiras.surefire1098.%sTest pool-%d-thread-%d", test, pool, thread );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1122ParallelAndFlakyTestsIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1122ParallelAndFlakyTestsIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1122ParallelAndFlakyTestsIT.java
new file mode 100644
index 0000000..2f9dca8
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1122ParallelAndFlakyTestsIT.java
@@ -0,0 +1,48 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+/**
+ * @author agudian
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1122">SUREFIRE-1122</a>
+ */
+public class Surefire1122ParallelAndFlakyTestsIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void nonParallelCreatesCorrectReport()
+    {
+        unpack( "surefire-1122-parallel-and-flakyTests" )
+            .executeTest()
+            .assertTestSuiteResults( 2, 0, 0, 0, 1 );
+    }
+
+    @Test
+    public void parallelCreatesCorrectReport()
+    {
+        unpack( "surefire-1122-parallel-and-flakyTests" )
+            .activateProfile( "parallel" )
+            .executeTest()
+            .assertTestSuiteResults( 2, 0, 0, 0, 1 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1135ImproveIgnoreMessageForTestNGIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1135ImproveIgnoreMessageForTestNGIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1135ImproveIgnoreMessageForTestNGIT.java
new file mode 100644
index 0000000..f7324c9
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1135ImproveIgnoreMessageForTestNGIT.java
@@ -0,0 +1,152 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 static org.apache.maven.shared.utils.xml.Xpp3DomBuilder.build;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileNotFoundException;
+
+import org.apache.maven.shared.utils.xml.Xpp3Dom;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * Test surefire-report on TestNG test
+ *
+ * @author <a href="mailto:michal.bocek@gmail.com">Michal Bocek</a>
+ */
+public class Surefire1135ImproveIgnoreMessageForTestNGIT
+        extends SurefireJUnit4IntegrationTestCase
+{
+
+    private enum ResultType
+    {
+        SKIPPED( "skipped" ), FAILURE( "failure" );
+
+        private final String type;
+
+        ResultType(String type)
+        {
+            this.type = type;
+        }
+
+        public String getType() {
+            return type;
+        }
+    }
+
+    @Test
+    public void testNgReport688() throws Exception {
+        testNgReport( "6.8.8", null, ResultType.SKIPPED,
+                            "Skip test",
+                                   /*"org.testng.SkipException"*/ null,
+                                   /*"SkipExceptionReportTest.java:30"*/ null );
+    }
+
+    @Test
+    public void testNgReport57() throws Exception {
+        testNgReport( "5.7", "jdk15", ResultType.SKIPPED,
+                            "Skip test",
+                                   /*"org.testng.SkipException"*/ null,
+                                   /*"SkipExceptionReportTest.java:30"*/ null );
+    }
+
+    private void testNgReport( String version, String classifier, ResultType resultType, String message, String type,
+                               String stackTrace )
+            throws Exception
+    {
+        OutputValidator outputValidator =
+                runTest( version, classifier, resultType, "/surefire-1135-improve-ignore-message-for-testng" );
+
+        Xpp3Dom[] children = readTests( outputValidator, "testng.SkipExceptionReportTest" );
+        assertThat( "Report should contains only one test case", children.length, is( 1 ) );
+
+        Xpp3Dom test = children[0];
+        assertThat( "Not expected classname", test.getAttribute( "classname" ),
+                          is( "testng.SkipExceptionReportTest" ) );
+
+        assertThat( "Not expected test name", test.getAttribute( "name" ), is( "testSkipException" ) );
+
+        children = test.getChildren( resultType.getType() );
+        assertThat( "Test should contains only one " + resultType.getType() + " element", children,
+                          is( arrayWithSize( 1 ) ) );
+
+        Xpp3Dom result = children[0];
+        if ( message == null )
+        {
+            assertThat( "Subelement message attribute must be null", result.getAttribute( "message" ),
+                              is( nullValue() ) );
+        }
+        else
+        {
+            assertThat( "Subelement should contains message attribute", result.getAttribute( "message" ),
+                              is( message ) );
+        }
+
+        if ( type == null )
+        {
+            assertThat( "Subelement type attribute must be null", result.getAttribute( "type" ), is( nullValue() ) );
+        }
+        else
+        {
+            assertThat( "Subelement should contains type attribute", result.getAttribute( "type" ), is( type ) );
+        }
+
+        if ( stackTrace == null )
+        {
+            assertThat( "Element body must be null", result.getValue() , isEmptyOrNullString() );
+        }
+        else
+        {
+            assertThat( "Element body must contains", result.getValue(), containsString( stackTrace ) );
+        }
+    }
+
+    private OutputValidator runTest( String version, String classifier, ResultType resultType, String resource )
+    {
+        int skipped = ResultType.SKIPPED.equals( resultType ) ? 1 : 0;
+        int failure = ResultType.FAILURE.equals( resultType ) ? 1 : 0;
+
+        SurefireLauncher launcher = unpack( resource ).sysProp( "testNgVersion", version );
+
+        if ( classifier != null )
+        {
+            launcher.sysProp( "testNgClassifier", classifier );
+        }
+
+        return launcher.addSurefireReportGoal()
+                .executeCurrentGoals()
+                .assertTestSuiteResults( 1, 0, failure, skipped );
+    }
+
+    private static Xpp3Dom[] readTests( OutputValidator validator, String className )
+            throws FileNotFoundException
+    {
+        Xpp3Dom testResult =
+                build( validator.getSurefireReportsXmlFile( "TEST-" + className + ".xml" ).getFileInputStream(),
+                             "UTF-8"
+                );
+        return testResult.getChildren( "testcase" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1136CwdPropagationInForkedModeIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1136CwdPropagationInForkedModeIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1136CwdPropagationInForkedModeIT.java
new file mode 100644
index 0000000..8aaecea
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1136CwdPropagationInForkedModeIT.java
@@ -0,0 +1,43 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+/**
+ * SUREFIRE-1136 Correct current working directory propagation in forked mode
+ *
+ * Note: variables expansion behaves differently on MVN 2.x since not existing variables
+ * are resolved to 'null' value so that ${surefire.forkNumber} cannot work.
+ *
+ * @author Norbert Wnuk
+ */
+public class Surefire1136CwdPropagationInForkedModeIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void testTestNgAndJUnitTogether()
+    {
+        OutputValidator outputValidator = unpack( "surefire-1136-cwd-propagation-in-forked-mode" ).executeTest();
+        outputValidator.assertTestSuiteResults( 1, 0, 0, 0 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
new file mode 100644
index 0000000..d81d7c2
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1144XmlRunTimeIT.java
@@ -0,0 +1,58 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.plugins.surefire.report.ReportTestSuite;
+import org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.apache.maven.surefire.its.fixture.HelperAssertions.extractReports;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.greaterThanOrEqualTo;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Test that runtime reported on console matches runtime in XML
+ *
+ * @author <a href="mailto:eloussi2@illinois.edu">Lamyaa Eloussi</a>
+ */
+public class Surefire1144XmlRunTimeIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void testXmlRunTime()
+        throws Exception
+    {
+        OutputValidator outputValidator = unpack( "/surefire-1144-xml-runtime" ).forkOnce().executeTest();
+
+        List<ReportTestSuite> reports = extractReports( outputValidator.getBaseDir() );
+        assertThat( reports, hasSize( 1 ) );
+
+        ReportTestSuite report = reports.get( 0 );
+        float xmlTime = report.getTimeElapsed();
+
+        assertThat( xmlTime, is(greaterThanOrEqualTo( 1.6f ) ) ); //include beforeClass and afterClass
+        outputValidator.verifyTextInLog( Float.toString( xmlTime ) ); //same time in console
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1146RerunFailedAndParameterized.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1146RerunFailedAndParameterized.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1146RerunFailedAndParameterized.java
new file mode 100644
index 0000000..f78c16a
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1146RerunFailedAndParameterized.java
@@ -0,0 +1,75 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.junit.Test;
+
+/**
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1146">SUREFIRE-1146</a>
+ */
+public class Surefire1146RerunFailedAndParameterized
+    extends SurefireJUnit4IntegrationTestCase
+{
+    
+    @Test
+    public void testsAreRerun()
+    {
+        OutputValidator outputValidator = unpack( "surefire-1146-rerunFailingTests-with-Parameterized" ).executeTest();
+        verify(outputValidator, 8, 0, 0, 0, 5);
+    }
+
+    private void verify( OutputValidator outputValidator, int run, int failures, int errors, int skipped, int flakes )
+    {
+        outputValidator.verifyTextInLog( "Flakes:" );
+        outputValidator.verifyTextInLog( "jiras.surefire1146.CustomDescriptionParameterizedTest.flakyTest[0: (Test11); Test12; Test13;](jiras.surefire1146.CustomDescriptionParameterizedTest)" );
+        outputValidator.verifyTextInLog( "Run 1: CustomDescriptionParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 2: CustomDescriptionParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 3: PASS" );
+
+        outputValidator.verifyTextInLog( "jiras.surefire1146.CustomDescriptionWithCommaParameterizedTest.flakyTest[0: (Test11), Test12, Test13;](jiras.surefire1146.CustomDescriptionWithCommaParameterizedTest)" );
+        outputValidator.verifyTextInLog( "Run 1: CustomDescriptionWithCommaParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 2: CustomDescriptionWithCommaParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 3: PASS" );
+        
+        outputValidator.verifyTextInLog( "jiras.surefire1146.CustomDescriptionWithCommaParameterizedTest.flakyTest[2: (Test31), Test32, Test33;](jiras.surefire1146.CustomDescriptionWithCommaParameterizedTest)" );
+        outputValidator.verifyTextInLog( "Run 1: CustomDescriptionWithCommaParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 2: PASS" );
+        
+        outputValidator.verifyTextInLog( "jiras.surefire1146.SimpleParameterizedTest.flakyTest[0](jiras.surefire1146.SimpleParameterizedTest)" );
+        outputValidator.verifyTextInLog( "Run 1: SimpleParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 2: SimpleParameterizedTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 3: PASS" );
+        
+        outputValidator.verifyTextInLog( "jiras.surefire1146.StandardTest.flakyTest(jiras.surefire1146.StandardTest)" );
+        outputValidator.verifyTextInLog( "Run 1: StandardTest.flakyTest:" );
+        outputValidator.verifyTextInLog( "Run 2: PASS" );
+
+        verifyStatistics( outputValidator, run, failures, errors, skipped, flakes );
+    }
+    
+    private void verifyStatistics( OutputValidator outputValidator, int run, int failures, int errors, int skipped,
+                                   int flakes )
+    {
+        outputValidator.verifyTextInLog( "Tests run: " + run + ", Failures: " + failures + ", Errors: " + errors
+                                             + ", Skipped: " + skipped + ", Flakes: " + flakes );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1152RerunFailingTestsInSuiteIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1152RerunFailingTestsInSuiteIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1152RerunFailingTestsInSuiteIT.java
new file mode 100644
index 0000000..58e951a
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1152RerunFailingTestsInSuiteIT.java
@@ -0,0 +1,64 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * SUREFIRE-1152 Assert rerunFailingTestsCount works with test suites
+ *
+ * @author Sean Flanigan
+ */
+public class Surefire1152RerunFailingTestsInSuiteIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    private static final String RUNNING_WITH_PROVIDER47 =
+        "Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider";
+
+    public OutputValidator runMethodPattern( String projectName, String... goals )
+    {
+        SurefireLauncher launcher = unpack( projectName );
+        for ( String goal : goals )
+        {
+            launcher.addGoal( goal );
+        }
+        OutputValidator outputValidator = launcher.showErrorStackTraces().debugLogging().executeVerify();
+        outputValidator.assertTestSuiteResults( 3, 0, 0, 0, 3 );
+        outputValidator.assertIntegrationTestSuiteResults( 1, 0, 0, 0 );
+        return outputValidator;
+    }
+
+    @Test
+    public void testJUnit48Provider4()
+    {
+        runMethodPattern( "surefire-1152-rerunFailingTestsCount-suite", "-P surefire-junit4" );
+    }
+
+    @Test
+    public void testJUnit48Provider47()
+    {
+        runMethodPattern( "surefire-1152-rerunFailingTestsCount-suite", "-P surefire-junit47" )
+            .verifyTextInLog( RUNNING_WITH_PROVIDER47 );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1153IncludesAndSpecifiedTestIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1153IncludesAndSpecifiedTestIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1153IncludesAndSpecifiedTestIT.java
new file mode 100644
index 0000000..3a2c826
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1153IncludesAndSpecifiedTestIT.java
@@ -0,0 +1,46 @@
+package org.apache.maven.surefire.its.jiras;
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+
+import org.junit.Test;
+
+public class Surefire1153IncludesAndSpecifiedTestIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void testSpecifiedTestInIncludes()
+    {
+        unpack( "/surefire-1153-includesAndSpecifiedTest" )
+            .setTestToRun( "#testIncluded" )
+            .executeTest()
+            .verifyErrorFree( 1 );
+    }
+
+    @Test
+    public void testSpecifiedTestNotInIncludes()
+    {
+        unpack( "/surefire-1153-includesAndSpecifiedTest" )
+            .setTestToRun( "#testNotIncluded" )
+            .executeTest()
+            .verifyErrorFree( 1 );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1158RemoveInfoLinesIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1158RemoveInfoLinesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1158RemoveInfoLinesIT.java
new file mode 100644
index 0000000..706f6b5
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1158RemoveInfoLinesIT.java
@@ -0,0 +1,142 @@
+package org.apache.maven.surefire.its.jiras;
+/*
+ * 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 org.apache.maven.surefire.its.fixture.OutputValidator;
+import org.apache.maven.surefire.its.fixture.SurefireVerifierException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.ArrayList;
+
+import static org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase.unpack;
+import static org.junit.runners.Parameterized.*;
+import static org.junit.Assert.*;
+
+/**
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1158">SUREFIRE-1158</a>
+ * @since 2.19
+ */
+@RunWith( Parameterized.class )
+public class Surefire1158RemoveInfoLinesIT
+{
+
+    @Parameters(name = "{0}")
+    public static Iterable<Object[]> data()
+    {
+        ArrayList<Object[]> args = new ArrayList<Object[]>();
+        args.add( new Object[] { "junit-option-ff", "JUnitTest", "-ff", "surefire-junit47", false, true } );
+        args.add( new Object[] { "testng-option-ff", "TestNGSuiteTest", "-ff", "surefire-testng", false, false } );
+        args.add( new Object[] { "junit-option-X", "JUnitTest", "-X", "surefire-junit47", true, true } );
+        args.add( new Object[] { "testng-option-X", "TestNGSuiteTest", "-X", "surefire-testng", true, false } );
+        args.add( new Object[] { "junit-option-e", "JUnitTest", "-e", "surefire-junit47", true, true } );
+        args.add( new Object[] { "testng-option-e", "TestNGSuiteTest", "-e", "surefire-testng", true, false } );
+        return args;
+    }
+
+    @Parameter(0)
+    public String description;
+
+    @Parameter(1)
+    public String testToRun;
+
+    @Parameter(2)
+    public String cliOption;
+
+    @Parameter(3)
+    public String provider;
+
+    @Parameter(4)
+    public boolean printsInfoLines;
+
+    @Parameter(5)
+    public boolean isJUnit;
+
+    @Test
+    public void shouldRunWithCliOption()
+        throws Exception
+    {
+        OutputValidator validator = assertTest();
+        if ( isJUnit )
+        {
+            assertJUnitTestLogs( validator );
+        }
+        else
+        {
+            assertTestNGTestLogs( validator );
+        }
+    }
+
+    private OutputValidator assertTest()
+        throws Exception
+    {
+        final String[] cli = {"--batch-mode"};
+        return unpack( getClass(), "/surefire-1158-remove-info-lines", "_" + description, cli )
+            .sysProp( "provider", provider ).addGoal( cliOption ).setTestToRun( testToRun )
+            .executeTest()
+            .verifyErrorFreeLog().assertTestSuiteResults( 1, 0, 0, 0 );
+    }
+
+    private void assertJUnitTestLogs( OutputValidator validator )
+    {
+        try
+        {
+            validator.verifyTextInLog( "Surefire report directory:" );
+            validator.verifyTextInLog( "Using configured provider org.apache.maven.surefire.junitcore.JUnitCoreProvider" );
+            validator.verifyTextInLog( "parallel='none', perCoreThreadCount=true, threadCount=0, "
+                                           + "useUnlimitedThreads=false, threadCountSuites=0, threadCountClasses=0, "
+                                           + "threadCountMethods=0, parallelOptimized=true" );
+            if ( !printsInfoLines )
+            {
+                fail();
+            }
+        }
+        catch ( SurefireVerifierException e )
+        {
+            if ( printsInfoLines )
+            {
+                fail();
+            }
+        }
+    }
+
+    private void assertTestNGTestLogs( OutputValidator validator )
+    {
+        try
+        {
+            validator.verifyTextInLog( "Surefire report directory:" );
+            validator.verifyTextInLog( "Using configured provider org.apache.maven.surefire.testng.TestNGProvider" );
+            validator.verifyTextInLog( "Configuring TestNG with: TestNGMapConfigurator" );
+            if ( !printsInfoLines )
+            {
+                fail();
+            }
+        }
+        catch ( SurefireVerifierException e )
+        {
+            if ( printsInfoLines )
+            {
+                fail();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1177TestngParallelSuitesIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1177TestngParallelSuitesIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1177TestngParallelSuitesIT.java
new file mode 100644
index 0000000..8c2c213
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1177TestngParallelSuitesIT.java
@@ -0,0 +1,59 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+import static org.apache.maven.surefire.its.fixture.HelperAssertions.assumeJavaVersion;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.startsWith;
+
+/**
+ * IT for https://issues.apache.org/jira/browse/SUREFIRE-1177
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @since 2.19
+ */
+public class Surefire1177TestngParallelSuitesIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void shouldRunTwoSuitesInParallel()
+        throws VerificationException
+    {
+        assumeJavaVersion( 1.7d );
+
+        unpack().executeTest()
+            .verifyErrorFree( 2 )
+            .assertThatLogLine( containsString( "ShouldNotRunTest#shouldNotRun()" ), is( 0 ) )
+            .assertThatLogLine( startsWith( "TestNGSuiteTest#shouldRunAndPrintItself()" ), is( 2 ) )
+            .assertThatLogLine( is( "TestNGSuiteTest#shouldRunAndPrintItself() 1." ), is( 1 ) )
+            .assertThatLogLine( is( "TestNGSuiteTest#shouldRunAndPrintItself() 2." ), is( 1 ) );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "testng-parallel-suites" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1179IT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1179IT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1179IT.java
new file mode 100644
index 0000000..e4e8e31
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1179IT.java
@@ -0,0 +1,43 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * Fix for TestNG parameter -dataproviderthreadcount.
+ */
+public class Surefire1179IT
+    extends SurefireJUnit4IntegrationTestCase
+{
+
+    @Test
+    public void suiteXmlForkCountTwoReuse()
+    {
+        unpack().executeTest().verifyErrorFreeLog().verifyTextInLog( " CONCURRENCY=30." );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1179-testng-parallel-dataprovider" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
new file mode 100644
index 0000000..74a4e46
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1185DoNotSpawnTestsIT.java
@@ -0,0 +1,62 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Surefire 2.19 spawns unnecessary tests in surefire-junit4 provider.
+ * https://issues.apache.org/jira/browse/SUREFIRE-1185
+ * Example, UnlistedTest is the problem here because it runs with filtered out methods:
+ *
+ * Running pkg.UnlistedTest
+ * Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in pkg.UnlistedTest
+ * Running pkg.RunningTest
+ * Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in pkg.RunningTest
+ *
+ * Results:
+ *
+ * Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+ */
+public class Surefire1185DoNotSpawnTestsIT
+    extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void doNotSpawnUnwantedTests()
+        throws VerificationException
+    {
+        unpack().setTestToRun( "RunningTest#test" )
+            .executeTest()
+            .assertTestSuiteResults( 1 )
+            .assertThatLogLine( containsString( "in pkg.RunningTest" ), is( 1 ) )
+            .assertThatLogLine( containsString( "in pkg.UnlistedTest" ), is( 0 ) );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1185" );
+    }
+}

http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/4d00932a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1202RerunAndSkipIT.java
----------------------------------------------------------------------
diff --git a/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1202RerunAndSkipIT.java b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1202RerunAndSkipIT.java
new file mode 100644
index 0000000..f886446
--- /dev/null
+++ b/surefire-its/src/test/java/org/apache/maven/surefire/its/jiras/Surefire1202RerunAndSkipIT.java
@@ -0,0 +1,58 @@
+package org.apache.maven.surefire.its.jiras;
+
+/*
+ * 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 org.apache.maven.it.VerificationException;
+import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
+import org.apache.maven.surefire.its.fixture.SurefireLauncher;
+import org.junit.Test;
+
+/**
+ * Allow rerunFailingTestsCount, skipAfterFailureCount together
+ *
+ * @author <a href="mailto:tibordigana@apache.org">Tibor Digana (tibor17)</a>
+ * @see <a href="https://issues.apache.org/jira/browse/SUREFIRE-1202">SUREFIRE-1202</a>
+ * @since 2.19.1
+ */
+public class Surefire1202RerunAndSkipIT
+        extends SurefireJUnit4IntegrationTestCase
+{
+    @Test
+    public void junit47()
+            throws VerificationException
+    {
+        unpack().executeTest()
+                .assertTestSuiteResults( 5, 0, 0, 3, 4 );
+    }
+
+    @Test
+    public void junit4()
+            throws VerificationException
+    {
+        unpack().addGoal( "-Pjunit4" )
+                .executeTest()
+                .assertTestSuiteResults( 5, 0, 0, 3, 4 );
+    }
+
+    private SurefireLauncher unpack()
+    {
+        return unpack( "surefire-1202-rerun-and-failfast" );
+    }
+}