blob: f3c41ef3f8200870a082afcb30c4bdd5e6c30493 [file] [log] [blame]
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 ) );
}
}