1111package org .junit .platform .launcher .core ;
1212
1313import static org .assertj .core .api .Assertions .assertThat ;
14+ import static org .junit .jupiter .api .Assertions .assertAll ;
1415import static org .junit .jupiter .api .Assertions .assertEquals ;
1516import static org .junit .jupiter .api .Assertions .assertThrows ;
1617import static org .junit .jupiter .api .Assertions .assertTrue ;
1718import static org .junit .platform .commons .util .CollectionUtils .getOnlyElement ;
19+ import static org .junit .platform .engine .SelectorResolutionResult .unresolved ;
1820import static org .junit .platform .engine .TestExecutionResult .successful ;
1921import static org .junit .platform .engine .discovery .DiscoverySelectors .selectPackage ;
2022import static org .junit .platform .engine .discovery .DiscoverySelectors .selectUniqueId ;
4244import org .junit .platform .commons .PreconditionViolationException ;
4345import org .junit .platform .commons .logging .LogRecordListener ;
4446import org .junit .platform .commons .util .ExceptionUtils ;
47+ import org .junit .platform .engine .DiscoverySelector ;
4548import org .junit .platform .engine .EngineDiscoveryRequest ;
4649import org .junit .platform .engine .ExecutionRequest ;
4750import org .junit .platform .engine .FilterResult ;
6467import org .junit .platform .launcher .TestPlan ;
6568import org .junit .platform .launcher .listeners .SummaryGeneratingListener ;
6669import org .mockito .ArgumentCaptor ;
70+ import org .mockito .InOrder ;
6771
6872/**
6973 * @since 1.0
@@ -121,7 +125,7 @@ public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId
121125 .configurationParameter (DEFAULT_DISCOVERY_LISTENER_CONFIGURATION_PROPERTY_NAME , "logging" ) //
122126 .build ());
123127 assertThat (testPlan .getRoots ()).hasSize (1 );
124- assertDiscoveryFailed (engine , discoveryListener );
128+ assertDiscoveryFailed (engine , inOrder ( discoveryListener ), discoveryListener );
125129 }
126130
127131 @ ParameterizedTest
@@ -152,9 +156,11 @@ public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId
152156 assertThat (testPlan .getRoots ()).hasSize (1 );
153157 var engineIdentifier = getOnlyElement (testPlan .getRoots ());
154158 assertThat (getOnlyElement (testPlan .getRoots ()).getDisplayName ()).isEqualTo ("my-engine-id" );
155- verify (discoveryListener ).launcherDiscoveryStarted (request );
156- verify (discoveryListener ).launcherDiscoveryFinished (request );
157- assertDiscoveryFailed (engine , discoveryListener );
159+
160+ InOrder inOrder = inOrder (discoveryListener );
161+ inOrder .verify (discoveryListener ).launcherDiscoveryStarted (request );
162+ assertDiscoveryFailed (engine , inOrder , discoveryListener );
163+ inOrder .verify (discoveryListener ).launcherDiscoveryFinished (request );
158164
159165 var listener = mock (TestExecutionListener .class );
160166 launcher .execute (testPlan , listener );
@@ -167,10 +173,13 @@ public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId
167173 .hasMessage ("TestEngine with ID 'my-engine-id' failed to discover tests" );
168174 }
169175
170- private void assertDiscoveryFailed (TestEngine testEngine , LauncherDiscoveryListener discoveryListener ) {
176+ private void assertDiscoveryFailed (TestEngine testEngine , InOrder inOrder ,
177+ LauncherDiscoveryListener discoveryListener ) {
171178 var engineId = testEngine .getId ();
172179 var failureCaptor = ArgumentCaptor .forClass (EngineDiscoveryResult .class );
173- verify (discoveryListener ).engineDiscoveryFinished (eq (UniqueId .forEngine (engineId )), failureCaptor .capture ());
180+ inOrder .verify (discoveryListener ).engineDiscoveryStarted (UniqueId .forEngine (engineId ));
181+ inOrder .verify (discoveryListener ).engineDiscoveryFinished (eq (UniqueId .forEngine (engineId )),
182+ failureCaptor .capture ());
174183 var result = failureCaptor .getValue ();
175184 assertThat (result .getStatus ()).isEqualTo (EngineDiscoveryResult .Status .FAILED );
176185 assertThat (result .getThrowable ()).isPresent ();
@@ -651,4 +660,44 @@ void dryRunModeReportsEventsForAllTestsButDoesNotExecuteThem() {
651660 inOrder .verify (listener ).testPlanExecutionFinished (any ());
652661 inOrder .verifyNoMoreInteractions ();
653662 }
663+
664+ @ Test
665+ void notifiesDiscoveryListenersOfProcessedSelectors () {
666+ TestEngine engine = new TestEngineStub ("some-engine-id" ) {
667+
668+ @ Override
669+ public TestDescriptor discover (EngineDiscoveryRequest discoveryRequest , UniqueId uniqueId ) {
670+ discoveryRequest .getSelectorsByType (DiscoverySelector .class ).forEach (selector -> {
671+ discoveryRequest .getDiscoveryListener ().selectorProcessed (uniqueId , selector , unresolved ());
672+ });
673+ return new EngineDescriptor (uniqueId , uniqueId .getLastSegment ().getValue ());
674+ }
675+ };
676+ var engineId = UniqueId .forEngine (engine .getId ());
677+
678+ var discoveryListenerOnConfig = mock (LauncherDiscoveryListener .class , "discoveryListenerOnConfig" );
679+ var discoveryListenerOnLauncher = mock (LauncherDiscoveryListener .class , "discoveryListenerOnLauncher" );
680+ var discoveryListenerOnRequest = mock (LauncherDiscoveryListener .class , "discoveryListenerOnRequest" );
681+ var selector = mock (DiscoverySelector .class );
682+
683+ var launcherConfig = LauncherFactoryForTestingPurposesOnly .createLauncherConfigBuilderWithDisabledServiceLoading () //
684+ .addTestEngines (engine ) //
685+ .addLauncherDiscoveryListeners (discoveryListenerOnConfig ) //
686+ .build ();
687+
688+ var launcher = LauncherFactory .create (launcherConfig );
689+ launcher .registerLauncherDiscoveryListeners (discoveryListenerOnLauncher );
690+
691+ launcher .discover (request () //
692+ .selectors (selector ) //
693+ .listeners (discoveryListenerOnRequest ) //
694+ .build ());
695+
696+ assertAll ( //
697+ () -> verify (discoveryListenerOnConfig ).selectorProcessed (engineId , selector , unresolved ()), //
698+ () -> verify (discoveryListenerOnLauncher ).selectorProcessed (engineId , selector , unresolved ()), //
699+ () -> verify (discoveryListenerOnRequest ).selectorProcessed (engineId , selector , unresolved ()) //
700+ );
701+ }
702+
654703}
0 commit comments