Skip to content

Apply suite configuration to tests selected by unique ID #3694

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ repository on GitHub.

* `ReflectionSupport.findFields(...)` now returns a distinct set of fields.

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

[[release-notes-5.11.0-M1-junit-platform-deprecations-and-breaking-changes]]
==== Deprecations and Breaking Changes

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,15 +127,83 @@ public SuiteLauncherDiscoveryRequestBuilder enableImplicitConfigurationParameter
return this;
}

/**
* Apply a suites annotation based configuration, selectors and filters to this builder.
*
* @param suiteClass the class to apply the annotations from;
* never {@code null}
* @return this builder for method chaining
* @since 1.11
* @see org.junit.platform.suite.api.Suite
* @deprecated use {@link #applyConfigurationParametersFromSuite} and/or {@link #applySelectorsAndFiltersFromSuite} instead.
*/
@Deprecated
public SuiteLauncherDiscoveryRequestBuilder suite(Class<?> suiteClass) {
Preconditions.notNull(suiteClass, "Suite class must not be null");
applyConfigurationParametersFromSuite(suiteClass);
applySelectorsAndFiltersFromSuite(suiteClass);
return this;
}

/**
* Apply a suites annotation based configuration to this builder.
* <p>
* This will apply the configuration from:
* <ul>
* <li>{@link ConfigurationParameter}</li>
* <li>{@link DisableParentConfigurationParameters}</li>
* </ul>
*
* @param suiteClass the class to apply the configuration annotations from; never {@code null}
* @return this builder for method chaining
* @since 1.11
* @see org.junit.platform.suite.api.Suite
*/
public SuiteLauncherDiscoveryRequestBuilder applyConfigurationParametersFromSuite(Class<?> suiteClass) {
Preconditions.notNull(suiteClass, "Suite class must not be null");

// Annotations in alphabetical order (except @SelectClasses)
// @formatter:off
findRepeatableAnnotations(suiteClass, ConfigurationParameter.class)
.forEach(configuration -> configurationParameter(configuration.key(), configuration.value()));
findAnnotation(suiteClass, DisableParentConfigurationParameters.class)
.ifPresent(__ -> enableParentConfigurationParameters = false);
// @formatter:on
return this;
}

/**
* Apply a suites annotation based discovery selectors and filters to this builder.
* <p>
* This will apply the configuration from:
* <ul>
* <li>{@link ExcludeClassNamePatterns}</li>
* <li>{@link ExcludeEngines}</li>
* <li>{@link ExcludePackages}</li>
* <li>{@link ExcludeTags}</li>
* <li>{@link IncludeClassNamePatterns}</li>
* <li>{@link IncludeEngines}</li>
* <li>{@link IncludePackages}</li>
* <li>{@link IncludeTags}</li>
* <li>{@link SelectClasses}</li>
* <li>{@link SelectClasspathResource}</li>
* <li>{@link SelectDirectories}</li>
* <li>{@link SelectFile}</li>
* <li>{@link SelectMethod}</li>
* <li>{@link SelectModules}</li>
* <li>{@link SelectUris}</li>
* <li>{@link SelectPackages}</li>
* </ul>
*
* @param suiteClass the class to apply the discovery selectors and filter annotations from; never {@code null}
* @return this builder for method chaining
* @since 1.11
* @see org.junit.platform.suite.api.Suite
*/
public SuiteLauncherDiscoveryRequestBuilder applySelectorsAndFiltersFromSuite(Class<?> suiteClass) {
Preconditions.notNull(suiteClass, "Suite class must not be null");

// Annotations in alphabetical order (except @SelectClasses)
// @formatter:off
findAnnotationValues(suiteClass, ExcludeClassNamePatterns.class, ExcludeClassNamePatterns::value)
.flatMap(SuiteLauncherDiscoveryRequestBuilder::trimmed)
.map(ClassNameFilter::excludeClassNamePatterns)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private static Boolean getFailIfNoTests(Class<?> suiteClass) {
SuiteTestDescriptor addDiscoveryRequestFrom(Class<?> suiteClass) {
Preconditions.condition(launcherDiscoveryResult == null,
"discovery request can not be modified after discovery");
discoveryRequestBuilder.suite(suiteClass);
discoveryRequestBuilder.applySelectorsAndFiltersFromSuite(suiteClass);
return this;
}

Expand All @@ -92,6 +92,7 @@ void discover() {
.filterStandardClassNamePatterns(true)
.enableImplicitConfigurationParameters(false)
.parentConfigurationParameters(configurationParameters)
.applyConfigurationParametersFromSuite(suiteClass)
.build();
// @formatter:on
this.launcher = SuiteLauncher.create();
Expand Down
Loading