Match class names by first converting to a path pattern
Project: http://git-wip-us.apache.org/repos/asf/maven-surefire/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/bbf9b251 Tree: http://git-wip-us.apache.org/repos/asf/maven-surefire/tree/bbf9b251 Diff: http://git-wip-us.apache.org/repos/asf/maven-surefire/diff/bbf9b251 Branch: refs/heads/master Commit: bbf9b25189ca4a87db3cb2573b3715ed554557f1 Parents: a439d07 Author: Jörn Horstmann <g...@jhorstmann.net> Authored: Sun Dec 21 15:34:33 2014 +0100 Committer: Jörn Horstmann <g...@jhorstmann.net> Committed: Sun Dec 21 15:34:33 2014 +0100 ---------------------------------------------------------------------- .../surefire/common/junit48/FilterFactory.java | 43 +++++++------------- .../common/junit48/FilterFactoryTest.java | 12 +----- 2 files changed, 17 insertions(+), 38 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bbf9b251/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java index dbab6dd..3f81f87 100644 --- a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java +++ b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/FilterFactory.java @@ -119,18 +119,19 @@ public class FilterFactory private static class RequestedTestMethod { - final String className; - final String methodName; + final String classPattern; + final String methodPattern; private RequestedTestMethod( String className, String methodName ) { - this.className = className; - this.methodName = methodName; + // convert to path pattern so we can use the same matching logic as in includes + this.classPattern = className == null ? null : "**/" + convertToPath( className ); + this.methodPattern = methodName; } - private static boolean isSelectorPattern( String pattern ) + private static String convertToPath( String className ) { - return pattern.contains( "*" ) || pattern.contains( "?" ); + return className.replace( '.', '/' ); } public boolean isDescriptionmatch( Description description ) @@ -138,33 +139,18 @@ public class FilterFactory String describedClassName = description.getClassName(); String describedMethodName = description.getMethodName(); - if ( methodName != null ) + if ( methodPattern != null ) { - if ( describedMethodName == null || !SelectorUtils.match( methodName, describedMethodName ) ) + if ( describedMethodName == null || !SelectorUtils.match( methodPattern, describedMethodName ) ) { return false; } } - if ( className != null && describedClassName != null ) + if ( classPattern != null && describedClassName != null ) { - if ( !isSelectorPattern( className ) ) - { - // existing implementation seems to be a simple contains check - if ( describedClassName.contains( className ) ) - { - return true; - } - } - else - { - if ( SelectorUtils.match( className, describedClassName ) ) - { - return true; - } - } - - return false; + String describedPath = convertToPath( describedClassName ); + return SelectorUtils.matchPath( classPattern, describedPath ); } return true; @@ -181,8 +167,9 @@ public class FilterFactory if ( !requestString.contains( "#" ) ) { - // old way before SUREFIRE-745, filter only by method name - // class name filtering is done separately + // a single method was specified, the leading hash sign was split off by + // {@link org.apache.maven.plugin.surefire.SurefirePlugin#getTestMethod()} + // filtering by class name is done via modified includes also in SurefirePlugin requestedTestMethods.add( new RequestedTestMethod( null, requestString ) ); } else http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/bbf9b251/surefire-providers/common-junit48/src/test/java/org/apache/maven/surefire/common/junit48/FilterFactoryTest.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit48/src/test/java/org/apache/maven/surefire/common/junit48/FilterFactoryTest.java b/surefire-providers/common-junit48/src/test/java/org/apache/maven/surefire/common/junit48/FilterFactoryTest.java index bf9dd98..f44ee0a 100644 --- a/surefire-providers/common-junit48/src/test/java/org/apache/maven/surefire/common/junit48/FilterFactoryTest.java +++ b/surefire-providers/common-junit48/src/test/java/org/apache/maven/surefire/common/junit48/FilterFactoryTest.java @@ -112,17 +112,9 @@ public class FilterFactoryTest } @Test - public void shouldMatchEndOfClassNameWithMethod() + public void shouldMatchSimpleClassNameWithMethod() { - Filter exactFilter = createMethodFilter( "FirstClass#testMethod" ); - assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); - assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); - } - - @Test - public void shouldMatchPartialClassNameWithMethod() - { - Filter exactFilter = createMethodFilter( "FirstClass#testMethod" ); + Filter exactFilter = createMethodFilter( "FilterFactoryTest$FirstClass#testMethod" ); assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); }