Skip to content

Commit 567b0be

Browse files
mpkorstanjemarcphilipp
authored andcommitted
Apply suite configuration to tests selected by unique ID (#3694)
Tests in a suite selected by unique id did not receive their configuration because this was only applied to the discovery request builder when a suite class was selected. By splitting the processing of configuration annotations and select and filter annotations, the configuration can now always be applied prior to discovery. Fixes #3693. (cherry picked from commit 74bd85c)
1 parent 323c6f3 commit 567b0be

File tree

7 files changed

+194
-41
lines changed

7 files changed

+194
-41
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-5.10.3.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ on GitHub.
1515

1616
==== Bug Fixes
1717

18-
* ❓
18+
* The `junit-platform-suite-engine` now includes configuration provided by
19+
`@ConfigurationParameter` when selecting tests by `UniqueId`.
1920

2021
==== Deprecations and Breaking Changes
2122

junit-platform-suite-commons/src/main/java/org/junit/platform/suite/commons/SuiteLauncherDiscoveryRequestBuilder.java

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,23 +254,82 @@ public SuiteLauncherDiscoveryRequestBuilder enableImplicitConfigurationParameter
254254
}
255255

256256
/**
257-
* Configure the suite class for the suite launcher discovery request.
257+
* Apply a suites annotation based configuration, selectors and filters to this builder.
258258
*
259-
* <p>This method processes annotations on the suite class to customize
260-
* the suite discovery and execution.
261-
*
262-
* @param suiteClass the suite class to configure
259+
* @param suiteClass the class to apply the annotations from;
260+
* never {@code null}
263261
* @return this builder for method chaining
262+
* @since 1.11
263+
* @see org.junit.platform.suite.api.Suite
264+
* @deprecated use {@link #applyConfigurationParametersFromSuite} and/or {@link #applySelectorsAndFiltersFromSuite} instead.
264265
*/
266+
@Deprecated
265267
public SuiteLauncherDiscoveryRequestBuilder suite(Class<?> suiteClass) {
266268
Preconditions.notNull(suiteClass, "Suite class must not be null");
269+
applyConfigurationParametersFromSuite(suiteClass);
270+
applySelectorsAndFiltersFromSuite(suiteClass);
271+
return this;
272+
}
273+
274+
/**
275+
* Apply a suites annotation based configuration to this builder.
276+
* <p>
277+
* This will apply the configuration from:
278+
* <ul>
279+
* <li>{@link ConfigurationParameter}</li>
280+
* <li>{@link DisableParentConfigurationParameters}</li>
281+
* </ul>
282+
*
283+
* @param suiteClass the class to apply the configuration annotations from; never {@code null}
284+
* @return this builder for method chaining
285+
* @since 1.11
286+
* @see org.junit.platform.suite.api.Suite
287+
*/
288+
public SuiteLauncherDiscoveryRequestBuilder applyConfigurationParametersFromSuite(Class<?> suiteClass) {
289+
Preconditions.notNull(suiteClass, "Suite class must not be null");
267290

268-
// Annotations in alphabetical order (except @SelectClasses)
269291
// @formatter:off
270292
findRepeatableAnnotations(suiteClass, ConfigurationParameter.class)
271293
.forEach(configuration -> configurationParameter(configuration.key(), configuration.value()));
272294
findAnnotation(suiteClass, DisableParentConfigurationParameters.class)
273295
.ifPresent(__ -> this.enableParentConfigurationParameters = false);
296+
// @formatter:on
297+
return this;
298+
}
299+
300+
/**
301+
* Apply a suites annotation based discovery selectors and filters to this builder.
302+
* <p>
303+
* This will apply the configuration from:
304+
* <ul>
305+
* <li>{@link ExcludeClassNamePatterns}</li>
306+
* <li>{@link ExcludeEngines}</li>
307+
* <li>{@link ExcludePackages}</li>
308+
* <li>{@link ExcludeTags}</li>
309+
* <li>{@link IncludeClassNamePatterns}</li>
310+
* <li>{@link IncludeEngines}</li>
311+
* <li>{@link IncludePackages}</li>
312+
* <li>{@link IncludeTags}</li>
313+
* <li>{@link SelectClasses}</li>
314+
* <li>{@link SelectClasspathResource}</li>
315+
* <li>{@link SelectDirectories}</li>
316+
* <li>{@link SelectFile}</li>
317+
* <li>{@link SelectMethod}</li>
318+
* <li>{@link SelectModules}</li>
319+
* <li>{@link SelectUris}</li>
320+
* <li>{@link SelectPackages}</li>
321+
* </ul>
322+
*
323+
* @param suiteClass the class to apply the discovery selectors and filter annotations from; never {@code null}
324+
* @return this builder for method chaining
325+
* @since 1.11
326+
* @see org.junit.platform.suite.api.Suite
327+
*/
328+
public SuiteLauncherDiscoveryRequestBuilder applySelectorsAndFiltersFromSuite(Class<?> suiteClass) {
329+
Preconditions.notNull(suiteClass, "Suite class must not be null");
330+
331+
// Annotations in alphabetical order (except @SelectClasses)
332+
// @formatter:off
274333
findAnnotationValues(suiteClass, ExcludeClassNamePatterns.class, ExcludeClassNamePatterns::value)
275334
.flatMap(SuiteLauncherDiscoveryRequestBuilder::trimmed)
276335
.map(ClassNameFilter::excludeClassNamePatterns)

junit-platform-suite-engine/src/main/java/org/junit/platform/suite/engine/SuiteTestDescriptor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ private static Boolean getFailIfNoTests(Class<?> suiteClass) {
7171
SuiteTestDescriptor addDiscoveryRequestFrom(Class<?> suiteClass) {
7272
Preconditions.condition(launcherDiscoveryResult == null,
7373
"discovery request can not be modified after discovery");
74-
discoveryRequestBuilder.suite(suiteClass);
74+
discoveryRequestBuilder.applySelectorsAndFiltersFromSuite(suiteClass);
7575
return this;
7676
}
7777

@@ -92,6 +92,7 @@ void discover() {
9292
.filterStandardClassNamePatterns(true)
9393
.enableImplicitConfigurationParameters(false)
9494
.parentConfigurationParameters(configurationParameters)
95+
.applyConfigurationParametersFromSuite(suiteClass)
9596
.build();
9697
// @formatter:on
9798
this.launcher = SuiteLauncher.create();

0 commit comments

Comments
 (0)