Skip to content

Commit b693945

Browse files
authored
Use current context and registry when instantiating ExecutableInvoker
Fixes #3905.
1 parent 8e067d3 commit b693945

15 files changed

+73
-51
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-5.11.0-RC1.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ repository on GitHub.
4444

4545
* `TestInstancePostProcessor` extensions can now be registered via the `@ExtendWith`
4646
annotation on non-static fields.
47+
* Methods and constructors invoked via `ExecutableInvoker` now use the same extensions as
48+
the context they are invoked from and the same `ExtensionContext` is passed to
49+
registered instances of `ParameterResolver`.
4750

4851
[[release-notes-5.11.0-RC1-junit-jupiter-deprecations-and-breaking-changes]]
4952
==== Deprecations and Breaking Changes

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ abstract class AbstractExtensionContext<T extends TestDescriptor> implements Ext
5555
private final ExecutableInvoker executableInvoker;
5656

5757
AbstractExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, T testDescriptor,
58-
JupiterConfiguration configuration, ExecutableInvoker executableInvoker) {
59-
this.executableInvoker = executableInvoker;
58+
JupiterConfiguration configuration,
59+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
60+
this.executableInvoker = executableInvokerFactory.apply(this);
6061

6162
Preconditions.notNull(testDescriptor, "TestDescriptor must not be null");
6263
Preconditions.notNull(configuration, "JupiterConfiguration must not be null");

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import org.junit.jupiter.api.TestInstance.Lifecycle;
4040
import org.junit.jupiter.api.extension.AfterAllCallback;
4141
import org.junit.jupiter.api.extension.BeforeAllCallback;
42-
import org.junit.jupiter.api.extension.ExecutableInvoker;
4342
import org.junit.jupiter.api.extension.Extension;
4443
import org.junit.jupiter.api.extension.ExtensionConfigurationException;
4544
import org.junit.jupiter.api.extension.ExtensionContext;
@@ -179,10 +178,9 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte
179178
registerExtensionsFromInstanceFields(registry, this.testClass);
180179

181180
ThrowableCollector throwableCollector = createThrowableCollector();
182-
ExecutableInvoker executableInvoker = new DefaultExecutableInvoker(context);
183181
ClassExtensionContext extensionContext = new ClassExtensionContext(context.getExtensionContext(),
184182
context.getExecutionListener(), this, this.lifecycle, context.getConfiguration(), throwableCollector,
185-
executableInvoker);
183+
it -> new DefaultExecutableInvoker(it, registry));
186184

187185
// @formatter:off
188186
return context.extend()

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassExtensionContext.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.lang.reflect.AnnotatedElement;
1414
import java.lang.reflect.Method;
1515
import java.util.Optional;
16+
import java.util.function.Function;
1617

1718
import org.junit.jupiter.api.TestInstance.Lifecycle;
1819
import org.junit.jupiter.api.extension.ExecutableInvoker;
@@ -38,21 +39,23 @@ final class ClassExtensionContext extends AbstractExtensionContext<ClassBasedTes
3839
* Create a new {@code ClassExtensionContext} with {@link Lifecycle#PER_METHOD}.
3940
*
4041
* @see #ClassExtensionContext(ExtensionContext, EngineExecutionListener, ClassBasedTestDescriptor,
41-
* Lifecycle, JupiterConfiguration, ThrowableCollector, ExecutableInvoker)
42+
* Lifecycle, JupiterConfiguration, ThrowableCollector, Function)
4243
*/
4344
ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
4445
ClassBasedTestDescriptor testDescriptor, JupiterConfiguration configuration,
45-
ThrowableCollector throwableCollector, ExecutableInvoker executableInvoker) {
46+
ThrowableCollector throwableCollector,
47+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
4648

4749
this(parent, engineExecutionListener, testDescriptor, Lifecycle.PER_METHOD, configuration, throwableCollector,
48-
executableInvoker);
50+
executableInvokerFactory);
4951
}
5052

5153
ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
5254
ClassBasedTestDescriptor testDescriptor, Lifecycle lifecycle, JupiterConfiguration configuration,
53-
ThrowableCollector throwableCollector, ExecutableInvoker executableInvoker) {
55+
ThrowableCollector throwableCollector,
56+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
5457

55-
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvoker);
58+
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvokerFactory);
5659

5760
this.lifecycle = lifecycle;
5861
this.throwableCollector = throwableCollector;

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/DynamicExtensionContext.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.lang.reflect.AnnotatedElement;
1414
import java.lang.reflect.Method;
1515
import java.util.Optional;
16+
import java.util.function.Function;
1617

1718
import org.junit.jupiter.api.TestInstance;
1819
import org.junit.jupiter.api.extension.ExecutableInvoker;
@@ -26,8 +27,8 @@ class DynamicExtensionContext extends AbstractExtensionContext<DynamicNodeTestDe
2627

2728
DynamicExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
2829
DynamicNodeTestDescriptor testDescriptor, JupiterConfiguration configuration,
29-
ExecutableInvoker executableInvoker) {
30-
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvoker);
30+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
31+
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvokerFactory);
3132
}
3233

