1313import static org .assertj .core .api .Assertions .assertThat ;
1414import static org .junit .jupiter .api .Assertions .assertAll ;
1515import static org .junit .jupiter .api .Assertions .assertEquals ;
16+ import static org .junit .platform .engine .discovery .ClassNameFilter .includeClassNamePatterns ;
1617import static org .junit .platform .engine .discovery .DiscoverySelectors .selectClass ;
1718import static org .junit .platform .engine .discovery .DiscoverySelectors .selectMethod ;
19+ import static org .junit .platform .engine .discovery .DiscoverySelectors .selectPackage ;
1820import static org .junit .platform .engine .discovery .DiscoverySelectors .selectUniqueId ;
1921import static org .junit .platform .launcher .LauncherConstants .CRITICAL_DISCOVERY_ISSUE_SEVERITY_PROPERTY_NAME ;
2022import static org .junit .platform .launcher .core .LauncherDiscoveryRequestBuilder .request ;
2123import static org .junit .platform .testkit .engine .EventConditions .finishedWithFailure ;
2224import static org .junit .platform .testkit .engine .TestExecutionResultConditions .message ;
2325
2426import java .util .List ;
27+ import java .util .function .Consumer ;
28+ import java .util .regex .Pattern ;
2529
2630import org .junit .jupiter .api .AfterEach ;
2731import org .junit .jupiter .api .Assertions ;
2832import org .junit .jupiter .api .BeforeEach ;
33+ import org .junit .jupiter .api .Named ;
2934import org .junit .jupiter .api .Nested ;
3035import org .junit .jupiter .api .Test ;
3136import org .junit .jupiter .engine .NestedTestClassesTests .OuterClass .NestedClass ;
3237import org .junit .jupiter .engine .NestedTestClassesTests .OuterClass .NestedClass .RecursiveNestedClass ;
3338import org .junit .jupiter .engine .NestedTestClassesTests .OuterClass .NestedClass .RecursiveNestedSiblingClass ;
39+ import org .junit .jupiter .params .ParameterizedTest ;
40+ import org .junit .jupiter .params .provider .MethodSource ;
3441import org .junit .platform .engine .DiscoveryIssue .Severity ;
3542import org .junit .platform .engine .TestDescriptor ;
3643import org .junit .platform .engine .support .descriptor .ClassSource ;
3744import org .junit .platform .launcher .LauncherDiscoveryRequest ;
45+ import org .junit .platform .launcher .core .LauncherDiscoveryRequestBuilder ;
3846import org .junit .platform .testkit .engine .EngineExecutionResults ;
3947import org .junit .platform .testkit .engine .Events ;
4048
@@ -53,20 +61,36 @@ void nestedTestsAreCorrectlyDiscovered() {
5361 assertEquals (5 , engineDescriptor .getDescendants ().size (), "# resolved test descriptors" );
5462 }
5563
56- @ Test
57- void nestedTestsAreExecuted () {
58- EngineExecutionResults executionResults = executeTestsForClass (TestCaseWithNesting .class );
59- Events containers = executionResults .containerEvents ();
60- Events tests = executionResults .testEvents ();
64+ @ ParameterizedTest (name = "{0}" )
65+ @ MethodSource
66+ void nestedTestsAreExecutedInTheRightOrder (Consumer <LauncherDiscoveryRequestBuilder > configurer ) {
67+ EngineExecutionResults executionResults = executeTests (configurer );
6168
69+ Events tests = executionResults .testEvents ();
6270 assertEquals (3 , tests .started ().count (), "# tests started" );
6371 assertEquals (2 , tests .succeeded ().count (), "# tests succeeded" );
6472 assertEquals (1 , tests .failed ().count (), "# tests failed" );
6573
74+ assertThat (tests .started ().map (it -> it .getTestDescriptor ().getDisplayName ())) //
75+ .containsExactlyInAnyOrder ("someTest()" , "successful()" , "failing()" ) //
76+ .containsSubsequence ("someTest()" , "successful()" ) //
77+ .containsSubsequence ("someTest()" , "failing()" );
78+
79+ Events containers = executionResults .containerEvents ();
6680 assertEquals (3 , containers .started ().count (), "# containers started" );
6781 assertEquals (3 , containers .finished ().count (), "# containers finished" );
6882 }
6983
84+ static List <Named <Consumer <LauncherDiscoveryRequestBuilder >>> nestedTestsAreExecutedInTheRightOrder () {
85+ return List .of ( //
86+ Named .of ("class selector" , request -> request //
87+ .selectors (selectClass (TestCaseWithNesting .class ))),
88+ Named .of ("package selector" , request -> request //
89+ .selectors (selectPackage (TestCaseWithNesting .class .getPackageName ())) //
90+ .filters (includeClassNamePatterns (Pattern .quote (TestCaseWithNesting .class .getName ()) + ".*" ))) //
91+ );
92+ }
93+
7094 @ Test
7195 void doublyNestedTestsAreCorrectlyDiscovered () {
7296 LauncherDiscoveryRequest request = request ().selectors (selectClass (TestCaseWithDoubleNesting .class )).build ();
0 commit comments