| package org.apache.maven.surefire.common.junit48; |
| |
| /* |
| * 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.shared.utils.io.MatchPatterns; |
| import org.apache.maven.surefire.common.junit48.tests.pt.PT; |
| import org.apache.maven.surefire.api.testset.ResolvedTest; |
| import org.apache.maven.surefire.api.testset.TestListResolver; |
| import org.junit.Test; |
| import org.junit.runner.Description; |
| import org.junit.runner.JUnitCore; |
| import org.junit.runner.Request; |
| import org.junit.runner.Result; |
| import org.junit.runner.RunWith; |
| 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; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| /** |
| * |
| */ |
| @SuppressWarnings( "checkstyle:constantname" ) |
| public class FilterFactoryTest |
| { |
| /** |
| * |
| */ |
| @RunWith( org.junit.runners.Suite.class ) |
| @org.junit.runners.Suite.SuiteClasses( { FirstClass.class, SecondClass.class } ) |
| public static class Suite |
| { |
| |
| } |
| |
| /** |
| * |
| */ |
| public static class FirstClass |
| { |
| @Test |
| public void testMethod() |
| { |
| //System.out.println( "FirstClass#testMethod" ); |
| } |
| |
| @Test |
| public void secondTestMethod() |
| { |
| //System.out.println( "FirstClass#secondTestMethod" ); |
| } |
| |
| @Test |
| public void otherMethod() |
| { |
| //System.out.println( "FirstClass#otherMethod" ); |
| } |
| } |
| |
| /** |
| * |
| */ |
| public static class SecondClass |
| { |
| @Test |
| public void testMethod() |
| { |
| //System.out.println( "SecondClass#testMethod" ); |
| } |
| |
| @Test |
| public void secondTestMethod() |
| { |
| //System.out.println( "SecondClass#secondTestMethod" ); |
| } |
| } |
| |
| /** |
| * |
| */ |
| public static class ThirdClass |
| { |
| @Test |
| public void testMethod() |
| { |
| //System.out.println( "ThirdClass#testMethod" ); |
| } |
| |
| @Test |
| public void secondTestMethod() |
| { |
| //System.out.println( "ThirdClass#secondTestMethod" ); |
| } |
| } |
| |
| private static final Description testMethod = createTestDescription( FirstClass.class, "testMethod" ); |
| |
| private static final Description secondTestMethod = createTestDescription( FirstClass.class, "secondTestMethod" ); |
| |
| private static final Description otherMethod = createTestDescription( FirstClass.class, "otherMethod" ); |
| |
| private static final Description testMethodInSecondClass = createTestDescription( SecondClass.class, "testMethod" ); |
| |
| private static final Description secondTestMethodInSecondClass = |
| createTestDescription( SecondClass.class, "secondTestMethod" ); |
| |
| private static final String firstClassName = FirstClass.class.getName().replace( '.', '/' ); |
| |
| private static final String secondClassName = SecondClass.class.getName().replace( '.', '/' ); |
| |
| private static final String firstClassRegex = FirstClass.class.getName().replace( "$", "\\$" ); |
| |
| private static final String secondClassRegex = SecondClass.class.getName().replace( "$", "\\$" ); |
| |
| private Filter createMethodFilter( String requestString ) |
| { |
| return new FilterFactory( getClass().getClassLoader() ).createMethodFilter( requestString ); |
| } |
| |
| @Test |
| public void testSanity() |
| { |
| ResolvedTest test = new ResolvedTest( ResolvedTest.Type.CLASS, " \t \n ", true ); |
| assertNull( test.getTestClassPattern() ); |
| assertNull( test.getTestMethodPattern() ); |
| assertFalse( test.hasTestClassPattern() ); |
| assertFalse( test.hasTestMethodPattern() ); |
| assertTrue( test.isEmpty() ); |
| assertTrue( test.isRegexTestClassPattern() ); |
| assertFalse( test.isRegexTestMethodPattern() ); |
| test = new ResolvedTest( ResolvedTest.Type.METHOD, " \n \t ", true ); |
| assertNull( test.getTestClassPattern() ); |
| assertNull( test.getTestMethodPattern() ); |
| assertFalse( test.hasTestClassPattern() ); |
| assertFalse( test.hasTestMethodPattern() ); |
| assertTrue( test.isEmpty() ); |
| assertFalse( test.isRegexTestClassPattern() ); |
| assertTrue( test.isRegexTestMethodPattern() ); |
| test = new ResolvedTest( ResolvedTest.Type.METHOD, " \n ", false ); |
| assertNull( test.getTestClassPattern() ); |
| assertNull( test.getTestMethodPattern() ); |
| assertFalse( test.hasTestClassPattern() ); |
| assertFalse( test.hasTestMethodPattern() ); |
| assertTrue( test.isEmpty() ); |
| assertFalse( test.isRegexTestClassPattern() ); |
| assertFalse( test.isRegexTestMethodPattern() ); |
| test = new ResolvedTest( " \n \t ", " \n \t ", false ); |
| assertNull( test.getTestClassPattern() ); |
| assertNull( test.getTestMethodPattern() ); |
| assertFalse( test.hasTestClassPattern() ); |
| assertFalse( test.hasTestMethodPattern() ); |
| assertTrue( test.isEmpty() ); |
| assertFalse( test.isRegexTestClassPattern() ); |
| assertFalse( test.isRegexTestMethodPattern() ); |
| } |
| |
| @Test |
| public void testNegativeIllegalRegex() |
| { |
| try |
| { |
| new TestListResolver( "#%regex[.*.Test.class]" ); |
| } |
| catch ( IllegalArgumentException e ) |
| { |
| // expected in junit 3.x |
| } |
| } |
| |
| @Test |
| public void testNegativeIllegalRegex2() |
| { |
| try |
| { |
| new TestListResolver( "%regex[.*.Test.class]#" ); |
| } |
| catch ( IllegalArgumentException e ) |
| { |
| // expected in junit 3.x |
| } |
| } |
| |
| @Test |
| public void testNegativeEmptyRegex() |
| { |
| TestListResolver resolver = new TestListResolver( "%regex[ ]" ); |
| assertTrue( resolver.getExcludedPatterns().isEmpty() ); |
| assertTrue( resolver.getIncludedPatterns().isEmpty() ); |
| assertTrue( resolver.isEmpty() ); |
| assertEquals( 0, resolver.getPluginParameterTest().length() ); |
| assertFalse( resolver.hasExcludedMethodPatterns() ); |
| assertFalse( resolver.hasIncludedMethodPatterns() ); |
| assertFalse( resolver.hasMethodPatterns() ); |
| } |
| |
| @Test |
| public void testNegativeEmptyRegexWithHash() |
| { |
| TestListResolver resolver = new TestListResolver( "%regex[# ]" ); |
| assertTrue( resolver.getExcludedPatterns().isEmpty() ); |
| assertTrue( resolver.getIncludedPatterns().isEmpty() ); |
| assertTrue( resolver.isEmpty() ); |
| assertEquals( 0, resolver.getPluginParameterTest().length() ); |
| assertFalse( resolver.hasExcludedMethodPatterns() ); |
| assertFalse( resolver.hasIncludedMethodPatterns() ); |
| assertFalse( resolver.hasMethodPatterns() ); |
| } |
| |
| @Test |
| public void testNegativeRegexWithEmptyMethod() |
| { |
| TestListResolver resolver = new TestListResolver( "%regex[.*.Test.class# ]" ); |
| assertFalse( resolver.isEmpty() ); |
| assertTrue( resolver.getExcludedPatterns().isEmpty() ); |
| assertFalse( resolver.getIncludedPatterns().isEmpty() ); |
| assertEquals( 1, resolver.getIncludedPatterns().size() ); |
| assertEquals( "%regex[.*.Test.class]", resolver.getPluginParameterTest() ); |
| assertFalse( resolver.hasExcludedMethodPatterns() ); |
| assertFalse( resolver.hasIncludedMethodPatterns() ); |
| assertFalse( resolver.hasMethodPatterns() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityNullMethodFilter() |
| { |
| Filter filter = createMethodFilter( null ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityEmptyMethodFilter() |
| { |
| Filter filter = createMethodFilter( "" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityBlankMethodFilter() |
| { |
| Filter filter = createMethodFilter( " \n" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityTestParameterClass() |
| { |
| Filter filter = createMethodFilter( firstClassName ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityTestParameterJavaClass() |
| { |
| Filter filter = createMethodFilter( firstClassName + ".java" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityTestParameterMethod1() |
| { |
| Filter filter = createMethodFilter( firstClassName + ".java#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityTestParameterMethod2() |
| { |
| Filter filter = createMethodFilter( firstClassName + "#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testBackwardsCompatibilityTestParameterMethod3() |
| { |
| Filter filter = createMethodFilter( firstClassName + "#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithWildcard() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[" + firstClassRegex + ".*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithWildcardClass() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[" + firstClassRegex + ".*.class]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithExactClass() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".class]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithWildcardJavaClassNegativeTest() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".*.class]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClasses() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesComplement() |
| { |
| Filter filter = createMethodFilter( "!%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndOneMethod() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".* # otherMethod]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndOneMethodComplement() |
| { |
| Filter filter = |
| createMethodFilter( "!%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".*# otherMethod]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 6, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndWildcardMethod() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".*#test.* ]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndRegexMethodComplement() |
| { |
| Filter filter = createMethodFilter( "!%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".*#test.*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndRegexMethods() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[ " + firstClassRegex + ".*|" + secondClassRegex + ".* # test.*|other.* ]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testRegexWithTwoClassesAndRegexMethodsComplement() |
| { |
| Filter filter = |
| createMethodFilter( "!%regex[" + firstClassRegex + ".*|" + secondClassRegex + ".* # test.*|other.* ]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 4, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleRegexClasses() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[" + firstClassRegex + ".*], %regex[" + secondClassRegex + ".*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleRegexClassesComplement() |
| { |
| Filter filter = |
| createMethodFilter( "!%regex[" + firstClassRegex + ".*] , !%regex[" + secondClassRegex + ".*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClasses() |
| { |
| Filter filter = createMethodFilter( firstClassName + "," + secondClassName ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesMethods() |
| { |
| Filter filter = createMethodFilter( firstClassName + "#other*," + secondClassName + "#*TestMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesAndMultipleMethodsWithWildcards() |
| { |
| Filter filter = createMethodFilter( firstClassName + "#other*+second*Method," |
| + secondClassName + "#*TestMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesAndMultipleMethodsWithRegex() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".class#other.*|second.*Method]," |
| + "%regex[" + secondClassRegex + ".class#.*TestMethod]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesAndMultipleMethodsMix() |
| { |
| Filter filter = createMethodFilter( "%regex[" + firstClassRegex + ".class # other.*|second.*Method]," |
| + secondClassName + "#*TestMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesAndMultipleMethods() |
| { |
| Filter filter = createMethodFilter( firstClassName + "#other*+secondTestMethod," |
| + secondClassName + "#*TestMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleClassesComplement() |
| { |
| Filter filter = createMethodFilter( "!" + firstClassName + ",!" + secondClassName ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleRegexClassesMethods() |
| { |
| Filter filter = |
| createMethodFilter( "%regex[" + firstClassRegex + ".* # test.*|other.*]," |
| + "%regex[" + secondClassRegex + ".*#second.*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 3, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testMultipleRegexClassesMethodsComplement() |
| { |
| Filter filter = |
| createMethodFilter( "!%regex[" + firstClassRegex + ".* # test.*|other.*]," |
| + "!%regex[" + secondClassRegex + ".*#second.*]" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class, SecondClass.class, ThirdClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 4, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldMatchExactMethodName() |
| { |
| Filter exactFilter = createMethodFilter( "#testMethod" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchExactMethodNameComplement() |
| { |
| Filter exactFilter = createMethodFilter( "!#testMethod" ); |
| assertFalse( "should not run testMethod", exactFilter.shouldRun( testMethod ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethod ) ); |
| assertFalse( "should not run testMethod", exactFilter.shouldRun( testMethodInSecondClass ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| |
| exactFilter = createMethodFilter( "!FilterFactoryTest$FirstClass#testMethod" ); |
| assertFalse( "should not run testMethod", exactFilter.shouldRun( testMethod ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethod ) ); |
| assertTrue( "should not run testMethod", exactFilter.shouldRun( testMethodInSecondClass ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| |
| exactFilter = |
| createMethodFilter( "!FilterFactoryTest$FirstClass#testMethod, !FilterFactoryTest$SecondClass#testMethod" ); |
| assertFalse( "should not run testMethod", exactFilter.shouldRun( testMethod ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethod ) ); |
| assertFalse( "should not run testMethod", exactFilter.shouldRun( testMethodInSecondClass ) ); |
| assertTrue( "should run other than testMethod", exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| } |
| |
| @Test |
| public void testShouldMatchExactMethodNameWithHash() |
| { |
| final Filter exactFilter = createMethodFilter( "#testMethod" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| } |
| |
| @Test |
| public void testShouldRunSuiteWithIncludedMethod() |
| { |
| String sourceFile = "pkg" + File.separator + "XMyTest.class"; |
| assertTrue( new TestListResolver( "#testMethod" ).shouldRun( sourceFile, null ) ); |
| } |
| |
| @Test |
| public void testShouldNotRunDifferentMethods() |
| { |
| final Filter exactFilter = createMethodFilter( "#testMethod" ); |
| Description testCase = createSuiteDescription( FirstClass.class ); |
| testCase.addChild( otherMethod ); |
| assertFalse( "exact match test case", exactFilter.shouldRun( testCase ) ); |
| } |
| |
| @Test |
| public void testShouldNotRunExactMethodWithoutClass() |
| { |
| Filter exactFilter = createMethodFilter( "#testMethod" ); |
| assertFalse( "should run containing matching method", exactFilter.shouldRun( secondTestMethod ) ); |
| } |
| |
| @Test |
| public void testShouldNotMatchExactOnOtherMethod() |
| { |
| Filter exactFilter = createMethodFilter( "#testMethod" ); |
| assertFalse( "should not run other methods", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchWildCardsInMethodName() |
| { |
| Filter starAtEnd = createMethodFilter( "#test*" ); |
| assertTrue( "match ending with star should run", starAtEnd.shouldRun( testMethod ) ); |
| |
| Filter starAtBeginning = createMethodFilter( "#*Method" ); |
| assertTrue( "match starting with star should run", starAtBeginning.shouldRun( testMethod ) ); |
| |
| Filter starInMiddle = createMethodFilter( "#test*thod" ); |
| assertTrue( "match containing star should run", starInMiddle.shouldRun( testMethod ) ); |
| |
| Filter questionAtEnd = createMethodFilter( "#testMetho?" ); |
| assertTrue( "match ending with question mark should run", questionAtEnd.shouldRun( testMethod ) ); |
| |
| Filter questionAtBeginning = createMethodFilter( "#????Method" ); |
| assertTrue( "match starting with question mark should run", questionAtBeginning.shouldRun( testMethod ) ); |
| |
| Filter questionInMiddle = createMethodFilter( "#testM?thod" ); |
| assertTrue( "match containing question mark should run", questionInMiddle.shouldRun( testMethod ) ); |
| |
| Filter starAndQuestion = createMethodFilter( "#t?st*thod" ); |
| assertTrue( "match containing star and question mark should run", starAndQuestion.shouldRun( testMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchExactClassAndMethod() |
| { |
| Filter exactFilter = createMethodFilter( firstClassName + "#testMethod" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchSimpleClassNameWithMethod() |
| { |
| 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 ) ); |
| } |
| |
| @Test |
| public void testShouldMatchNestedClassAsRegexWithMethod() |
| { |
| Filter exactFilter = |
| createMethodFilter( "%regex[.*.common.junit48.FilterFactoryTest\\$FirstClass.class#testMethod]" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchNestedCanonicalClassAsRegexWithMethod() |
| { |
| Filter exactFilter = |
| createMethodFilter( "%regex[.*.common.junit48.FilterFactoryTest.FirstClass.class#testMethod]" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchClassNameWithWildcardAndMethod() |
| { |
| Filter exactFilter = createMethodFilter( "*First*#testMethod" ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchClassNameWithWildcardCompletely() |
| { |
| Filter exactFilter = createMethodFilter( "First*#testMethod" ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( testMethod ) ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchMultipleMethodsSeparatedByComma() |
| { |
| Filter exactFilter = createMethodFilter( firstClassName + "#testMethod,#secondTestMethod" ); |
| |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( secondTestMethod ) ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldMatchMultipleMethodsInSameClassSeparatedByPlus() |
| { |
| Filter exactFilter = createMethodFilter( firstClassName + "#testMethod+secondTestMethod" ); |
| |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( secondTestMethod ) ); |
| |
| assertFalse( "method in another class should not match", |
| exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| } |
| |
| @Test |
| public void testShouldRunCompleteClassWhenSeparatedByCommaWithoutHash() |
| { |
| Filter exactFilter = createMethodFilter( firstClassName + "#testMethod," + secondClassName ); |
| |
| assertTrue( "exact match on name should run", exactFilter.shouldRun( testMethod ) ); |
| |
| assertFalse( "other method should not match", exactFilter.shouldRun( secondTestMethod ) ); |
| assertFalse( "other method should not match", exactFilter.shouldRun( otherMethod ) ); |
| |
| assertTrue( "should run complete second class", exactFilter.shouldRun( testMethodInSecondClass ) ); |
| assertTrue( "should run complete second class", exactFilter.shouldRun( secondTestMethodInSecondClass ) ); |
| } |
| |
| @Test |
| public void testShouldRunSuitesContainingExactMethodName() |
| { |
| Description suite = Description.createSuiteDescription( Suite.class ); |
| suite.addChild( testMethod ); |
| suite.addChild( secondTestMethod ); |
| |
| Filter exactFilter = createMethodFilter( "#testMethod" ); |
| assertTrue( "should run suites containing matching method", exactFilter.shouldRun( suite ) ); |
| } |
| |
| @Test |
| public void testShouldSkipSuitesNotContainingExactMethodName() |
| { |
| Filter exactFilter = createMethodFilter( "#otherMethod" ); |
| assertFalse( "should not run method", exactFilter.shouldRun( testMethod ) ); |
| assertFalse( "should not run method", exactFilter.shouldRun( secondTestMethod ) ); |
| Description suite = Description.createSuiteDescription( Suite.class ); |
| suite.addChild( testMethod ); |
| suite.addChild( secondTestMethod ); |
| assertFalse( "should not run suites containing no matches", exactFilter.shouldRun( suite ) ); |
| } |
| |
| @Test |
| public void testSingleMethodWithJUnitCoreSuite() |
| { |
| Filter filter = createMethodFilter( "#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( Suite.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldNotRunNonExistingMethodJUnitCoreSuite() |
| { |
| Filter filter = createMethodFilter( "#nonExisting" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( Suite.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 0, result.getRunCount() ); //running the Suite |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldRunNonExistingMethodJUnitCoreSuite() |
| { |
| Filter filter = createMethodFilter( "!#nonExisting" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( Suite.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testClassAndMethodJUnitCoreSuite() |
| { |
| Filter filter = createMethodFilter( "FilterFactoryTest$FirstClass#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( Suite.class, FirstClass.class, SecondClass.class ) |
| .filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 2, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testSingleMethodWithJUnitCoreFirstClass() |
| { |
| Filter filter = createMethodFilter( "#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testWithJUnitCoreFirstClassAndSingleMethod() |
| { |
| Filter filter = createMethodFilter( "FilterFactoryTest$FirstClass#testMethod" ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( FirstClass.class ).filterWith( filter ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 1, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldRunSuite() |
| { |
| TestListResolver filter = new TestListResolver( "Su?te" ); |
| filter = TestListResolver.optionallyWildcardFilter( filter ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( Suite.class ).filterWith( new MethodFilter( filter ) ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 5, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldRunParameterized() |
| { |
| TestListResolver filter = |
| new TestListResolver( "#testAA[?]+testB?[?], " |
| + "PT#testC*, " |
| + "!PT.java#testCY[?]," |
| + "%regex[.*.tests.pt.PT.class#w.*|x.*T.*]" ); |
| filter = TestListResolver.optionallyWildcardFilter( filter ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( PT.class ).filterWith( new MethodFilter( filter ) ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 12, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testShouldRunParameterizedWithPlusDelimiter() |
| { |
| // Running parameterized tests: w12T34, x12T34 and x12T35. |
| // Two parameters "x" and "y" in the test case PT.java change the method descriptions to the following ones: |
| // w12T34[0], w12T34[1] |
| // x12T34[0], x12T34[1] |
| // x12T35[0], x12T35[1] |
| TestListResolver filter = |
| new TestListResolver( "%regex[.*.PT.* # w.*|x(\\d+)T(\\d+)\\[(\\d+)\\]]" ); |
| filter = TestListResolver.optionallyWildcardFilter( filter ); |
| JUnitCore core = new JUnitCore(); |
| Result result = core.run( Request.classes( PT.class ).filterWith( new MethodFilter( filter ) ) ); |
| assertTrue( result.wasSuccessful() ); |
| assertEquals( 6, result.getRunCount() ); |
| assertEquals( 0, result.getFailureCount() ); |
| assertEquals( 0, result.getIgnoreCount() ); |
| } |
| |
| @Test |
| public void testTestListResolver() |
| { |
| assertFalse( new TestListResolver( "b/ATest.java" ).shouldRun( "tests/a/ATest.class", null ) ); |
| assertFalse( new TestListResolver( "b/Test.java" ).shouldRun( "a/ATest.class", null ) ); |
| assertTrue( new TestListResolver( "ATest.java" ).shouldRun( "tests/a/ATest.class", null ) ); |
| assertTrue( new TestListResolver( "a/ATest.java" ).shouldRun( "a/ATest.class", null ) ); |
| assertTrue( new TestListResolver( "**/ATest.java" ).shouldRun( "a/ATest.class", null ) ); |
| Class<?> testsATest = org.apache.maven.surefire.common.junit48.tests.ATest.class; |
| Class<?> aTest = org.apache.maven.surefire.common.junit48.tests.a.ATest.class; |
| assertFalse( new TestListResolver( "b/ATest.java" ).shouldRun( testsATest, null ) ); |
| assertFalse( new TestListResolver( "b/ATest.java" ).shouldRun( aTest, null ) ); |
| assertTrue( new TestListResolver( "ATest.java" ).shouldRun( testsATest, null ) ); |
| assertTrue( new TestListResolver( "a/ATest.java" ).shouldRun( aTest, null ) ); |
| assertTrue( new TestListResolver( "**/ATest.java" ).shouldRun( aTest, null ) ); |
| } |
| |
| @Test |
| public void testShouldRunClassOnly() |
| { |
| Class<?> testsATest = org.apache.maven.surefire.common.junit48.tests.ATest.class; |
| TestListResolver resolver = new TestListResolver( "**/ATest.java#testSuccessTwo" ); |
| assertTrue( resolver.shouldRun( testsATest, null ) ); |
| resolver = new TestListResolver( "**/BTest.java#testSuccessTwo" ); |
| assertFalse( resolver.shouldRun( testsATest, null ) ); |
| } |
| |
| @Test |
| public void testMatchPatterns() |
| { |
| String sourceFile = "pkg" + File.separator + "MyTest.class"; |
| boolean matchPattern = |
| MatchPatterns.from( "**" + File.separator + "MyTest.class" ).matches( sourceFile, true ); |
| assertTrue( matchPattern ); |
| |
| matchPattern = MatchPatterns.from( "MyTest.class" ).matches( sourceFile, true ); |
| assertFalse( matchPattern ); |
| |
| matchPattern = MatchPatterns.from( "MyTest.class" ).matches( "MyTest.class", true ); |
| assertTrue( matchPattern ); |
| |
| matchPattern = MatchPatterns.from( "**" + File.separator + "MyTest.class" ).matches( "MyTest.class", true ); |
| assertTrue( matchPattern ); |
| } |
| |
| @Test |
| public void testNegativePatternOnPackageLessClass() |
| { |
| String sourceFile = "pkg" + File.separator + "XMyTest.class"; |
| assertFalse( new TestListResolver( "**/MyTest.java" ).shouldRun( sourceFile, null ) ); |
| assertFalse( new TestListResolver( "MyTest.java" ).shouldRun( sourceFile, null ) ); |
| assertFalse( new TestListResolver( "MyTest.java" ).shouldRun( "XMyTest.class", null ) ); |
| assertFalse( new TestListResolver( "**/MyTest.java" ).shouldRun( "XMyTest.class", null ) ); |
| } |
| |
| @Test |
| public void testPatternOnPackageLessClass() |
| { |
| String sourceFile = "pkg" + File.separator + "MyTest.class"; |
| assertTrue( new TestListResolver( "**/MyTest.java" ).shouldRun( sourceFile, null ) ); |
| assertTrue( new TestListResolver( "MyTest.java" ).shouldRun( sourceFile, null ) ); |
| assertTrue( new TestListResolver( "MyTest.java" ).shouldRun( "MyTest.class", null ) ); |
| assertTrue( new TestListResolver( "**/MyTest.java" ).shouldRun( "MyTest.class", null ) ); |
| } |
| |
| @Test |
| public void testIncludesExcludes() |
| { |
| Collection<String> inc = Arrays.asList( "**/NotIncludedByDefault.java", "**/*Test.java" ); |
| 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 ) ); |
| assertTrue( resolver.shouldRun( "org/test/NotIncludedByDefault.class", null ) ); |
| } |
| |
| @Test |
| public void testSimple() |
| { |
| TestListResolver resolver = new TestListResolver( "NotIncludedByDefault" ); |
| assertTrue( resolver.shouldRun( "org/test/NotIncludedByDefault.class", null ) ); |
| } |
| |
| @Test |
| public void testFullyQualifiedClass() |
| { |
| TestListResolver resolver = new TestListResolver( "my.package.MyTest" ); |
| assertFalse( resolver.shouldRun( "my/package/AnotherTest.class", null ) ); |
| assertTrue( resolver.shouldRun( "my/package/MyTest.class", null ) ); |
| } |
| } |