3334
@Override

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/DynamicNodeTestDescriptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ public String getLegacyReportingName() {
4646
@Override
4747
public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext context) {
4848
DynamicExtensionContext extensionContext = new DynamicExtensionContext(context.getExtensionContext(),
49-
context.getExecutionListener(), this, context.getConfiguration(), new DefaultExecutableInvoker(context));
49+
context.getExecutionListener(), this, context.getConfiguration(),
50+
it -> new DefaultExecutableInvoker(it, context.getExtensionRegistry()));
5051
// @formatter:off
5152
return context.extend()
5253
.withExtensionContext(extensionContext)

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineDescriptor.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import static org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.toExecutionMode;
1515

1616
import org.apiguardian.api.API;
17-
import org.junit.jupiter.api.extension.ExecutableInvoker;
1817
import org.junit.jupiter.api.extension.ExtensionContext;
1918
import org.junit.jupiter.engine.config.JupiterConfiguration;
2019
import org.junit.jupiter.engine.execution.DefaultExecutableInvoker;
@@ -53,9 +52,8 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte
5352
MutableExtensionRegistry extensionRegistry = MutableExtensionRegistry.createRegistryWithDefaultExtensions(
5453
context.getConfiguration());
5554
EngineExecutionListener executionListener = context.getExecutionListener();
56-
ExecutableInvoker executableInvoker = new DefaultExecutableInvoker(context);
5755
ExtensionContext extensionContext = new JupiterEngineExtensionContext(executionListener, this,
58-
context.getConfiguration(), executableInvoker);
56+
context.getConfiguration(), it -> new DefaultExecutableInvoker(it, extensionRegistry));
5957

6058
// @formatter:off
6159
return context.extend()

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/JupiterEngineExtensionContext.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
import java.lang.reflect.AnnotatedElement;
1414
import java.lang.reflect.Method;
1515
import java.util.Optional;
16+
import java.util.function.Function;
1617

1718
import org.junit.jupiter.api.TestInstance.Lifecycle;
1819
import org.junit.jupiter.api.extension.ExecutableInvoker;
20+
import org.junit.jupiter.api.extension.ExtensionContext;
1921
import org.junit.jupiter.api.extension.TestInstances;
2022
import org.junit.jupiter.engine.config.JupiterConfiguration;
2123
import org.junit.platform.engine.EngineExecutionListener;
@@ -28,9 +30,9 @@ final class JupiterEngineExtensionContext extends AbstractExtensionContext<Jupit
2830

2931
JupiterEngineExtensionContext(EngineExecutionListener engineExecutionListener,
3032
JupiterEngineDescriptor testDescriptor, JupiterConfiguration configuration,
31-
ExecutableInvoker executableInvoker) {
33+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
3234

33-
super(null, engineExecutionListener, testDescriptor, configuration, executableInvoker);
35+
super(null, engineExecutionListener, testDescriptor, configuration, executableInvokerFactory);
3436
}
3537

3638
@Override

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/MethodExtensionContext.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.lang.reflect.AnnotatedElement;
1414
import java.lang.reflect.Method;
1515
import java.util.Optional;
16+
import java.util.function.Function;
1617

1718
import org.junit.jupiter.api.TestInstance.Lifecycle;
1819
import org.junit.jupiter.api.extension.ExecutableInvoker;
@@ -34,9 +35,10 @@ final class MethodExtensionContext extends AbstractExtensionContext<TestMethodTe
3435

3536
MethodExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
3637
TestMethodTestDescriptor testDescriptor, JupiterConfiguration configuration,
37-
ThrowableCollector throwableCollector, ExecutableInvoker executableInvoker) {
38+
ThrowableCollector throwableCollector,
39+
Function<ExtensionContext, ExecutableInvoker> executableInvokerFactory) {
3840

39-
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvoker);
41+
super(parent, engineExecutionListener, testDescriptor, configuration, executableInvokerFactory);
4042

4143
this.throwableCollector = throwableCollector;
4244
}

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/TestMethodTestDescriptor.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
2525
import org.junit.jupiter.api.extension.BeforeEachCallback;
2626
import org.junit.jupiter.api.extension.BeforeTestExecutionCallback;
27-
import org.junit.jupiter.api.extension.ExecutableInvoker;
2827
import org.junit.jupiter.api.extension.Extension;
2928
import org.junit.jupiter.api.extension.ExtensionContext;
3029
import org.junit.jupiter.api.extension.InvocationInterceptor;
@@ -99,9 +98,9 @@ public Type getType() {
9998
public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext context) {
10099
MutableExtensionRegistry registry = populateNewExtensionRegistry(context);
101100
ThrowableCollector throwableCollector = createThrowableCollector();
102-
ExecutableInvoker executableInvoker = new DefaultExecutableInvoker(context);
103101
MethodExtensionContext extensionContext = new MethodExtensionContext(context.getExtensionContext(),
104-
context.getExecutionListener(), this, context.getConfiguration(), throwableCollector, executableInvoker);
102+
context.getExecutionListener(), this, context.getConfiguration(), throwableCollector,
103+
it -> new DefaultExecutableInvoker(it, registry));
105104
throwableCollector.execute(() -> {
106105
TestInstances testInstances = context.getTestInstancesProvider().getTestInstances(registry,
107106
throwableCollector);

0 commit comments

Comments
 (0)