From 170bfa606f63d103e561a94f537e01295a74e668 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Sat, 29 Jul 2023 11:49:33 +0200 Subject: [PATCH] Move OutputDirProvider to EngineDiscoveryRequest --- .../jupiter/engine/JupiterTestEngine.java | 8 ++-- .../config/CachingJupiterConfiguration.java | 5 ++ .../config/DefaultJupiterConfiguration.java | 10 +++- .../engine/config/JupiterConfiguration.java | 2 + .../descriptor/AbstractExtensionContext.java | 22 +-------- .../descriptor/JupiterEngineDescriptor.java | 2 +- .../JupiterEngineExtensionContext.java | 5 +- .../JupiterEngineExecutionContext.java | 16 ++----- .../DefaultJupiterConfigurationTests.java | 20 ++++---- .../descriptor/ExtensionContextTests.java | 9 ++-- .../TestFactoryTestDescriptorTests.java | 3 +- .../TestInstanceLifecycleUtilsTests.java | 18 ++++--- .../JupiterEngineExecutionContextTests.java | 3 +- .../engine/EngineDiscoveryRequest.java | 4 ++ .../platform/engine/ExecutionRequest.java | 47 ++----------------- .../core/DefaultDiscoveryRequest.java | 12 +++++ .../core/EngineExecutionOrchestrator.java | 21 ++------- .../testkit/engine/EngineTestKit.java | 3 +- .../VintageTestEngineExecutionTests.java | 5 +- .../HierarchicalTestExecutorTests.java | 3 +- 20 files changed, 84 insertions(+), 134 deletions(-) diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/JupiterTestEngine.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/JupiterTestEngine.java index a41608241587..4e2c969e9468 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/JupiterTestEngine.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/JupiterTestEngine.java @@ -63,8 +63,8 @@ public Optional getArtifactId() { @Override public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) { - JupiterConfiguration configuration = new CachingJupiterConfiguration( - new DefaultJupiterConfiguration(discoveryRequest.getConfigurationParameters())); + JupiterConfiguration configuration = new CachingJupiterConfiguration(new DefaultJupiterConfiguration( + discoveryRequest.getConfigurationParameters(), discoveryRequest.getOutputDirProvider())); JupiterEngineDescriptor engineDescriptor = new JupiterEngineDescriptor(uniqueId, configuration); new DiscoverySelectorResolver().resolveSelectors(discoveryRequest, engineDescriptor); return engineDescriptor; @@ -82,8 +82,8 @@ protected HierarchicalTestExecutorService createExecutorService(ExecutionRequest @Override protected JupiterEngineExecutionContext createExecutionContext(ExecutionRequest request) { - return new JupiterEngineExecutionContext(request.getEngineExecutionListener(), getJupiterConfiguration(request), - request.getOutputDirProvider()); + return new JupiterEngineExecutionContext(request.getEngineExecutionListener(), + getJupiterConfiguration(request)); } /** diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java index 2d61b58c1c32..e8be71d4b586 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java @@ -29,6 +29,7 @@ import org.junit.jupiter.api.io.CleanupMode; import org.junit.jupiter.api.io.TempDirFactory; import org.junit.jupiter.api.parallel.ExecutionMode; +import org.junit.platform.engine.reporting.OutputDirProvider; /** * Caching implementation of the {@link JupiterConfiguration} API. @@ -125,4 +126,8 @@ public Supplier getDefaultTempDirFactorySupplier() { key -> delegate.getDefaultTempDirFactorySupplier()); } + @Override + public OutputDirProvider getOutputDirProvider() { + return delegate.getOutputDirProvider(); + } } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java index d64c4ceee318..e4c4862a7cbd 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java @@ -32,6 +32,7 @@ import org.junit.platform.commons.util.ClassNamePatternFilterUtils; import org.junit.platform.commons.util.Preconditions; import org.junit.platform.engine.ConfigurationParameters; +import org.junit.platform.engine.reporting.OutputDirProvider; /** * Default implementation of the {@link JupiterConfiguration} API. @@ -63,10 +64,13 @@ public class DefaultJupiterConfiguration implements JupiterConfiguration { new InstantiatingConfigurationParameterConverter<>(TempDirFactory.class, "temp dir factory"); private final ConfigurationParameters configurationParameters; + private final OutputDirProvider outputDirProvider; - public DefaultJupiterConfiguration(ConfigurationParameters configurationParameters) { + public DefaultJupiterConfiguration(ConfigurationParameters configurationParameters, + OutputDirProvider outputDirProvider) { this.configurationParameters = Preconditions.notNull(configurationParameters, "ConfigurationParameters must not be null"); + this.outputDirProvider = outputDirProvider; } @Override @@ -141,4 +145,8 @@ public Supplier getDefaultTempDirFactorySupplier() { return () -> supplier.get().orElse(TempDirFactory.Standard.INSTANCE); } + @Override + public OutputDirProvider getOutputDirProvider() { + return outputDirProvider; + } } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java index 559b4d7d5715..62a219e9787d 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.io.TempDirFactory; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; +import org.junit.platform.engine.reporting.OutputDirProvider; /** * @since 5.4 @@ -70,4 +71,5 @@ public interface JupiterConfiguration { Supplier getDefaultTempDirFactorySupplier(); + OutputDirProvider getOutputDirProvider(); } diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java index 5b1e679ce8ba..7b93a9ef7c81 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java @@ -36,7 +36,6 @@ import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestTag; import org.junit.platform.engine.reporting.FileEntry; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.engine.reporting.ReportEntry; import org.junit.platform.engine.support.hierarchical.Node; import org.junit.platform.engine.support.store.NamespacedHierarchicalStore; @@ -57,18 +56,11 @@ abstract class AbstractExtensionContext implements Ext private final T testDescriptor; private final Set tags; private final JupiterConfiguration configuration; - private final OutputDirProvider outputDirProvider; private final NamespacedHierarchicalStore valuesStore; private final ExecutableInvoker executableInvoker; AbstractExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, T testDescriptor, JupiterConfiguration configuration, ExecutableInvoker executableInvoker) { - this(parent, engineExecutionListener, testDescriptor, configuration, null, executableInvoker); - } - - AbstractExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, T testDescriptor, - JupiterConfiguration configuration, OutputDirProvider outputDirProvider, - ExecutableInvoker executableInvoker) { this.executableInvoker = executableInvoker; Preconditions.notNull(testDescriptor, "TestDescriptor must not be null"); @@ -78,7 +70,6 @@ abstract class AbstractExtensionContext implements Ext this.engineExecutionListener = engineExecutionListener; this.testDescriptor = testDescriptor; this.configuration = configuration; - this.outputDirProvider = outputDirProvider; this.valuesStore = createStore(parent); // @formatter:off @@ -119,7 +110,7 @@ public void publishReportEntry(Map values) { @Override public void publishFile(String fileName, ThrowingConsumer action) { try { - getOutputDirProvider().createOutputDirectory(this.testDescriptor).ifPresent(dir -> { + configuration.getOutputDirProvider().createOutputDirectory(this.testDescriptor).ifPresent(dir -> { try { Path file = dir.resolve(fileName); action.accept(file); @@ -136,17 +127,6 @@ public void publishFile(String fileName, ThrowingConsumer action) { } } - private OutputDirProvider getOutputDirProvider() { - if (outputDirProvider == null) { - return getParent() // - .filter(it -> it instanceof AbstractExtensionContext) // - .map(it -> (AbstractExtensionContext) it) // - .map(AbstractExtensionContext::getOutputDirProvider).orElseThrow( - () -> new JUnitException("Missing OutputDirProvider")); - } - return outputDirProvider; - } - @Override public Optional getParent() { return Optional.ofNullable(this.parent); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineDescriptor.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineDescriptor.java index 03da66756e86..3a87753ca530 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineDescriptor.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineDescriptor.java @@ -55,7 +55,7 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte EngineExecutionListener executionListener = context.getExecutionListener(); ExecutableInvoker executableInvoker = new DefaultExecutableInvoker(context); ExtensionContext extensionContext = new JupiterEngineExtensionContext(executionListener, this, - context.getConfiguration(), context.getOutputDirProvider(), executableInvoker); + context.getConfiguration(), executableInvoker); // @formatter:off return context.extend() diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineExtensionContext.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineExtensionContext.java index 72fb7eda061d..26eb83f7fa50 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineExtensionContext.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineExtensionContext.java @@ -19,7 +19,6 @@ import org.junit.jupiter.api.extension.TestInstances; import org.junit.jupiter.engine.config.JupiterConfiguration; import org.junit.platform.engine.EngineExecutionListener; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.engine.support.hierarchical.Node; /** @@ -29,9 +28,9 @@ final class JupiterEngineExtensionContext extends AbstractExtensionContext new DefaultJupiterConfiguration(null)); + () -> new DefaultJupiterConfiguration(null, OutputDirProvider.NOOP)); assertThat(exception).hasMessage("ConfigurationParameters must not be null"); } @Test void getDefaultTestInstanceLifecycleWithNoConfigParamSet() { - JupiterConfiguration configuration = new DefaultJupiterConfiguration(mock()); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP); Lifecycle lifecycle = configuration.getDefaultTestInstanceLifecycle(); assertThat(lifecycle).isEqualTo(PER_METHOD); } @Test void getDefaultTempDirCleanupModeWithNoConfigParamSet() { - JupiterConfiguration configuration = new DefaultJupiterConfiguration(mock()); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP); CleanupMode cleanupMode = configuration.getDefaultTempDirCleanupMode(); assertThat(cleanupMode).isEqualTo(ALWAYS); } @@ -82,7 +83,7 @@ void shouldGetDefaultDisplayNameGeneratorWithConfigParamSet() { ConfigurationParameters parameters = mock(); String key = Constants.DEFAULT_DISPLAY_NAME_GENERATOR_PROPERTY_NAME; when(parameters.get(key)).thenReturn(Optional.of(CustomDisplayNameGenerator.class.getName())); - JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters, OutputDirProvider.NOOP); DisplayNameGenerator defaultDisplayNameGenerator = configuration.getDefaultDisplayNameGenerator(); @@ -94,7 +95,7 @@ void shouldGetStandardAsDefaultDisplayNameGeneratorWithoutConfigParamSet() { ConfigurationParameters parameters = mock(); String key = Constants.DEFAULT_DISPLAY_NAME_GENERATOR_PROPERTY_NAME; when(parameters.get(key)).thenReturn(Optional.empty()); - JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters, OutputDirProvider.NOOP); DisplayNameGenerator defaultDisplayNameGenerator = configuration.getDefaultDisplayNameGenerator(); @@ -106,7 +107,7 @@ void shouldGetNothingAsDefaultTestMethodOrderWithoutConfigParamSet() { ConfigurationParameters parameters = mock(); String key = Constants.DEFAULT_TEST_METHOD_ORDER_PROPERTY_NAME; when(parameters.get(key)).thenReturn(Optional.empty()); - JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters, OutputDirProvider.NOOP); final Optional defaultTestMethodOrder = configuration.getDefaultTestMethodOrderer(); @@ -118,7 +119,7 @@ void shouldGetDefaultTempDirFactorySupplierWithConfigParamSet() { ConfigurationParameters parameters = mock(); String key = Constants.DEFAULT_TEMP_DIR_FACTORY_PROPERTY_NAME; when(parameters.get(key)).thenReturn(Optional.of(CustomFactory.class.getName())); - JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters, OutputDirProvider.NOOP); Supplier supplier = configuration.getDefaultTempDirFactorySupplier(); @@ -138,7 +139,7 @@ void shouldGetStandardAsDefaultTempDirFactorySupplierWithoutConfigParamSet() { ConfigurationParameters parameters = mock(); String key = Constants.DEFAULT_TEMP_DIR_FACTORY_PROPERTY_NAME; when(parameters.get(key)).thenReturn(Optional.empty()); - JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters); + JupiterConfiguration configuration = new DefaultJupiterConfiguration(parameters, OutputDirProvider.NOOP); Supplier supplier = configuration.getDefaultTempDirFactorySupplier(); @@ -148,7 +149,8 @@ void shouldGetStandardAsDefaultTempDirFactorySupplierWithoutConfigParamSet() { private void assertDefaultConfigParam(String configValue, Lifecycle expected) { ConfigurationParameters configParams = mock(); when(configParams.get(KEY)).thenReturn(Optional.ofNullable(configValue)); - Lifecycle lifecycle = new DefaultJupiterConfiguration(configParams).getDefaultTestInstanceLifecycle(); + Lifecycle lifecycle = new DefaultJupiterConfiguration(configParams, + OutputDirProvider.NOOP).getDefaultTestInstanceLifecycle(); assertThat(lifecycle).isEqualTo(expected); } diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/ExtensionContextTests.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/ExtensionContextTests.java index c5a2c8bcd6bc..6f2da45ede55 100644 --- a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/ExtensionContextTests.java +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/ExtensionContextTests.java @@ -75,7 +75,7 @@ void fromJupiterEngineDescriptor() { UniqueId.root("engine", "junit-jupiter"), configuration); JupiterEngineExtensionContext engineContext = new JupiterEngineExtensionContext(null, engineTestDescriptor, - configuration, OutputDirProvider.NOOP, null); + configuration, null); // @formatter:off assertAll("engineContext", @@ -162,7 +162,7 @@ void fromMethodTestDescriptor() { Method testMethod = methodTestDescriptor.getTestMethod(); JupiterEngineExtensionContext engineExtensionContext = new JupiterEngineExtensionContext(null, engineDescriptor, - configuration, OutputDirProvider.NOOP, null); + configuration, null); ClassExtensionContext classExtensionContext = new ClassExtensionContext(engineExtensionContext, null, classTestDescriptor, configuration, null, null); MethodExtensionContext methodExtensionContext = new MethodExtensionContext(classExtensionContext, null, @@ -259,7 +259,7 @@ void usingStore() { @TestFactory Stream configurationParameter() throws Exception { - JupiterConfiguration echo = new DefaultJupiterConfiguration(new EchoParameters()); + JupiterConfiguration echo = new DefaultJupiterConfiguration(new EchoParameters(), OutputDirProvider.NOOP); String key = "123"; Optional expected = Optional.of(key); @@ -275,8 +275,7 @@ Stream configurationParameter() throws Exception { configuration); return Stream.of( // - (ExtensionContext) new JupiterEngineExtensionContext(null, engineDescriptor, echo, OutputDirProvider.NOOP, - null), // + (ExtensionContext) new JupiterEngineExtensionContext(null, engineDescriptor, echo, null), // new ClassExtensionContext(null, null, classTestDescriptor, echo, null, null), // new MethodExtensionContext(null, null, methodTestDescriptor, echo, null, null) // ).map(context -> dynamicTest(context.getClass().getSimpleName(), diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestFactoryTestDescriptorTests.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestFactoryTestDescriptorTests.java index 3e9f52bdb6c5..7718e771ae2f 100644 --- a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestFactoryTestDescriptorTests.java +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestFactoryTestDescriptorTests.java @@ -32,7 +32,6 @@ import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext; import org.junit.platform.engine.TestSource; import org.junit.platform.engine.UniqueId; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.engine.support.descriptor.ClasspathResourceSource; import org.junit.platform.engine.support.descriptor.DirectorySource; import org.junit.platform.engine.support.descriptor.FilePosition; @@ -139,7 +138,7 @@ void before() throws Exception { extensionContext = mock(); isClosed = false; - context = new JupiterEngineExecutionContext(null, null, OutputDirProvider.NOOP) // + context = new JupiterEngineExecutionContext(null, null) // .extend() // .withThrowableCollector(new OpenTest4JAwareThrowableCollector()) // .withExtensionContext(extensionContext) // diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestInstanceLifecycleUtilsTests.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestInstanceLifecycleUtilsTests.java index 46fab2deece5..c04a56a93bcb 100644 --- a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestInstanceLifecycleUtilsTests.java +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/descriptor/TestInstanceLifecycleUtilsTests.java @@ -32,6 +32,7 @@ import org.junit.jupiter.engine.config.DefaultJupiterConfiguration; import org.junit.platform.commons.PreconditionViolationException; import org.junit.platform.engine.ConfigurationParameters; +import org.junit.platform.engine.reporting.OutputDirProvider; /** * Unit tests for {@link TestInstanceLifecycleUtils}. @@ -50,7 +51,7 @@ class TestInstanceLifecycleUtilsTests { @Test void getTestInstanceLifecyclePreconditions() { PreconditionViolationException exception = assertThrows(PreconditionViolationException.class, - () -> getTestInstanceLifecycle(null, new DefaultJupiterConfiguration(mock()))); + () -> getTestInstanceLifecycle(null, new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP))); assertThat(exception).hasMessage("testClass must not be null"); exception = assertThrows(PreconditionViolationException.class, @@ -60,7 +61,8 @@ void getTestInstanceLifecyclePreconditions() { @Test void getTestInstanceLifecycleWithNoConfigParamSet() { - Lifecycle lifecycle = getTestInstanceLifecycle(getClass(), new DefaultJupiterConfiguration(mock())); + Lifecycle lifecycle = getTestInstanceLifecycle(getClass(), + new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP)); assertThat(lifecycle).isEqualTo(PER_METHOD); } @@ -68,7 +70,8 @@ void getTestInstanceLifecycleWithNoConfigParamSet() { void getTestInstanceLifecycleWithConfigParamSet() { ConfigurationParameters configParams = mock(); when(configParams.get(KEY)).thenReturn(Optional.of(PER_CLASS.name().toLowerCase())); - Lifecycle lifecycle = getTestInstanceLifecycle(getClass(), new DefaultJupiterConfiguration(configParams)); + Lifecycle lifecycle = getTestInstanceLifecycle(getClass(), + new DefaultJupiterConfiguration(configParams, OutputDirProvider.NOOP)); assertThat(lifecycle).isEqualTo(PER_CLASS); } @@ -76,21 +79,24 @@ void getTestInstanceLifecycleWithConfigParamSet() { void getTestInstanceLifecycleWithLocalConfigThatOverridesCustomDefaultSetViaConfigParam() { ConfigurationParameters configParams = mock(); when(configParams.get(KEY)).thenReturn(Optional.of(PER_CLASS.name().toLowerCase())); - Lifecycle lifecycle = getTestInstanceLifecycle(TestCase.class, new DefaultJupiterConfiguration(configParams)); + Lifecycle lifecycle = getTestInstanceLifecycle(TestCase.class, + new DefaultJupiterConfiguration(configParams, OutputDirProvider.NOOP)); assertThat(lifecycle).isEqualTo(PER_METHOD); } @Test void getTestInstanceLifecycleFromMetaAnnotationWithNoConfigParamSet() { Class testClass = BaseMetaAnnotatedTestCase.class; - Lifecycle lifecycle = getTestInstanceLifecycle(testClass, new DefaultJupiterConfiguration(mock())); + Lifecycle lifecycle = getTestInstanceLifecycle(testClass, + new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP)); assertThat(lifecycle).isEqualTo(PER_CLASS); } @Test void getTestInstanceLifecycleFromSpecializedClassWithNoConfigParamSet() { Class testClass = SpecializedTestCase.class; - Lifecycle lifecycle = getTestInstanceLifecycle(testClass, new DefaultJupiterConfiguration(mock())); + Lifecycle lifecycle = getTestInstanceLifecycle(testClass, + new DefaultJupiterConfiguration(mock(), OutputDirProvider.NOOP)); assertThat(lifecycle).isEqualTo(PER_CLASS); } diff --git a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/execution/JupiterEngineExecutionContextTests.java b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/execution/JupiterEngineExecutionContextTests.java index e20207007a83..d6e619d886bd 100644 --- a/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/execution/JupiterEngineExecutionContextTests.java +++ b/junit-jupiter-engine/src/test/java/org/junit/jupiter/engine/execution/JupiterEngineExecutionContextTests.java @@ -27,7 +27,6 @@ import org.junit.jupiter.engine.extension.MutableExtensionRegistry; import org.junit.platform.commons.logging.LogRecordListener; import org.junit.platform.engine.EngineExecutionListener; -import org.junit.platform.engine.reporting.OutputDirProvider; /** * Unit tests for {@link JupiterEngineExecutionContext}. @@ -41,7 +40,7 @@ class JupiterEngineExecutionContextTests { private final EngineExecutionListener engineExecutionListener = mock(); private final JupiterEngineExecutionContext originalContext = new JupiterEngineExecutionContext( - engineExecutionListener, configuration, OutputDirProvider.NOOP); + engineExecutionListener, configuration); @Test void executionListenerIsHandedOnWhenContextIsExtended() { diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/EngineDiscoveryRequest.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/EngineDiscoveryRequest.java index 0ea3b70ce8d7..0c5c3691077a 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/EngineDiscoveryRequest.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/EngineDiscoveryRequest.java @@ -15,6 +15,7 @@ import java.util.List; import org.apiguardian.api.API; +import org.junit.platform.engine.reporting.OutputDirProvider; /** * {@code EngineDiscoveryRequest} provides a {@link TestEngine} access to the @@ -84,4 +85,7 @@ default EngineDiscoveryListener getDiscoveryListener() { return EngineDiscoveryListener.NOOP; } + default OutputDirProvider getOutputDirProvider() { + return OutputDirProvider.NOOP; + } } diff --git a/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java b/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java index b288652fd634..f4f503f3b754 100644 --- a/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java +++ b/junit-platform-engine/src/main/java/org/junit/platform/engine/ExecutionRequest.java @@ -10,12 +10,10 @@ package org.junit.platform.engine; -import static org.apiguardian.api.API.Status.DEPRECATED; -import static org.apiguardian.api.API.Status.EXPERIMENTAL; +import static org.apiguardian.api.API.Status.INTERNAL; import static org.apiguardian.api.API.Status.STABLE; import org.apiguardian.api.API; -import org.junit.platform.engine.reporting.OutputDirProvider; /** * Provides a single {@link TestEngine} access to the information necessary to @@ -33,25 +31,15 @@ public class ExecutionRequest { private final TestDescriptor rootTestDescriptor; - private final EngineExecutionListener engineExecutionListener; - private final ConfigurationParameters configurationParameters; - private final OutputDirProvider outputDirProvider; - @API(status = DEPRECATED, since = "1.11") - @Deprecated + @API(status = INTERNAL, since = "1.0") public ExecutionRequest(TestDescriptor rootTestDescriptor, EngineExecutionListener engineExecutionListener, ConfigurationParameters configurationParameters) { - this(rootTestDescriptor, engineExecutionListener, configurationParameters, OutputDirProvider.NOOP); - } - - private ExecutionRequest(TestDescriptor rootTestDescriptor, EngineExecutionListener engineExecutionListener, - ConfigurationParameters configurationParameters, OutputDirProvider outputDirProvider) { this.rootTestDescriptor = rootTestDescriptor; this.engineExecutionListener = engineExecutionListener; this.configurationParameters = configurationParameters; - this.outputDirProvider = outputDirProvider; } /** @@ -65,33 +53,10 @@ private ExecutionRequest(TestDescriptor rootTestDescriptor, EngineExecutionListe * @return a new {@code ExecutionRequest}; never {@code null} * @since 1.9 */ - @Deprecated - @API(status = DEPRECATED, since = "1.11") + @API(status = STABLE, since = "1.9") public static ExecutionRequest create(TestDescriptor rootTestDescriptor, EngineExecutionListener engineExecutionListener, ConfigurationParameters configurationParameters) { - return create(rootTestDescriptor, engineExecutionListener, configurationParameters, OutputDirProvider.NOOP); - } - - /** - * Factory for creating an execution request. - * - * @param rootTestDescriptor the engine's root {@link TestDescriptor}; must - * not be {@code null} - * @param engineExecutionListener the {@link EngineExecutionListener} to be - * notified of test execution events; must not be {@code null} - * @param configurationParameters {@link ConfigurationParameters} that the - * engine may use to influence test execution; must not be {@code null} - * @param outputDirProvider the provider for test output directories; must - * not be {@code null} - * @return a new {@code ExecutionRequest}; never {@code null} - * @since 1.11 - */ - @API(status = EXPERIMENTAL, since = "1.11") - public static ExecutionRequest create(TestDescriptor rootTestDescriptor, - EngineExecutionListener engineExecutionListener, ConfigurationParameters configurationParameters, - OutputDirProvider outputDirProvider) { - return new ExecutionRequest(rootTestDescriptor, engineExecutionListener, configurationParameters, - outputDirProvider); + return new ExecutionRequest(rootTestDescriptor, engineExecutionListener, configurationParameters); } /** @@ -122,8 +87,4 @@ public ConfigurationParameters getConfigurationParameters() { return this.configurationParameters; } - public OutputDirProvider getOutputDirProvider() { - return outputDirProvider; - } - } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultDiscoveryRequest.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultDiscoveryRequest.java index 422f9592374e..f2d685398af2 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultDiscoveryRequest.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/DefaultDiscoveryRequest.java @@ -12,6 +12,7 @@ import static java.util.Collections.unmodifiableList; import static java.util.stream.Collectors.toList; +import static org.junit.platform.launcher.LauncherConstants.OUTPUT_DIR_PROPERTY_NAME; import java.util.List; @@ -20,10 +21,12 @@ import org.junit.platform.engine.DiscoveryFilter; import org.junit.platform.engine.DiscoverySelector; import org.junit.platform.engine.EngineDiscoveryRequest; +import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.launcher.EngineFilter; import org.junit.platform.launcher.LauncherDiscoveryListener; import org.junit.platform.launcher.LauncherDiscoveryRequest; import org.junit.platform.launcher.PostDiscoveryFilter; +import org.junit.platform.launcher.listeners.OutputDir; /** * {@code DefaultDiscoveryRequest} is the default implementation of the @@ -94,4 +97,13 @@ public LauncherDiscoveryListener getDiscoveryListener() { return discoveryListener; } + @Override + public OutputDirProvider getOutputDirProvider() { + // TODO Provider another configuration parameter to disable writing outputs? + // TODO OutputDirProvider could be made configurable via another configuration parameter + return new HierarchicalOutputDirProvider(() -> { + OutputDir outputDir = OutputDir.create(configurationParameters.get(OUTPUT_DIR_PROPERTY_NAME)); + return outputDir.createDir("junit"); + }); + } } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/EngineExecutionOrchestrator.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/EngineExecutionOrchestrator.java index e190f6c44faa..c13f744fcdf3 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/EngineExecutionOrchestrator.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/core/EngineExecutionOrchestrator.java @@ -12,7 +12,6 @@ import static org.apiguardian.api.API.Status.INTERNAL; import static org.junit.platform.launcher.LauncherConstants.DRY_RUN_PROPERTY_NAME; -import static org.junit.platform.launcher.LauncherConstants.OUTPUT_DIR_PROPERTY_NAME; import static org.junit.platform.launcher.LauncherConstants.STACKTRACE_PRUNING_ENABLED_PROPERTY_NAME; import static org.junit.platform.launcher.core.ListenerRegistry.forEngineExecutionListeners; @@ -29,11 +28,9 @@ import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestEngine; import org.junit.platform.engine.TestExecutionResult; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.launcher.TestExecutionListener; import org.junit.platform.launcher.TestIdentifier; import org.junit.platform.launcher.TestPlan; -import org.junit.platform.launcher.listeners.OutputDir; /** * Orchestrates test execution using the configured test engines. @@ -159,7 +156,6 @@ public void execute(LauncherDiscoveryResult discoveryResult, EngineExecutionList Preconditions.notNull(engineExecutionListener, "engineExecutionListener must not be null"); ConfigurationParameters configurationParameters = discoveryResult.getConfigurationParameters(); - OutputDirProvider outputDirProvider = createOutputDirProvider(configurationParameters); EngineExecutionListener listener = selectExecutionListener(engineExecutionListener, configurationParameters); for (TestEngine testEngine : discoveryResult.getTestEngines()) { @@ -170,20 +166,11 @@ public void execute(LauncherDiscoveryResult discoveryResult, EngineExecutionList TestExecutionResult.failed(((EngineDiscoveryErrorDescriptor) engineDescriptor).getCause())); } else { - execute(engineDescriptor, listener, configurationParameters, outputDirProvider, testEngine); + execute(engineDescriptor, listener, configurationParameters, testEngine); } } } - private static OutputDirProvider createOutputDirProvider(ConfigurationParameters configurationParameters) { - // TODO Provider another configuration parameter to disable writing outputs? - // TODO OutputDirProvider could be made configurable via another configuration parameter - return new HierarchicalOutputDirProvider(() -> { - OutputDir outputDir = OutputDir.create(configurationParameters.get(OUTPUT_DIR_PROPERTY_NAME)); - return outputDir.createDir("junit"); - }); - } - private static EngineExecutionListener selectExecutionListener(EngineExecutionListener engineExecutionListener, ConfigurationParameters configurationParameters) { boolean stackTracePruningEnabled = configurationParameters.getBoolean(STACKTRACE_PRUNING_ENABLED_PROPERTY_NAME) // @@ -203,14 +190,12 @@ private ListenerRegistry buildListenerRegistryForExecutio } private void execute(TestDescriptor engineDescriptor, EngineExecutionListener listener, - ConfigurationParameters configurationParameters, OutputDirProvider outputDirProvider, - TestEngine testEngine) { + ConfigurationParameters configurationParameters, TestEngine testEngine) { OutcomeDelayingEngineExecutionListener delayingListener = new OutcomeDelayingEngineExecutionListener(listener, engineDescriptor); try { - testEngine.execute(ExecutionRequest.create(engineDescriptor, delayingListener, configurationParameters, - outputDirProvider)); + testEngine.execute(ExecutionRequest.create(engineDescriptor, delayingListener, configurationParameters)); delayingListener.reportEngineOutcome(); } catch (Throwable throwable) { diff --git a/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/EngineTestKit.java b/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/EngineTestKit.java index 2c7fc4004d04..c8415e3ac1f0 100644 --- a/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/EngineTestKit.java +++ b/junit-platform-testkit/src/main/java/org/junit/platform/testkit/engine/EngineTestKit.java @@ -34,7 +34,6 @@ import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestEngine; import org.junit.platform.engine.UniqueId; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.launcher.LauncherDiscoveryRequest; import org.junit.platform.launcher.core.EngineDiscoveryOrchestrator; import org.junit.platform.launcher.core.EngineExecutionOrchestrator; @@ -251,7 +250,7 @@ private static void executeDirectly(TestEngine testEngine, EngineDiscoveryReques UniqueId engineUniqueId = UniqueId.forEngine(testEngine.getId()); TestDescriptor engineTestDescriptor = testEngine.discover(discoveryRequest, engineUniqueId); ExecutionRequest request = ExecutionRequest.create(engineTestDescriptor, listener, - discoveryRequest.getConfigurationParameters(), OutputDirProvider.NOOP); + discoveryRequest.getConfigurationParameters()); testEngine.execute(request); } diff --git a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/VintageTestEngineExecutionTests.java b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/VintageTestEngineExecutionTests.java index 65916fdda781..c396402d3b95 100644 --- a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/VintageTestEngineExecutionTests.java +++ b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/VintageTestEngineExecutionTests.java @@ -45,7 +45,6 @@ import org.junit.platform.engine.TestEngine; import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.UniqueId; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.launcher.LauncherDiscoveryRequest; import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder; import org.junit.platform.testkit.engine.EngineExecutionResults; @@ -900,8 +899,8 @@ private static void execute(Class testClass, EngineExecutionListener listener TestEngine testEngine = new VintageTestEngine(); var discoveryRequest = request(testClass); var engineTestDescriptor = testEngine.discover(discoveryRequest, UniqueId.forEngine(testEngine.getId())); - testEngine.execute(ExecutionRequest.create(engineTestDescriptor, listener, - discoveryRequest.getConfigurationParameters(), OutputDirProvider.NOOP)); + testEngine.execute( + ExecutionRequest.create(engineTestDescriptor, listener, discoveryRequest.getConfigurationParameters())); } private static LauncherDiscoveryRequest request(Class testClass) { diff --git a/platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutorTests.java b/platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutorTests.java index e9a1e94fe31e..230b566694e2 100644 --- a/platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutorTests.java +++ b/platform-tests/src/test/java/org/junit/platform/engine/support/hierarchical/HierarchicalTestExecutorTests.java @@ -42,7 +42,6 @@ import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestExecutionResult; import org.junit.platform.engine.UniqueId; -import org.junit.platform.engine.reporting.OutputDirProvider; import org.junit.platform.engine.support.descriptor.AbstractTestDescriptor; import org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode; import org.junit.platform.engine.support.hierarchical.Node.DynamicTestExecutor; @@ -78,7 +77,7 @@ void init() { private HierarchicalTestExecutor createExecutor( HierarchicalTestExecutorService executorService) { - var request = ExecutionRequest.create(root, listener, null, OutputDirProvider.NOOP); + var request = ExecutionRequest.create(root, listener, null); return new HierarchicalTestExecutor<>(request, rootContext, executorService, OpenTest4JAwareThrowableCollector::new); }