[SUREFIRE-1194] reporter argument does not work for TestNG
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/2261bcea Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/2261bcea Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/2261bcea Branch: refs/heads/master Commit: 2261bcea68d4cf1dbae437afa6be0b4a06916b35 Parents: 7fe7a2a Author: Tibor17 <tibo...@lycos.com> Authored: Tue Dec 15 01:28:02 2015 +0100 Committer: Tibor17 <tibo...@lycos.com> Committed: Tue Dec 15 01:29:32 2015 +0100 ---------------------------------------------------------------------- .../plugin/surefire/AbstractSurefireMojo.java | 11 ++--- .../src/site/apt/examples/testng.apt.vm | 2 +- .../its/CheckTestNgListenerReporterIT.java | 42 ++++++++++++-------- .../testng/conf/TestNG513Configurator.java | 2 +- .../testng/conf/TestNGMapConfigurator.java | 4 +- 5 files changed, 33 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/2261bcea/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java ---------------------------------------------------------------------- diff --git a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java index 3e0d840..f169446 100644 --- a/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java +++ b/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java @@ -1154,19 +1154,16 @@ public abstract class AbstractSurefireMojo range = VersionRange.createFromVersionSpec( "[5.14.1,5.14.3)" ); if ( range.containsVersion( version ) ) { + log.warn( "The 'reporter' or 'listener' may not work properly in TestNG 5.14.1 and 5.14.2." ); return "org.apache.maven.surefire.testng.conf.TestNG5141Configurator"; } range = VersionRange.createFromVersionSpec( "[5.14.3,6.0)" ); if ( range.containsVersion( version ) ) { - if ( version.equals( new DefaultArtifactVersion( "5.14.3" ) ) ) + if ( version.equals( new DefaultArtifactVersion( "[5.14.3,5.14.5]" ) ) ) { - throw new MojoExecutionException( "Due to a bad formatted pom.xml, " - + "TestNG 5.14.3 is not supported" ); - } - if ( VersionRange.createFromVersionSpec( "[5.14.4,5.14.5]" ).containsVersion( version ) ) - { - log.warn( "Due to a bad formatted pom.xml, TestNG 5.14.4 and 5.14.5 may not work" ); + throw new MojoExecutionException( "TestNG 5.14.3-5.14.5 is not supported. " + + "System dependency org.testng:guice missed path." ); } return "org.apache.maven.surefire.testng.conf.TestNG5143Configurator"; } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/2261bcea/maven-surefire-plugin/src/site/apt/examples/testng.apt.vm ---------------------------------------------------------------------- diff --git a/maven-surefire-plugin/src/site/apt/examples/testng.apt.vm b/maven-surefire-plugin/src/site/apt/examples/testng.apt.vm index 85a6349..765e564 100644 --- a/maven-surefire-plugin/src/site/apt/examples/testng.apt.vm +++ b/maven-surefire-plugin/src/site/apt/examples/testng.apt.vm @@ -286,7 +286,7 @@ Using TestNG You can implement TestNG listener interface <<<org.testng.ITestListener>>> in a separate test artifact <<<your-testng-listener-artifact>>> with scope=test, or in project test source code <<<src/test/java>>>. You can filter test artifacts by the parameter <<<dependenciesToScan>>> to load its classes - in current ClassLoader of surefire-testng provider. + in current ClassLoader of surefire-testng provider. The TestNG reporter class should implement <<<org.testng.IReporter>>>. * The level of verbosity http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/2261bcea/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgListenerReporterIT.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgListenerReporterIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgListenerReporterIT.java index 8e25e5d..3558bce 100644 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgListenerReporterIT.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/CheckTestNgListenerReporterIT.java @@ -20,8 +20,6 @@ package org.apache.maven.surefire.its; */ import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase; -import org.apache.maven.surefire.its.fixture.SurefireLauncher; -import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -29,18 +27,20 @@ import org.junit.runners.Parameterized; import java.util.Arrays; import java.util.Collection; +import static org.junit.runners.Parameterized.Parameter; +import static org.junit.runners.Parameterized.Parameters; + /** * Test simple TestNG listener and reporter * * @author <a href="mailto:dfabul...@apache.org">Dan Fabulich</a> * @author <a href="mailto:krosenv...@apache.org">Kristian Rosenvold</a> */ -@RunWith(Parameterized.class) +@RunWith( Parameterized.class ) public class CheckTestNgListenerReporterIT extends SurefireJUnit4IntegrationTestCase { - - @Parameterized.Parameters(name = "{index}: TestNG {0}") + @Parameters( name = "{index}: TestNG {0}" ) public static Collection<Object[]> data() { return Arrays.asList(new Object[][] { @@ -49,34 +49,42 @@ public class CheckTestNgListenerReporterIT { "5.10" }, { "5.13" }, // "reporterslist" param becomes String instead of List<ReporterConfig> // "listener" param becomes String instead of List<Class> + + // configure(Map) in 5.14.1 and 5.14.2 is transforming List<Class> into a String with a space as separator. + // Then configure(CommandLineArgs) splits this String into a List<String> with , or ; as separator => fail. + // If we used configure(CommandLineArgs), we would not have the problem with white spaces. //{ "5.14.1" }, // "listener" param becomes List instead of String // Fails: Issue with 5.14.1 and 5.14.2 => join with <space>, split with "," // TODO will work with "configure(CommandLineArgs)" //{ "5.14.2" }, // ReporterConfig is not available + //{ "5.14.3" }, // TestNG uses "reporter" instead of "reporterslist" // Both String or List are possible for "listener" - // Fails: Bad formatted pom => transitive dependencies are missing - { "5.14.4" }, // Usage of org.testng:guice - // Caution: Some TestNG features may fail with 5.14.4 and 5.14.5 due to missing dependency + // Fails: not able to test due to system dependency org.testng:guice missed the path and use to break CI + // ClassNotFoundException: com.beust.jcommander.ParameterException + + //{ "5.14.4" }, { "5.14.5" }, // Fails: not able to test due to system dependency org.testng:guice missed the path and use to break CI + // ClassNotFoundException: com.beust.jcommander.ParameterException + { "5.14.6" }, // Usage of org.testng:guice removed { "5.14.9" }, // Latest 5.14.x TestNG version { "6.0" }, - { "6.9.9" } // Current latest TestNG version + { "6.9.9" } // Currently latest TestNG version }); } - @Parameterized.Parameter + @Parameter public String version; - private SurefireLauncher verifierStarter; @Test public void testNgListenerReporter() { - verifierStarter = unpack( "testng-listener-reporter", "_" + version ); - verifierStarter.resetInitialGoals( version ); - verifierStarter.executeTest().verifyErrorFree( 1 ) - .getTargetFile( "resultlistener-output.txt" ).assertFileExists() - .getTargetFile( "suitelistener-output.txt" ).assertFileExists() - .getTargetFile( "reporter-output.txt" ).assertFileExists(); + unpack( "testng-listener-reporter", "_" + version ) + .resetInitialGoals( version ) + .executeTest() + .verifyErrorFree( 1 ) + .getTargetFile( "resultlistener-output.txt" ).assertFileExists() + .getTargetFile( "suitelistener-output.txt" ).assertFileExists() + .getTargetFile( "reporter-output.txt" ).assertFileExists(); } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/2261bcea/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG513Configurator.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG513Configurator.java b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG513Configurator.java index f38df08..ce44dd4 100644 --- a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG513Configurator.java +++ b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNG513Configurator.java @@ -29,7 +29,7 @@ public class TestNG513Configurator { @Override - protected Object convertReporterConfig( String val ) + protected Object convertReporterConfig( Object val ) { return val; } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/2261bcea/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java index fcf9a91..96e0b85 100755 --- a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java +++ b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/conf/TestNGMapConfigurator.java @@ -91,7 +91,7 @@ public class TestNGMapConfigurator { // for TestNG 5.6 or higher // TODO support multiple reporters? - val = convertReporterConfig( entry.getValue() ); + val = convertReporterConfig( val ); key = "reporterslist"; } else if ( "junit".equals( key ) ) @@ -142,7 +142,7 @@ public class TestNGMapConfigurator } // ReporterConfig only became available in later versions of TestNG - protected Object convertReporterConfig( String val ) + protected Object convertReporterConfig( Object val ) { final String reporterConfigClassName = "org.testng.ReporterConfig"; try