Repository: maven-surefire Updated Branches: refs/heads/master e29d4e979 -> 021b263ab
http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-integration-tests/src/test/resources/surefire-1185/pom.xml ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/surefire-1185/pom.xml b/surefire-integration-tests/src/test/resources/surefire-1185/pom.xml new file mode 100644 index 0000000..c7fac09 --- /dev/null +++ b/surefire-integration-tests/src/test/resources/surefire-1185/pom.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> +<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/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.maven.surefire</groupId> + <artifactId>it-parent</artifactId> + <version>1.0</version> + <relativePath>../pom.xml</relativePath> + </parent> + <groupId>org.apache.maven.plugins.surefire</groupId> + <artifactId>jiras-surefire-1185</artifactId> + <version>1.0</version> + <url>http://maven.apache.org</url> + <developers> + <developer> + <id>tibordigana</id> + <name>Tibor DigaÅa (tibor17)</name> + <email>tibordig...@apache.org</email> + <roles> + <role>PMC</role> + </roles> + <timezone>Europe/Bratislava</timezone> + </developer> + </developers> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.0</version> + <scope>test</scope> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.5</source> + <target>1.5</target> + </configuration> + </plugin> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <dependencies> + <dependency> + <groupId>org.apache.maven.surefire</groupId> + <artifactId>surefire-junit4</artifactId> + <version>${surefire.version}</version> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> +</project> http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/RunningTest.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/RunningTest.java b/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/RunningTest.java new file mode 100644 index 0000000..2469bd3 --- /dev/null +++ b/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/RunningTest.java @@ -0,0 +1,29 @@ +package pkg; + +/* + * 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.junit.Test; + +public class RunningTest { + @Test + public void test() + { + } +} http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/UnlistedTest.java ---------------------------------------------------------------------- diff --git a/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/UnlistedTest.java b/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/UnlistedTest.java new file mode 100644 index 0000000..8348673 --- /dev/null +++ b/surefire-integration-tests/src/test/resources/surefire-1185/src/test/java/pkg/UnlistedTest.java @@ -0,0 +1,29 @@ +package pkg; + +/* + * 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.junit.Test; + +public class UnlistedTest { + @Test + public void test() + { + } +} http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/CombinedCategoryFilter.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/CombinedCategoryFilter.java b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/CombinedCategoryFilter.java index 9cd2131..aefc208 100644 --- a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/CombinedCategoryFilter.java +++ b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/CombinedCategoryFilter.java @@ -40,11 +40,11 @@ final class CombinedCategoryFilter @Override public boolean shouldRun( Description description ) { - return ( includedFilters.isEmpty() || inOneOfFilters( includedFilters, description ) ) - && ( excludedFilters.isEmpty() || !inOneOfFilters( excludedFilters, description ) ); + return ( includedFilters.isEmpty() || anyFilterMatchesDescription( includedFilters, description ) ) + && ( excludedFilters.isEmpty() || allFiltersMatchDescription( excludedFilters, description ) ); } - private boolean inOneOfFilters( Collection<Filter> filters, Description description ) + private boolean anyFilterMatchesDescription( Collection<Filter> filters, Description description ) { for ( Filter f : filters ) { @@ -56,6 +56,18 @@ final class CombinedCategoryFilter return false; } + private boolean allFiltersMatchDescription( Collection<Filter> filters, Description description ) + { + for ( Filter f : filters ) + { + if ( !f.shouldRun( description ) ) + { + return false; + } + } + return true; + } + @Override public String describe() { http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/MethodFilter.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/MethodFilter.java b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/MethodFilter.java index 1af5679..a275634 100644 --- a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/MethodFilter.java +++ b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/MethodFilter.java @@ -43,11 +43,11 @@ final class MethodFilter Collection<Filter> excludedFilters = new LinkedHashSet<Filter>(); for ( ResolvedTest test : testResolver.getIncludedPatterns() ) { - includedFilters.add( new RequestedTest( test ) ); + includedFilters.add( new RequestedTest( test, true ) ); } for ( ResolvedTest test : testResolver.getExcludedPatterns() ) { - excludedFilters.add( new RequestedTest( test ) ); + excludedFilters.add( new RequestedTest( test, false ) ); } combinedFilter = new CombinedCategoryFilter( includedFilters, excludedFilters ); } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/RequestedTest.java ---------------------------------------------------------------------- diff --git a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/RequestedTest.java b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/RequestedTest.java index 567db26..505df6e 100644 --- a/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/RequestedTest.java +++ b/surefire-providers/common-junit48/src/main/java/org/apache/maven/surefire/common/junit48/RequestedTest.java @@ -29,10 +29,12 @@ final class RequestedTest private static final String CLASS_FILE_EXTENSION = ".class"; private final ResolvedTest test; + private final boolean isPositiveFilter; - RequestedTest( ResolvedTest test ) + RequestedTest( ResolvedTest test, boolean isPositiveFilter ) { this.test = test; + this.isPositiveFilter = isPositiveFilter; } @Override @@ -40,26 +42,35 @@ final class RequestedTest { Class<?> realTestClass = description.getTestClass(); String methodName = description.getMethodName(); - return realTestClass == null && methodName == null || test.shouldRun( classFile( realTestClass ), methodName ); + if ( realTestClass == null && methodName == null ) + { + return true; + } + else + { + String testClass = classFile( realTestClass ); + return isPositiveFilter + ? test.matchAsInclusive( testClass, methodName ) + : !test.matchAsExclusive( testClass, methodName ); + } } @Override public String describe() { - final String classPattern = test.getTestClassPattern(); - final String methodPattern = test.getTestMethodPattern(); - String description = classPattern == null ? "" : classPattern; - if ( methodPattern != null ) - { - description += "#" + methodPattern; - } - return description.length() == 0 ? "*" : description; + String description = test.toString(); + return description == null || description.length() == 0 ? "*" : description; } @Override public boolean equals( Object o ) { - return this == o || o != null && getClass() == o.getClass() && test.equals( ( (RequestedTest) o ).test ); + return this == o || o != null && getClass() == o.getClass() && equals( (RequestedTest) o ); + } + + private boolean equals( RequestedTest o ) + { + return isPositiveFilter == o.isPositiveFilter && test.equals( o.test ); } @Override @@ -70,6 +81,6 @@ final class RequestedTest private String classFile( Class<?> realTestClass ) { - return realTestClass.getName().replace( '.', '/' ) + CLASS_FILE_EXTENSION; + return realTestClass == null ? null : realTestClass.getName().replace( '.', '/' ) + CLASS_FILE_EXTENSION; } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/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 f25f657..d3c280a 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 @@ -34,6 +34,7 @@ import org.junit.runner.manipulation.Filter; import java.io.File; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import static org.junit.runner.Description.createSuiteDescription; import static org.junit.runner.Description.createTestDescription; @@ -191,7 +192,7 @@ public class FilterFactoryTest assertTrue( resolver.getExcludedPatterns().isEmpty() ); assertTrue( resolver.getIncludedPatterns().isEmpty() ); assertTrue( resolver.isEmpty() ); - assertNull( resolver.getPluginParameterTest() ); + assertEquals( 0, resolver.getPluginParameterTest().length() ); assertFalse( resolver.hasExcludedMethodPatterns() ); assertFalse( resolver.hasIncludedMethodPatterns() ); assertFalse( resolver.hasMethodPatterns() ); @@ -204,7 +205,7 @@ public class FilterFactoryTest assertTrue( resolver.getExcludedPatterns().isEmpty() ); assertTrue( resolver.getIncludedPatterns().isEmpty() ); assertTrue( resolver.isEmpty() ); - assertNull( resolver.getPluginParameterTest() ); + assertEquals( 0, resolver.getPluginParameterTest().length() ); assertFalse( resolver.hasExcludedMethodPatterns() ); assertFalse( resolver.hasIncludedMethodPatterns() ); assertFalse( resolver.hasMethodPatterns() ); @@ -641,10 +642,10 @@ public class FilterFactoryTest } @Test - public void testShouldNotNonExistingMethod() + public void testShouldRunSuiteWithIncludedMethod() { String sourceFile = "pkg" + File.separator + "XMyTest.class"; - assertFalse( new TestListResolver( "#testMethod" ).shouldRun( sourceFile, null ) ); + assertTrue( new TestListResolver( "#testMethod" ).shouldRun( sourceFile, null ) ); } @Test @@ -825,9 +826,9 @@ public class FilterFactoryTest Filter filter = createMethodFilter( "#nonExisting" ); JUnitCore core = new JUnitCore(); Result result = core.run( Request.classes( Suite.class ).filterWith( filter ) ); - assertFalse( result.wasSuccessful() ); - assertEquals( 1, result.getRunCount() );//running the Suite - assertEquals( 1, result.getFailureCount() ); + assertTrue( result.wasSuccessful() ); + assertEquals( 0, result.getRunCount() );//running the Suite + assertEquals( 0, result.getFailureCount() ); assertEquals( 0, result.getIgnoreCount() ); } @@ -884,7 +885,7 @@ public class FilterFactoryTest public void testShouldRunSuite() { TestListResolver filter = new TestListResolver( "Su?te" ); - filter = filter.createMethodFilters(); + filter = TestListResolver.optionallyWildcardFilter( filter ); JUnitCore core = new JUnitCore(); Result result = core.run( Request.classes( Suite.class ).filterWith( new MethodFilter( filter ) ) ); assertTrue( result.wasSuccessful() ); @@ -901,7 +902,7 @@ public class FilterFactoryTest + "PT#testC*, " + "!PT.java#testCY[?]," + "%regex[.*.tests.pt.PT.class#w.*|x.*T.*]" ); - filter = filter.createMethodFilters(); + filter = TestListResolver.optionallyWildcardFilter( filter ); JUnitCore core = new JUnitCore(); Result result = core.run( Request.classes( PT.class ).filterWith( new MethodFilter( filter ) ) ); assertTrue( result.wasSuccessful() ); @@ -920,7 +921,7 @@ public class FilterFactoryTest // x12T35[0], x12T35[1] TestListResolver filter = new TestListResolver( "%regex[.*.PT.* # w.*|x(\\d+)T(\\d+)\\[(\\d+)\\]]" ); - filter = filter.createMethodFilters(); + filter = TestListResolver.optionallyWildcardFilter( filter ); JUnitCore core = new JUnitCore(); Result result = core.run( Request.classes( PT.class ).filterWith( new MethodFilter( filter ) ) ); assertTrue( result.wasSuccessful() ); @@ -998,7 +999,7 @@ public class FilterFactoryTest public void testIncludesExcludes() { Collection<String> inc = Arrays.asList( "**/NotIncludedByDefault.java", "**/*Test.java" ); - Collection<String> exc = Arrays.asList( "**/DontRunTest.*" ); + Collection<String> exc = Collections.singletonList( "**/DontRunTest.*" ); TestListResolver resolver = new TestListResolver( inc, exc ); assertFalse( resolver.shouldRun( "org/test/DontRunTest.class", null ) ); assertTrue( resolver.shouldRun( "org/test/DefaultTest.class", null ) ); http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java b/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java index 5a3bdf6..948d514 100644 --- a/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java +++ b/surefire-providers/surefire-junit4/src/main/java/org/apache/maven/surefire/junit4/JUnit4Provider.java @@ -62,6 +62,7 @@ import static org.apache.maven.surefire.common.junit4.JUnit4RunListener.rethrowA import static org.apache.maven.surefire.common.junit4.JUnit4RunListenerFactory.createCustomListeners; import static org.apache.maven.surefire.report.ConsoleOutputCapture.startCapture; import static org.apache.maven.surefire.report.SimpleReportEntry.withException; +import static org.apache.maven.surefire.testset.TestListResolver.optionallyWildcardFilter; import static org.apache.maven.surefire.testset.TestListResolver.toClassFileName; import static org.apache.maven.surefire.util.TestsToRun.fromClass; import static org.junit.runner.Request.aClass; @@ -421,7 +422,7 @@ public class JUnit4Provider private class TestResolverFilter extends Filter { - private final TestListResolver methodFilter = JUnit4Provider.this.testResolver.createMethodFilters(); + private final TestListResolver methodFilter = optionallyWildcardFilter( JUnit4Provider.this.testResolver ); @Override public boolean shouldRun( Description description ) http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/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 9d03a85..f2fa49f 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 @@ -54,6 +54,7 @@ import static java.util.Collections.unmodifiableCollection; import static org.apache.maven.surefire.common.junit4.JUnit4ProviderUtil.generateFailingTests; import static org.apache.maven.surefire.common.junit4.JUnit4RunListenerFactory.createCustomListeners; import static org.apache.maven.surefire.junitcore.ConcurrentRunListener.createInstance; +import static org.apache.maven.surefire.testset.TestListResolver.optionallyWildcardFilter; /** * @author Kristian Rosenvold @@ -272,8 +273,8 @@ public class JUnitCoreProvider { final FilterFactory factory = new FilterFactory( testClassLoader ); Filter groupFilter = factory.createGroupFilter( providerParameters.getProviderProperties() ); - TestListResolver methodFilter = createMethodFilter(); - boolean onlyGroups = methodFilter == null || methodFilter.isEmpty(); + TestListResolver methodFilter = optionallyWildcardFilter( testResolver ); + boolean onlyGroups = methodFilter.isEmpty() || methodFilter.isWildcard(); return onlyGroups ? groupFilter : factory.and( groupFilter, factory.createMethodFilter( methodFilter ) ); } @@ -282,9 +283,4 @@ public class JUnitCoreProvider TestsToRun scanned = scanResult.applyFilter( scannerFilter, testClassLoader ); return runOrderCalculator.orderTestClasses( scanned ); } - - private TestListResolver createMethodFilter() - { - return testResolver == null ? null : testResolver.createMethodFilters(); - } } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/surefire-testng-utils/src/main/java/org/apache/maven/surefire/testng/utils/MethodSelector.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-testng-utils/src/main/java/org/apache/maven/surefire/testng/utils/MethodSelector.java b/surefire-providers/surefire-testng-utils/src/main/java/org/apache/maven/surefire/testng/utils/MethodSelector.java index cdb53f0..9c601bb 100644 --- a/surefire-providers/surefire-testng-utils/src/main/java/org/apache/maven/surefire/testng/utils/MethodSelector.java +++ b/surefire-providers/surefire-testng-utils/src/main/java/org/apache/maven/surefire/testng/utils/MethodSelector.java @@ -36,7 +36,7 @@ import org.testng.ITestNGMethod; public class MethodSelector implements IMethodSelector { - private static TestListResolver testListResolver = null; + private static volatile TestListResolver testListResolver = null; public void setTestMethods( List arg0 ) { @@ -59,7 +59,7 @@ public class MethodSelector private static boolean shouldRun( ITestNGMethod test ) { - TestListResolver resolver = MethodSelector.testListResolver; + TestListResolver resolver = testListResolver; boolean hasTestResolver = resolver != null && !resolver.isEmpty(); return hasTestResolver && resolver.shouldRun( test.getRealClass(), test.getMethodName() ); } http://git-wip-us.apache.org/repos/asf/maven-surefire/blob/021b263a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java ---------------------------------------------------------------------- diff --git a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java index 6faf033..75d8463 100644 --- a/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java +++ b/surefire-providers/surefire-testng/src/main/java/org/apache/maven/surefire/testng/TestNGProvider.java @@ -41,6 +41,8 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import static org.apache.maven.surefire.testset.TestListResolver.optionallyWildcardFilter; + /** * @author Kristian Rosenvold * @noinspection UnusedDeclaration @@ -203,7 +205,7 @@ public class TestNGProvider private TestNGDirectoryTestSuite newDirectorySuite() { return new TestNGDirectoryTestSuite( testRequest.getTestSourceDirectory().toString(), providerProperties, - reporterConfiguration.getReportsDirectory(), createMethodFilter(), + reporterConfiguration.getReportsDirectory(), getTestFilter(), runOrderCalculator, scanResult, mainCliOptions, getSkipAfterFailureCount() ); } @@ -245,13 +247,13 @@ public class TestNGProvider private boolean hasSpecificTests() { - TestListResolver tests = testRequest.getTestListResolver(); - return tests != null && !tests.isEmpty(); + TestListResolver specificTestPatterns = testRequest.getTestListResolver(); + return !specificTestPatterns.isEmpty() && !specificTestPatterns.isWildcard(); } - private TestListResolver createMethodFilter() + private TestListResolver getTestFilter() { - TestListResolver tests = testRequest.getTestListResolver(); - return tests == null ? null : tests.createMethodFilters(); + TestListResolver filter = optionallyWildcardFilter( testRequest.getTestListResolver() ); + return filter.isWildcard() ? TestListResolver.getEmpty() : filter; } }