Skip to content

Commit cfb6845

Browse files
committed
Enable specific global extension in JUnit 5
Issue: #3717 Signed-off-by: yongjunhong <[email protected]>
1 parent 6157803 commit cfb6845

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,16 @@ public CachingJupiterConfiguration(JupiterConfiguration delegate) {
4646
this.delegate = delegate;
4747
}
4848

49+
@Override
50+
public Optional<String> getExtensionAutodetectionIncludePattern() {
51+
return delegate.getExtensionAutodetectionIncludePattern();
52+
}
53+
54+
@Override
55+
public Optional<String> getExtensionAutodetectionExcludePattern() {
56+
return delegate.getExtensionAutodetectionExcludePattern();
57+
}
58+
4959
@Override
5060
public Optional<String> getRawConfigurationParameter(String key) {
5161
return delegate.getRawConfigurationParameter(key);

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,16 @@ public DefaultJupiterConfiguration(ConfigurationParameters configurationParamete
7373
"ConfigurationParameters must not be null");
7474
}
7575

76+
@Override
77+
public Optional<String> getExtensionAutodetectionIncludePattern() {
78+
return configurationParameters.get(EXTENSIONS_AUTODETECTION_INCLUDE_PROPERTY_NAME);
79+
}
80+
81+
@Override
82+
public Optional<String> getExtensionAutodetectionExcludePattern() {
83+
return configurationParameters.get(EXTENSIONS_AUTODETECTION_EXCLUDE_PROPERTY_NAME);
84+
}
85+
7686
@Override
7787
public Optional<String> getRawConfigurationParameter(String key) {
7888
return configurationParameters.get(key);

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
@API(status = INTERNAL, since = "5.4")
3737
public interface JupiterConfiguration {
3838

39+
String EXTENSIONS_AUTODETECTION_INCLUDE_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.include";
40+
String EXTENSIONS_AUTODETECTION_EXCLUDE_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.exclude";
3941
String DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME = "junit.jupiter.conditions.deactivate";
4042
String PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME = "junit.jupiter.execution.parallel.enabled";
4143
String DEFAULT_EXECUTION_MODE_PROPERTY_NAME = Execution.DEFAULT_EXECUTION_MODE_PROPERTY_NAME;
@@ -48,6 +50,10 @@ public interface JupiterConfiguration {
4850
String DEFAULT_TEST_CLASS_ORDER_PROPERTY_NAME = ClassOrderer.DEFAULT_ORDER_PROPERTY_NAME;;
4951
String DEFAULT_TEST_INSTANTIATION_EXTENSION_CONTEXT_SCOPE_PROPERTY_NAME = ExtensionContextScope.DEFAULT_SCOPE_PROPERTY_NAME;
5052

53+
Optional<String> getExtensionAutodetectionIncludePattern();
54+
55+
Optional<String> getExtensionAutodetectionExcludePattern();
56+
5157
Optional<String> getRawConfigurationParameter(String key);
5258

5359
<T> Optional<T> getRawConfigurationParameter(String key, Function<String, T> transformer);

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/MutableExtensionRegistry.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.ServiceLoader;
2929
import java.util.Set;
3030
import java.util.function.Function;
31+
import java.util.function.Predicate;
3132
import java.util.stream.Stream;
3233

3334
import org.apiguardian.api.API;
@@ -37,6 +38,7 @@
3738
import org.junit.platform.commons.logging.LoggerFactory;
3839
import org.junit.platform.commons.support.ReflectionSupport;
3940
import org.junit.platform.commons.util.ClassLoaderUtils;
41+
import org.junit.platform.commons.util.ClassNamePatternFilterUtils;
4042
import org.junit.platform.commons.util.Preconditions;
4143

4244
/**
@@ -83,7 +85,7 @@ public static MutableExtensionRegistry createRegistryWithDefaultExtensions(Jupit
8385
extensionRegistry.registerDefaultExtension(new TempDirectory(configuration));
8486

8587
if (configuration.isExtensionAutoDetectionEnabled()) {
86-
registerAutoDetectedExtensions(extensionRegistry);
88+
registerAutoDetectedExtensions(extensionRegistry, configuration);
8789
}
8890

8991
if (configuration.isThreadDumpOnTimeoutEnabled()) {
@@ -93,9 +95,23 @@ public static MutableExtensionRegistry createRegistryWithDefaultExtensions(Jupit
9395
return extensionRegistry;
9496
}
9597

96-
private static void registerAutoDetectedExtensions(MutableExtensionRegistry extensionRegistry) {
98+
private static void registerAutoDetectedExtensions(MutableExtensionRegistry extensionRegistry,
99+
JupiterConfiguration configuration) {
100+
Predicate<String> filter = createExtensionFilterByPatterns(
101+
configuration.getExtensionAutodetectionIncludePattern().orElse("*"),
102+
configuration.getExtensionAutodetectionExcludePattern().orElse(""));
103+
97104
ServiceLoader.load(Extension.class, ClassLoaderUtils.getDefaultClassLoader())//
98-
.forEach(extensionRegistry::registerAutoDetectedExtension);
105+
.forEach(extension -> {
106+
if (filter.test(extension.getClass().getName())) {
107+
extensionRegistry.registerAutoDetectedExtension(extension);
108+
}
109+
});
110+
}
111+
112+
private static Predicate<String> createExtensionFilterByPatterns(String include, String exclude) {
113+
return ClassNamePatternFilterUtils.includeMatchingClassNames(include).and(
114+
ClassNamePatternFilterUtils.excludeMatchingClassNames(exclude));
99115
}
100116

101117
/**

0 commit comments

Comments
 (0)