Back port 246c4a2 to 3.3.x

The changes do not apply cleanly when cherry-picked so they
have been redone manually.

Closes gh-44941
This commit is contained in:
Andy Wilkinson
2025-03-28 16:48:50 +00:00
parent bed6ad3c43
commit 6ad48639c2
6 changed files with 42 additions and 13 deletions

View File

@@ -87,6 +87,7 @@ final class ArchitectureRules {
rules.add(noClassesShouldCallStringToUpperCaseWithoutLocale());
rules.add(noClassesShouldCallStringToLowerCaseWithoutLocale());
rules.add(conditionalOnMissingBeanShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodReturnType());
rules.add(enumSourceShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodParameterType());
return List.copyOf(rules);
}
@@ -201,6 +202,34 @@ final class ArchitectureRules {
});
}
private static ArchRule enumSourceShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodParameterType() {
return ArchRuleDefinition.methods()
.that()
.areAnnotatedWith("org.junit.jupiter.params.provider.EnumSource")
.should(notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType())
.allowEmptyShould(true);
}
private static ArchCondition<? super JavaMethod> notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType() {
return check("not specify only a type that is the same as the method's parameter type",
ArchitectureRules::notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType);
}
private static void notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType(JavaMethod item,
ConditionEvents events) {
JavaAnnotation<JavaMethod> enumSourceAnnotation = item
.getAnnotationOfType("org.junit.jupiter.params.provider.EnumSource");
Map<String, Object> properties = enumSourceAnnotation.getProperties();
if (properties.size() == 1 && item.getParameterTypes().size() == 1) {
enumSourceAnnotation.get("value").ifPresent((value) -> {
if (value.equals(item.getParameterTypes().get(0))) {
addViolation(events, item, enumSourceAnnotation.getDescription()
+ " should not specify only a value that is the same as the method's parameter type");
}
});
}
}
private static boolean containsOnlySingleType(JavaType[] types, JavaType type) {
return types.length == 1 && type.equals(types[0]);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2024 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@ class BaggagePropagationIntegrationTests {
}
@ParameterizedTest
@EnumSource(AutoConfig.class)
@EnumSource
void shouldSetEntriesToMdcFromSpanWithBaggage(AutoConfig autoConfig) {
autoConfig.get().run((context) -> {
Tracer tracer = tracer(context);
@@ -83,7 +83,7 @@ class BaggagePropagationIntegrationTests {
}
@ParameterizedTest
@EnumSource(AutoConfig.class)
@EnumSource
void shouldRemoveEntriesFromMdcForNullSpan(AutoConfig autoConfig) {
autoConfig.get().run((context) -> {
Tracer tracer = tracer(context);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -80,7 +80,7 @@ class WavefrontPropertiesTests {
}
@ParameterizedTest
@EnumSource(TokenType.class)
@EnumSource
void wavefrontApiTokenMapping(TokenType from) {
WavefrontProperties properties = new WavefrontProperties();
properties.setApiTokenType(from);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2025 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
class AcknowledgeModeTests {
@ParameterizedTest
@EnumSource(Mapping.class)
@EnumSource
void stringIsMappedToInt(Mapping mapping) {
assertThat(AcknowledgeMode.of(mapping.actual)).extracting(AcknowledgeMode::getMode).isEqualTo(mapping.expected);
}

View File

@@ -159,7 +159,7 @@ class MustacheAutoConfigurationTests {
}
@ParameterizedTest
@EnumSource(ViewResolverKind.class)
@EnumSource
void charsetCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
assertViewResolverProperty(kind, "spring.mustache.charset=UTF-16", "charset", "UTF-16");
if (kind == ViewResolverKind.SERVLET) {
@@ -187,21 +187,21 @@ class MustacheAutoConfigurationTests {
}
@ParameterizedTest
@EnumSource(ViewResolverKind.class)
@EnumSource
void prefixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
assertViewResolverProperty(kind, "spring.mustache.prefix=classpath:/mustache-templates/", "prefix",
"classpath:/mustache-templates/");
}
@ParameterizedTest
@EnumSource(ViewResolverKind.class)
@EnumSource
void requestContextAttributeCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
assertViewResolverProperty(kind, "spring.mustache.request-context-attribute=test", "requestContextAttribute",
"test");
}
@ParameterizedTest
@EnumSource(ViewResolverKind.class)
@EnumSource
void suffixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
assertViewResolverProperty(kind, "spring.mustache.suffix=.tache", "suffix", ".tache");
}

View File

@@ -885,7 +885,7 @@ public abstract class AbstractServletWebServerFactoryTests {
}
@ParameterizedTest
@EnumSource(SameSite.class)
@EnumSource
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookies(SameSite sameSite) throws Exception {
AbstractServletWebServerFactory factory = getFactory();
factory.getSession().getCookie().setSameSite(sameSite);
@@ -900,7 +900,7 @@ public abstract class AbstractServletWebServerFactoryTests {
}
@ParameterizedTest
@EnumSource(SameSite.class)
@EnumSource
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookiesWhenUsingCustomName(SameSite sameSite)
throws Exception {
AbstractServletWebServerFactory factory = getFactory();