Updated Branches: refs/heads/master eedf23978 -> d342273c3
[SUREFIRE-839] Tests not matching categories would fail build Fixed with IT Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/d342273c Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/d342273c Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/d342273c Branch: refs/heads/master Commit: d342273c30c0ec8aa5ba58603b1d9ceea5039278 Parents: eedf239 Author: Kristian Rosenvold <kristian.rosenv...@gmail.com> Authored: Wed Dec 5 22:36:19 2012 +0100 Committer: Kristian Rosenvold <kristian.rosenv...@gmail.com> Committed: Wed Dec 5 22:36:19 2012 +0100 ---------------------------------------------------------------------- surefire-integration-tests/pom.xml | 13 ++- .../surefire/its/fixture/SurefireLauncher.java | 8 +- .../jiras/Surefire839TestWithoutCategoriesIT.java | 33 ++++++ .../src/test/resources/junit48-categories/pom.xml | 10 +- .../surefire/junitcore/JUnitCoreProvider.java | 83 ++++++++++----- .../maven/surefire/junitcore/JUnitCoreWrapper.java | 23 ++--- 6 files changed, 117 insertions(+), 53 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/pom.xml ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/pom.xml b/surefire-integration-tests/pom.xml index 053281c..adc5cc4 100644 --- a/surefire-integration-tests/pom.xml +++ b/surefire-integration-tests/pom.xml @@ -18,7 +18,8 @@ ~ under the License. --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> @@ -36,7 +37,7 @@ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <it.settings.showPasswords>false</it.settings.showPasswords> <testng.version>5.7</testng.version> - <surefire.threadcount>4</surefire.threadcount> + <surefire.threadcount>5</surefire.threadcount> <mavenHomeUsed>${maven.home}</mavenHomeUsed> <useInterpolatedSettings>false</useInterpolatedSettings> </properties> @@ -77,7 +78,7 @@ <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-shared-utils</artifactId> - </dependency> + </dependency> </dependencies> <build> @@ -90,13 +91,15 @@ <threadCount>1</threadCount> <perCoreThreadCount>false</perCoreThreadCount> - <!-- Pass current surefire version to the main suite so that it --> + <!-- Pass current surefire version to the main suite so that it --> <!-- can forward to all integration test projects. SUREFIRE-513 --> <systemPropertyVariables> <surefire.version>${project.version}</surefire.version> <testng.version>${testng.version}</testng.version> <maven.home>${mavenHomeUsed}</maven.home> - <maven.settings.file>${project.basedir}/../surefire-setup-integration-tests/target/private/it-settings.xml</maven.settings.file> + <maven.settings.file> + ${project.basedir}/../surefire-setup-integration-tests/target/private/it-settings.xml + </maven.settings.file> <maven.repo.local>${project.basedir}/../surefire-setup-integration-tests/target/it-repo</maven.repo.local> <maven.test.tmpdir>${project.build.directory}</maven.test.tmpdir> <user.localRepository>${settings.localRepository}</user.localRepository> http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java index 36b5c53..0c0e1da 100755 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/fixture/SurefireLauncher.java @@ -108,13 +108,14 @@ public class SurefireLauncher File testDir = new File( tempDir, resourcePath ); FileUtils.deleteDirectory( testDir ); - return ResourceExtractor.extractResourceToDestination( cl, resourcePath, tempDir, true ); + File file = ResourceExtractor.extractResourceToDestination( cl, resourcePath, tempDir, true ); + return file.getCanonicalFile(); } private File getUnpackDir() { String tempDirPath = System.getProperty( "maven.test.tmpdir", System.getProperty( "java.io.tmpdir" ) ); - return new File( tempDirPath, testClass.getSimpleName() + File.separator + getTestMethodName() + suffix); + return new File( tempDirPath, testClass.getSimpleName() + File.separator + getTestMethodName() + suffix ); } String getTestMethodName() @@ -123,7 +124,8 @@ public class SurefireLauncher StackTraceElement[] stackTrace = getStackTraceElements(); StackTraceElement topInTestClass = null; topInTestClass = findTopElemenent( stackTrace, testClass ); - if (topInTestClass == null){ + if ( topInTestClass == null ) + { // Look in superclass... topInTestClass = findTopElemenent( stackTrace, testClass.getSuperclass() ); } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java new file mode 100755 index 0000000..6c03349 --- /dev/null +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/jiras/Surefire839TestWithoutCategoriesIT.java @@ -0,0 +1,33 @@ +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 Surefire839TestWithoutCategoriesIT + extends SurefireJUnit4IntegrationTestCase +{ + @Test + public void classWithoutCategory() + { + unpack( "junit48-categories" ).setJUnitVersion( "4.11" ).executeTest().verifyErrorFree( 2 ); + } +} http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml b/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml index 802f4d6..02914f8 100644 --- a/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml +++ b/surefire-integration-tests/src/test/resources/junit48-categories/pom.xml @@ -30,16 +30,16 @@ <properties> - <junitVersion>4.8.1</junitVersion> - <groups>junit4.CategoryA,junit4.CategoryB</groups> - <excludedGroups></excludedGroups> + <junit.version>4.8.1</junit.version> + <groups>junit4.CategoryA,junit4.CategoryB</groups> + <excludedGroups></excludedGroups> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> - <version>${junitVersion}</version> + <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> @@ -60,7 +60,7 @@ <version>${surefire.version}</version> <configuration> <groups>${groups}</groups> - <excludedGroups>${excludedGroups}</excludedGroups> + <excludedGroups>${excludedGroups}</excludedGroups> </configuration> <dependencies> <dependency> http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java index afe6888..81ea524 100644 --- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java +++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreProvider.java @@ -103,6 +103,22 @@ public class JUnitCoreProvider return testsToRun.iterator(); } + private boolean containsSomethingRunnable( TestsToRun testsToRun, Filter filter ) + { + if ( filter == null ) + { + return true; + } + for ( Class o : testsToRun.getLocatedClasses() ) + { + if ( canRunClass( filter, o ) ) + { + return true; + } + } + return false; + } + public RunResult invoke( Object forkTestSet ) throws TestSetFailedException, ReporterException { @@ -116,32 +132,39 @@ public class JUnitCoreProvider if ( testsToRun == null ) { - if (forkTestSet instanceof TestsToRun) + if ( forkTestSet instanceof TestsToRun ) { testsToRun = (TestsToRun) forkTestSet; } - else if (forkTestSet instanceof Class) + else if ( forkTestSet instanceof Class ) { - testsToRun = TestsToRun.fromClass( (Class) forkTestSet ); - } else + Class theClass = (Class) forkTestSet; + testsToRun = TestsToRun.fromClass( theClass ); + } + else { testsToRun = getSuitesAsList( filter ); } } - final Map<String, TestSet> testSetMap = new ConcurrentHashMap<String, TestSet>(); + if ( containsSomethingRunnable( testsToRun, filter ) ) + { - RunListener listener = ConcurrentReporterManager.createInstance( testSetMap, reporterFactory, - jUnitCoreParameters.isParallelClasses(), - jUnitCoreParameters.isParallelBoth(), - consoleLogger ); + final Map<String, TestSet> testSetMap = new ConcurrentHashMap<String, TestSet>(); - ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) listener ); + RunListener listener = ConcurrentReporterManager.createInstance( testSetMap, reporterFactory, + jUnitCoreParameters.isParallelClasses(), + jUnitCoreParameters.isParallelBoth(), + consoleLogger ); - org.junit.runner.notification.RunListener jUnit4RunListener = new JUnitCoreRunListener( listener, testSetMap ); - customRunListeners.add( 0, jUnit4RunListener ); + ConsoleOutputCapture.startCapture( (ConsoleOutputReceiver) listener ); - JUnitCoreWrapper.execute( testsToRun, jUnitCoreParameters, customRunListeners, filter ); + org.junit.runner.notification.RunListener jUnit4RunListener = + new JUnitCoreRunListener( listener, testSetMap ); + customRunListeners.add( 0, jUnit4RunListener ); + + JUnitCoreWrapper.execute( testsToRun, jUnitCoreParameters, customRunListeners, filter ); + } return reporterFactory.close(); } @@ -159,27 +182,35 @@ public class JUnitCoreProvider while ( it.hasNext() ) { Class<?> clazz = it.next(); - boolean isCategoryAnnotatedClass = jUnit48Reflector.isCategoryAnnotationPresent( clazz ); - Description d = Description.createSuiteDescription( clazz ); - if ( filter.shouldRun( d ) ) + if ( canRunClass( filter, clazz ) ) { res.add( clazz ); } - else + } + return new TestsToRun( res ); + } + + private boolean canRunClass( Filter filter, Class<?> clazz ) + { + boolean isCategoryAnnotatedClass = jUnit48Reflector.isCategoryAnnotationPresent( clazz ); + Description d = Description.createSuiteDescription( clazz ); + if ( filter.shouldRun( d ) ) + { + return true; + } + else + { + for ( Method method : clazz.getMethods() ) { - for ( Method method : clazz.getMethods() ) + final Description testDescription = + Description.createTestDescription( clazz, method.getName(), method.getAnnotations() ); + if ( filter.shouldRun( testDescription ) ) { - final Description testDescription = - Description.createTestDescription( clazz, method.getName(), method.getAnnotations() ); - if ( filter.shouldRun( testDescription ) ) - { - res.add( clazz ); - break; - } + return true; } } } - return new TestsToRun( res ); + return false; } private Filter createJUnit48Filter() http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/d342273c/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java index bfd4dff..aeda523 100644 --- a/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java +++ b/surefire-providers/surefire-junit47/src/main/java/org/apache/maven/surefire/junitcore/JUnitCoreWrapper.java @@ -19,13 +19,12 @@ package org.apache.maven.surefire.junitcore; * under the License. */ -import java.util.Iterator; import java.util.List; import java.util.concurrent.ExecutionException; - import org.apache.maven.surefire.common.junit4.JUnit4RunListener; import org.apache.maven.surefire.testset.TestSetFailedException; import org.apache.maven.surefire.util.TestsToRun; + import org.junit.runner.Computer; import org.junit.runner.JUnitCore; import org.junit.runner.Request; @@ -54,18 +53,14 @@ class JUnitCoreWrapper try { - Iterator classIter = testsToRun.iterator(); - while (classIter.hasNext()) - { - Request req = Request.classes( computer, new Class[]{ (Class) classIter.next() }); - if ( filter != null ) - { - req = req.filterWith( filter ); - } - - final Result run = junitCore.run( req ); - JUnit4RunListener.rethrowAnyTestMechanismFailures( run ); - } + Request req = Request.classes( computer, testsToRun.getLocatedClasses() ); + if ( filter != null ) + { + req = req.filterWith( filter ); + } + + final Result run = junitCore.run( req ); + JUnit4RunListener.rethrowAnyTestMechanismFailures( run ); } finally {