Repository: maven-surefire Updated Branches: refs/heads/master a85d3276d -> 9826145df
[SUREFIRE-1453] Allow to specify non existant classes as groups Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/9826145d Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/9826145d Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/9826145d Branch: refs/heads/master Commit: 9826145dfea0e23894e2df48f64dd20a5d465c85 Parents: a85d327 Author: Enrico Olivelli <eolive...@apache.org> Authored: Fri Dec 15 08:53:27 2017 +0100 Committer: Tibor17 <tibordig...@apache.org> Committed: Tue Dec 19 00:01:00 2017 +0100 ---------------------------------------------------------------------- .../group/match/SingleGroupMatcher.java | 5 +- .../group/match/SingleGroupMatcherTest.java | 7 ++ .../surefire/its/JUnit48TestCategoriesIT.java | 112 ++++++++++++++----- 3 files changed, 93 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/9826145d/surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/SingleGroupMatcher.java ---------------------------------------------------------------------- diff --git a/surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/SingleGroupMatcher.java b/surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/SingleGroupMatcher.java index 65181fa..7f5f247 100644 --- a/surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/SingleGroupMatcher.java +++ b/surefire-grouper/src/main/java/org/apache/maven/surefire/group/match/SingleGroupMatcher.java @@ -139,7 +139,10 @@ public class SingleGroupMatcher } catch ( ClassNotFoundException e ) { - throw new RuntimeException( "Unable to load category: " + enabled, e ); + // class is not available at runtime, for instance this would happen in reactor projects + // in which not all modules have the required class on the classpath/module path + System.out.println( "[WARNING] Couldn't load group class '" + enabled + "' in Surefire|Failsafe plugin. " + + "The group class is ignored!" ); } } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/9826145d/surefire-grouper/src/test/java/org/apache/maven/surefire/group/match/SingleGroupMatcherTest.java ---------------------------------------------------------------------- diff --git a/surefire-grouper/src/test/java/org/apache/maven/surefire/group/match/SingleGroupMatcherTest.java b/surefire-grouper/src/test/java/org/apache/maven/surefire/group/match/SingleGroupMatcherTest.java index c9f12f1..31d959f 100644 --- a/surefire-grouper/src/test/java/org/apache/maven/surefire/group/match/SingleGroupMatcherTest.java +++ b/surefire-grouper/src/test/java/org/apache/maven/surefire/group/match/SingleGroupMatcherTest.java @@ -37,6 +37,13 @@ public class SingleGroupMatcherTest assertTrue( matcher.enabled( SingleGroupMatcher.class ) ); } + public void testMatchUnknownClass() + { + SingleGroupMatcher matcher = new SingleGroupMatcher( "BadClass" ); + matcher.loadGroupClasses( Thread.currentThread().getContextClassLoader() ); + assertTrue( matcher.enabled( "BadClass" ) ); + } + public void testMatchClassNameWithoutPackage() { SingleGroupMatcher matcher = new SingleGroupMatcher( SingleGroupMatcher.class.getSimpleName() ); http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/9826145d/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit48TestCategoriesIT.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit48TestCategoriesIT.java b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit48TestCategoriesIT.java index 70b614f..fdb56f7 100644 --- a/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit48TestCategoriesIT.java +++ b/surefire-integration-tests/src/test/java/org/apache/maven/surefire/its/JUnit48TestCategoriesIT.java @@ -19,13 +19,10 @@ package org.apache.maven.surefire.its; * 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 java.io.IOException; - /** * Test project using "groups" support * @@ -33,61 +30,116 @@ import java.io.IOException; * @author <a href="mailto:krosenv...@apache.org">Kristian Rosenvold</a> */ public class JUnit48TestCategoriesIT - extends SurefireJUnit4IntegrationTestCase + extends SurefireJUnit4IntegrationTestCase { @Test public void testCategoriesAB() - throws Exception { runAB( unpacked() ); } - @Test public void testCategoriesABForkAlways() - throws Exception { - runAB( unpacked() ); + runAB( unpacked().forkAlways() ); } @Test - public void testCategoriesAC() - throws Exception + public void testCategoriesACFullyQualifiedClassName() { - runAC( unpacked() ); + runACFullyQualifiedClassName( unpacked() ); } - private void runAB( SurefireLauncher unpacked ) - throws VerificationException + @Test + public void testCategoriesACFullyQualifiedClassNameForkAlways() { - unpacked.executeTest().verifyErrorFreeLog().assertTestSuiteResults( 3, 0, 0, 0 ).verifyTextInLog( - "catA: 1" ).verifyTextInLog( "catB: 1" ).verifyTextInLog( "catC: 0" ).verifyTextInLog( "catNone: 0" ); + runACFullyQualifiedClassName( unpacked().forkAlways() ); } @Test - public void testCategoriesACForkAlways() - throws Exception + public void testCategoriesACClassNameSuffix() { - runAC( unpacked().forkAlways() ); + runACClassNameSuffix( unpacked() ); } + @Test + public void testCategoriesACClassNameSuffixForkAlways() + { + runACClassNameSuffix( unpacked().forkAlways() ); + } - private void runAC( SurefireLauncher surefireLauncher ) - throws Exception + @Test + public void testCategoriesBadCategory() { - surefireLauncher.groups( - "junit4.CategoryA,junit4.CategoryC" ).executeTest().verifyErrorFreeLog().assertTestSuiteResults( 6, 0, 0, - 0 ).verifyTextInLog( - "catA: 1" ).verifyTextInLog( "catB: 0" ).verifyTextInLog( "catC: 1" ).verifyTextInLog( - "catNone: 0" ).verifyTextInLog( "mA: 1" ).verifyTextInLog( - "mB: 1" ) // This seems questionable !? The class is annotated with category C and method with B - .verifyTextInLog( "mC: 1" ).verifyTextInLog( "CatNone: 1" ); + runBadCategory( unpacked() ); } - private SurefireLauncher unpacked() - throws VerificationException, IOException + @Test + public void testBadCategoryForkAlways() { - return unpack( "/junit48-categories" ); // .debugSurefireFork(); + runBadCategory( unpacked().forkAlways() ); } + private static void runAB( SurefireLauncher unpacked ) + { + unpacked.executeTest() + .verifyErrorFreeLog() + .assertTestSuiteResults( 3, 0, 0, 0 ) + .verifyTextInLog( "catA: 1" ) + .verifyTextInLog( "catB: 1" ) + .verifyTextInLog( "catC: 0" ) + .verifyTextInLog( "catNone: 0" ); + } + + private static void runACClassNameSuffix( SurefireLauncher unpacked ) + { + unpacked.groups( "CategoryA,CategoryC" ) + .executeTest() + .verifyErrorFreeLog() + .assertTestSuiteResults( 6, 0, 0, 0 ) + .verifyTextInLog( "catA: 1" ) + .verifyTextInLog( "catB: 0" ) + .verifyTextInLog( "catC: 1" ) + .verifyTextInLog( "catNone: 0" ) + .verifyTextInLog( "mA: 1" ) + + // This seems questionable !? The class is annotated with category C and method with B + .verifyTextInLog( "mB: 1" ) + + .verifyTextInLog( "mC: 1" ) + .verifyTextInLog( "CatNone: 1" ); + } + + private static void runACFullyQualifiedClassName( SurefireLauncher unpacked ) + { + unpacked.groups( "junit4.CategoryA,junit4.CategoryC" ) + .executeTest() + .verifyErrorFreeLog() + .assertTestSuiteResults( 6, 0, 0, 0 ) + .verifyTextInLog( "catA: 1" ) + .verifyTextInLog( "catB: 0" ) + .verifyTextInLog( "catC: 1" ) + .verifyTextInLog( "catNone: 0" ) + .verifyTextInLog( "mA: 1" ) + + // This seems questionable !? The class is annotated with category C and method with B + .verifyTextInLog( "mB: 1" ) + + .verifyTextInLog( "mC: 1" ) + .verifyTextInLog( "CatNone: 1" ); + } + + private static void runBadCategory( SurefireLauncher unpacked ) + { + unpacked.failIfNoTests( false ) + .groups( "BadCategory" ) + .executeTest() + .verifyErrorFreeLog(); + } + + private SurefireLauncher unpacked() + { + return unpack( "/junit48-categories" ); + // .debugSurefireFork(); + } }