Skip to content

Commit b91532a

Browse files
committed
Call LauncherSessionListener closed method in reverse order
Issue: #3082
1 parent a51b850 commit b91532a

File tree

3 files changed

+51
-7
lines changed

3 files changed

+51
-7
lines changed

junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/session/CompositeLauncherSessionListener.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
package org.junit.platform.launcher.listeners.session;
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;
@@ -36,6 +38,6 @@ public void launcherSessionOpened(LauncherSession session) {
3638

3739
@Override
3840
public void launcherSessionClosed(LauncherSession session) {
39-
listeners.forEach(delegate -> delegate.launcherSessionClosed(session));
41+
forEachInReverseOrder(listeners, delegate -> delegate.launcherSessionClosed(session));
4042
}
4143
}

platform-tests/src/test/java/org/junit/platform/launcher/core/LauncherSessionTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626

2727
class LauncherSessionTests {
2828

29-
LauncherSessionListener firstSessionListener = mock(LauncherSessionListener.class);
30-
LauncherSessionListener secondSessionListener = mock(LauncherSessionListener.class);
29+
LauncherSessionListener firstSessionListener = mock(LauncherSessionListener.class, "firstSessionListener");
30+
LauncherSessionListener secondSessionListener = mock(LauncherSessionListener.class, "secondSessionListener");
3131
LauncherConfig launcherConfig = createLauncherConfigBuilderWithDisabledServiceLoading() //
3232
.addLauncherSessionListeners(firstSessionListener, secondSessionListener) //
3333
.addTestEngines(new TestEngineStub()) //
@@ -44,22 +44,22 @@ void callsRegisteredListenersWhenLauncherIsUsedDirectly() {
4444
var launcherSession = ArgumentCaptor.forClass(LauncherSession.class);
4545
inOrder.verify(firstSessionListener).launcherSessionOpened(launcherSession.capture());
4646
inOrder.verify(secondSessionListener).launcherSessionOpened(launcherSession.getValue());
47-
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
4847
inOrder.verify(secondSessionListener).launcherSessionClosed(launcherSession.getValue());
48+
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
4949

5050
launcher.execute(testPlan);
5151

5252
inOrder.verify(firstSessionListener).launcherSessionOpened(launcherSession.capture());
5353
inOrder.verify(secondSessionListener).launcherSessionOpened(launcherSession.getValue());
54-
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
5554
inOrder.verify(secondSessionListener).launcherSessionClosed(launcherSession.getValue());
55+
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
5656

5757
launcher.execute(request);
5858

5959
inOrder.verify(firstSessionListener).launcherSessionOpened(launcherSession.capture());
6060
inOrder.verify(secondSessionListener).launcherSessionOpened(launcherSession.getValue());
61-
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
6261
inOrder.verify(secondSessionListener).launcherSessionClosed(launcherSession.getValue());
62+
inOrder.verify(firstSessionListener).launcherSessionClosed(launcherSession.getValue());
6363
}
6464

6565
@Test
@@ -87,8 +87,8 @@ void callsRegisteredListenersWhenLauncherIsUsedViaSession() {
8787

8888
session.close();
8989

90-
inOrder.verify(firstSessionListener).launcherSessionClosed(session);
9190
inOrder.verify(secondSessionListener).launcherSessionClosed(session);
91+
inOrder.verify(firstSessionListener).launcherSessionClosed(session);
9292
verifyNoMoreInteractions(firstSessionListener, secondSessionListener);
9393
}
9494

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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.session;
12+
13+
import static org.mockito.Mockito.inOrder;
14+
import static org.mockito.Mockito.mock;
15+
16+
import java.util.List;
17+
18+
import org.junit.jupiter.api.Test;
19+
import org.junit.platform.launcher.LauncherSession;
20+
import org.junit.platform.launcher.LauncherSessionListener;
21+
import org.mockito.InOrder;
22+
23+
public class CompositeLauncherSessionListenerTests {
24+
25+
@Test
26+
void callsListenersInReverseOrderForClosedEvents() {
27+
var firstListener = mock(LauncherSessionListener.class, "firstListener");
28+
var secondListener = mock(LauncherSessionListener.class, "secondListener");
29+
30+
var launcherSession = mock(LauncherSession.class);
31+
32+
var composite = new CompositeLauncherSessionListener(List.of(firstListener, secondListener));
33+
composite.launcherSessionOpened(launcherSession);
34+
composite.launcherSessionClosed(launcherSession);
35+
36+
InOrder inOrder = inOrder(firstListener, secondListener);
37+
inOrder.verify(firstListener).launcherSessionOpened(launcherSession);
38+
inOrder.verify(secondListener).launcherSessionOpened(launcherSession);
39+
inOrder.verify(secondListener).launcherSessionClosed(launcherSession);
40+
inOrder.verify(firstListener).launcherSessionClosed(launcherSession);
41+
}
42+
}

0 commit comments

Comments
 (0)