Skip to content

Commit a51b850

Browse files
committed
Call LauncherDiscoveryListener.class finish methods in reverse order
1 parent 3365072 commit a51b850

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/discovery/CompositeLauncherDiscoveryListener.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
package org.junit.platform.launcher.listeners.discovery;
1212

13+
import static org.junit.platform.commons.util.CollectionUtils.forEachInReverseOrder;
14+
1315
import java.util.ArrayList;
1416
import java.util.Collections;
1517
import java.util.List;
@@ -40,7 +42,7 @@ public void launcherDiscoveryStarted(LauncherDiscoveryRequest request) {
4042

4143
@Override
4244
public void launcherDiscoveryFinished(LauncherDiscoveryRequest request) {
43-
listeners.forEach(delegate -> delegate.launcherDiscoveryFinished(request));
45+
forEachInReverseOrder(listeners, delegate -> delegate.launcherDiscoveryFinished(request));
4446
}
4547

4648
@Override
@@ -50,7 +52,7 @@ public void engineDiscoveryStarted(UniqueId engineId) {
5052

5153
@Override
5254
public void engineDiscoveryFinished(UniqueId engineId, EngineDiscoveryResult result) {
53-
listeners.forEach(delegate -> delegate.engineDiscoveryFinished(engineId, result));
55+
forEachInReverseOrder(listeners, delegate -> delegate.engineDiscoveryFinished(engineId, result));
5456
}
5557

5658
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright 2015-2023 the original author or authors.
3+
*
4+
* All rights reserved. This program and the accompanying materials are
5+
* made available under the terms of the Eclipse Public License v2.0 which
6+
* accompanies this distribution and is available at
7+
*
8+
* https://www.eclipse.org/legal/epl-v20.html
9+
*/
10+
11+
package org.junit.platform.launcher.listeners.discovery;
12+
13+
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectUniqueId;
14+
import static org.mockito.Mockito.inOrder;
15+
import static org.mockito.Mockito.mock;
16+
17+
import java.util.List;
18+
19+
import org.junit.jupiter.api.Test;
20+
import org.junit.platform.engine.SelectorResolutionResult;
21+
import org.junit.platform.engine.UniqueId;
22+
import org.junit.platform.launcher.EngineDiscoveryResult;
23+
import org.junit.platform.launcher.LauncherDiscoveryListener;
24+
import org.junit.platform.launcher.LauncherDiscoveryRequest;
25+
import org.mockito.InOrder;
26+
27+
class CompositeLauncherDiscoveryListenerTests {
28+
29+
@Test
30+
void callsListenersInReverseOrderForFinishedEvents() {
31+
var firstListener = mock(LauncherDiscoveryListener.class, "firstListener");
32+
var secondListener = mock(LauncherDiscoveryListener.class, "secondListener");
33+
34+
var launcherDiscoveryRequest = mock(LauncherDiscoveryRequest.class);
35+
var engineId = UniqueId.forEngine("engine");
36+
var engineDiscoveryResult = EngineDiscoveryResult.successful();
37+
var selector = selectUniqueId(engineId);
38+
var selectorResolutionResult = SelectorResolutionResult.resolved();
39+
40+
var composite = new CompositeLauncherDiscoveryListener(List.of(firstListener, secondListener));
41+
composite.launcherDiscoveryStarted(launcherDiscoveryRequest);
42+
composite.engineDiscoveryStarted(engineId);
43+
composite.selectorProcessed(engineId, selector, selectorResolutionResult);
44+
composite.engineDiscoveryFinished(engineId, engineDiscoveryResult);
45+
composite.launcherDiscoveryFinished(launcherDiscoveryRequest);
46+
47+
InOrder inOrder = inOrder(firstListener, secondListener);
48+
inOrder.verify(firstListener).launcherDiscoveryStarted(launcherDiscoveryRequest);
49+
inOrder.verify(secondListener).launcherDiscoveryStarted(launcherDiscoveryRequest);
50+
inOrder.verify(firstListener).engineDiscoveryStarted(engineId);
51+
inOrder.verify(secondListener).engineDiscoveryStarted(engineId);
52+
inOrder.verify(secondListener).selectorProcessed(engineId, selector, selectorResolutionResult);
53+
inOrder.verify(secondListener).engineDiscoveryFinished(engineId, engineDiscoveryResult);
54+
inOrder.verify(firstListener).engineDiscoveryFinished(engineId, engineDiscoveryResult);
55+
inOrder.verify(secondListener).launcherDiscoveryFinished(launcherDiscoveryRequest);
56+
inOrder.verify(firstListener).launcherDiscoveryFinished(launcherDiscoveryRequest);
57+
}
58+
}

0 commit comments

Comments
 (0)