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.testset.ResolvedTest; import org.apache.maven.surefire.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.*; public class FilterFactoryTest { @RunWith( org.junit.runners.Suite.class ) @org.junit.runners.Suite.SuiteClasses( { FirstClass.class, SecondClass.class } ) static public class Suite { } static public 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" ); } } static public class SecondClass { @Test public void testMethod() { //System.out.println( "SecondClass#testMethod" ); } @Test public void secondTestMethod() { //System.out.println( "SecondClass#secondTestMethod" ); } } static public 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 ) ); } }