From 95f39254acb360757038049fe142f78f36de7be6 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Tue, 29 Nov 2022 16:43:07 +0100 Subject: [PATCH] Close LauncherInterceptor after reporting session as closed --- .../launcher/core/CloseableLauncher.java | 21 ---------- .../launcher/core/DefaultLauncherSession.java | 40 +++++++++--------- .../core/DelegatingCloseableLauncher.java | 41 ------------------- .../launcher/core/DelegatingLauncher.java | 6 +-- ...auncher.java => InterceptingLauncher.java} | 9 ++-- .../launcher/core/LauncherFactory.java | 2 +- .../core/SessionPerRequestLauncher.java | 4 +- 7 files changed, 29 insertions(+), 94 deletions(-) delete mode 100644 junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/CloseableLauncher.java delete mode 100644 junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingCloseableLauncher.java rename junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/{InterceptingClosableLauncher.java => InterceptingLauncher.java} (84%) diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/CloseableLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/CloseableLauncher.java deleted file mode 100644 index 8f6c63eb251e..000000000000 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/CloseableLauncher.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2015-2022 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.launcher.core; - -import org.junit.platform.launcher.Launcher; - -/** - * @since 1.10 - */ -interface CloseableLauncher extends Launcher, AutoCloseable { - @Override - void close(); -} diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultLauncherSession.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultLauncherSession.java index 54710475a0f8..42969448616e 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultLauncherSession.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultLauncherSession.java @@ -28,19 +28,23 @@ */ class DefaultLauncherSession implements LauncherSession { + private final LauncherInterceptor interceptor; private final LauncherSessionListener listener; - private final DelegatingCloseableLauncher launcher; - - DefaultLauncherSession(List interceptors, Supplier launcherSupplier, - Supplier listenerSupplier) { - LauncherInterceptor interceptor = LauncherInterceptor.composite(interceptors); - this.listener = interceptor.intercept(listenerSupplier::get); - Launcher launcher = interceptor.intercept(launcherSupplier::get); - CloseableLauncher closeableLauncher = new InterceptingClosableLauncher(launcher, interceptor); - this.launcher = new DelegatingCloseableLauncher<>(closeableLauncher, delegate -> { - delegate.close(); - return ClosedLauncher.INSTANCE; - }); + private final DelegatingLauncher launcher; + + DefaultLauncherSession(List interceptors, Supplier listenerSupplier, + Supplier launcherSupplier) { + interceptor = LauncherInterceptor.composite(interceptors); + Launcher launcher; + if (interceptor == LauncherInterceptor.NOOP) { + this.listener = listenerSupplier.get(); + launcher = launcherSupplier.get(); + } + else { + this.listener = interceptor.intercept(listenerSupplier::get); + launcher = new InterceptingLauncher(interceptor.intercept(launcherSupplier::get), interceptor); + } + this.launcher = new DelegatingLauncher(launcher); listener.launcherSessionOpened(this); } @@ -55,13 +59,14 @@ LauncherSessionListener getListener() { @Override public void close() { - if (!launcher.isClosed()) { - launcher.close(); + if (launcher.delegate != ClosedLauncher.INSTANCE) { + launcher.delegate = ClosedLauncher.INSTANCE; listener.launcherSessionClosed(this); + interceptor.close(); } } - private static class ClosedLauncher implements CloseableLauncher { + private static class ClosedLauncher implements Launcher { static final ClosedLauncher INSTANCE = new ClosedLauncher(); @@ -92,10 +97,5 @@ public void execute(LauncherDiscoveryRequest launcherDiscoveryRequest, TestExecu public void execute(TestPlan testPlan, TestExecutionListener... listeners) { throw new PreconditionViolationException("Launcher session has already been closed"); } - - @Override - public void close() { - // do nothing - } } } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingCloseableLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingCloseableLauncher.java deleted file mode 100644 index 01d71475b5f3..000000000000 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingCloseableLauncher.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2015-2022 the original author or authors. - * - * All rights reserved. This program and the accompanying materials are - * made available under the terms of the Eclipse Public License v2.0 which - * accompanies this distribution and is available at - * - * https://www.eclipse.org/legal/epl-v20.html - */ - -package org.junit.platform.launcher.core; - -import java.util.function.Function; - -import org.junit.platform.launcher.Launcher; - -/** - * @since 1.10 - */ -class DelegatingCloseableLauncher extends DelegatingLauncher implements CloseableLauncher { - - private final Function onClose; - private boolean closed; - - public DelegatingCloseableLauncher(T delegate, Function onClose) { - super(delegate); - this.onClose = onClose; - } - - @Override - public final void close() { - if (!closed) { - this.closed = true; - delegate = this.onClose.apply(this.delegate); - } - } - - public boolean isClosed() { - return closed; - } -} diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingLauncher.java index f28b3684e422..65dbd4147332 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingLauncher.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DelegatingLauncher.java @@ -19,11 +19,11 @@ /** * @since 1.10 */ -class DelegatingLauncher implements Launcher { +class DelegatingLauncher implements Launcher { - protected T delegate; + protected Launcher delegate; - DelegatingLauncher(T delegate) { + DelegatingLauncher(Launcher delegate) { this.delegate = delegate; } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingClosableLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java similarity index 84% rename from junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingClosableLauncher.java rename to junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java index 756ffd93d916..c9da99c78bc1 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingClosableLauncher.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/InterceptingLauncher.java @@ -19,15 +19,12 @@ /** * @since 1.10 */ -class InterceptingClosableLauncher extends DelegatingCloseableLauncher { +class InterceptingLauncher extends DelegatingLauncher { private final LauncherInterceptor interceptor; - InterceptingClosableLauncher(Launcher delegate, LauncherInterceptor interceptor) { - super(delegate, it -> { - interceptor.close(); - return it; - }); + InterceptingLauncher(Launcher delegate, LauncherInterceptor interceptor) { + super(delegate); this.interceptor = interceptor; } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherFactory.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherFactory.java index 56532b55ab4a..eb60ce260404 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherFactory.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/LauncherFactory.java @@ -101,7 +101,7 @@ public static LauncherSession openSession(LauncherConfig config) throws Precondi Preconditions.notNull(config, "LauncherConfig must not be null"); LauncherConfigurationParameters configurationParameters = LauncherConfigurationParameters.builder().build(); return new DefaultLauncherSession(collectLauncherInterceptors(configurationParameters), - () -> createDefaultLauncher(config, configurationParameters), () -> createLauncherSessionListener(config)); + () -> createLauncherSessionListener(config), () -> createDefaultLauncher(config, configurationParameters)); } /** diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/SessionPerRequestLauncher.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/SessionPerRequestLauncher.java index dd12240c83d1..167efb6443ec 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/SessionPerRequestLauncher.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/SessionPerRequestLauncher.java @@ -72,8 +72,8 @@ public void execute(TestPlan testPlan, TestExecutionListener... listeners) { } private LauncherSession createSession() { - LauncherSession session = new DefaultLauncherSession(interceptorFactory.get(), launcherSupplier, - sessionListenerSupplier); + LauncherSession session = new DefaultLauncherSession(interceptorFactory.get(), sessionListenerSupplier, + launcherSupplier); Launcher launcher = session.getLauncher(); listenerRegistry.launcherDiscoveryListeners.getListeners().forEach( launcher::registerLauncherDiscoveryListeners);