Merge pull request #43214 from quaff
* pr/43214: Prohibit unnecessary value on `@EnumSource` Closes gh-43214
This commit is contained in:
commit
246c4a21d6
|
@ -94,7 +94,8 @@ public abstract class ArchitectureCheck extends DefaultTask {
|
||||||
noClassesShouldCallURLEncoderWithStringEncoding(), noClassesShouldCallURLDecoderWithStringEncoding(),
|
noClassesShouldCallURLEncoderWithStringEncoding(), noClassesShouldCallURLDecoderWithStringEncoding(),
|
||||||
noClassesShouldLoadResourcesUsingResourceUtils(), noClassesShouldCallStringToUpperCaseWithoutLocale(),
|
noClassesShouldLoadResourcesUsingResourceUtils(), noClassesShouldCallStringToUpperCaseWithoutLocale(),
|
||||||
noClassesShouldCallStringToLowerCaseWithoutLocale(),
|
noClassesShouldCallStringToLowerCaseWithoutLocale(),
|
||||||
conditionalOnMissingBeanShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodReturnType());
|
conditionalOnMissingBeanShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodReturnType(),
|
||||||
|
enumSourceShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodParameterType());
|
||||||
getRules().addAll(getProhibitObjectsRequireNonNull()
|
getRules().addAll(getProhibitObjectsRequireNonNull()
|
||||||
.map((prohibit) -> prohibit ? noClassesShouldCallObjectsRequireNonNull() : Collections.emptyList()));
|
.map((prohibit) -> prohibit ? noClassesShouldCallObjectsRequireNonNull() : Collections.emptyList()));
|
||||||
getRuleDescriptions().set(getRules().map((rules) -> rules.stream().map(ArchRule::getDescription).toList()));
|
getRuleDescriptions().set(getRules().map((rules) -> rules.stream().map(ArchRule::getDescription).toList()));
|
||||||
|
@ -299,6 +300,35 @@ public abstract class ArchitectureCheck extends DefaultTask {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ArchRule enumSourceShouldNotSpecifyOnlyATypeThatIsTheSameAsMethodParameterType() {
|
||||||
|
return ArchRuleDefinition.methods()
|
||||||
|
.that()
|
||||||
|
.areAnnotatedWith("org.junit.jupiter.params.provider.EnumSource")
|
||||||
|
.should(notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType())
|
||||||
|
.allowEmptyShould(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArchCondition<? super JavaMethod> notSpecifyOnlyATypeThatIsTheSameAsTheMethodParameterType() {
|
||||||
|
return new ArchCondition<>("not specify only a type that is the same as the method's parameter type") {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void check(JavaMethod item, ConditionEvents events) {
|
||||||
|
JavaAnnotation<JavaMethod> conditional = item
|
||||||
|
.getAnnotationOfType("org.junit.jupiter.params.provider.EnumSource");
|
||||||
|
Map<String, Object> properties = conditional.getProperties();
|
||||||
|
if (properties.size() == 1 && item.getParameterTypes().size() == 1) {
|
||||||
|
conditional.get("value").ifPresent((value) -> {
|
||||||
|
if (value.equals(item.getParameterTypes().get(0))) {
|
||||||
|
events.add(SimpleConditionEvent.violated(item, conditional.getDescription()
|
||||||
|
+ " should not specify only a value that is the same as the method's parameter type"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public void setClasses(FileCollection classes) {
|
public void setClasses(FileCollection classes) {
|
||||||
this.classes = classes;
|
this.classes = classes;
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ class BaggagePropagationIntegrationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(AutoConfig.class)
|
@EnumSource
|
||||||
void shouldSetEntriesToMdcFromSpanWithBaggage(AutoConfig autoConfig) {
|
void shouldSetEntriesToMdcFromSpanWithBaggage(AutoConfig autoConfig) {
|
||||||
autoConfig.get().run((context) -> {
|
autoConfig.get().run((context) -> {
|
||||||
Tracer tracer = tracer(context);
|
Tracer tracer = tracer(context);
|
||||||
|
@ -87,7 +87,7 @@ class BaggagePropagationIntegrationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(AutoConfig.class)
|
@EnumSource
|
||||||
void shouldRemoveEntriesFromMdcForNullSpan(AutoConfig autoConfig) {
|
void shouldRemoveEntriesFromMdcForNullSpan(AutoConfig autoConfig) {
|
||||||
autoConfig.get().run((context) -> {
|
autoConfig.get().run((context) -> {
|
||||||
Tracer tracer = tracer(context);
|
Tracer tracer = tracer(context);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2023 the original author or authors.
|
* Copyright 2012-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -80,7 +80,7 @@ class WavefrontPropertiesTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(TokenType.class)
|
@EnumSource
|
||||||
void wavefrontApiTokenMapping(TokenType from) {
|
void wavefrontApiTokenMapping(TokenType from) {
|
||||||
WavefrontProperties properties = new WavefrontProperties();
|
WavefrontProperties properties = new WavefrontProperties();
|
||||||
properties.setApiTokenType(from);
|
properties.setApiTokenType(from);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2023 the original author or authors.
|
* Copyright 2012-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 {
|
class AcknowledgeModeTests {
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(Mapping.class)
|
@EnumSource
|
||||||
void stringIsMappedToInt(Mapping mapping) {
|
void stringIsMappedToInt(Mapping mapping) {
|
||||||
assertThat(AcknowledgeMode.of(mapping.actual)).extracting(AcknowledgeMode::getMode).isEqualTo(mapping.expected);
|
assertThat(AcknowledgeMode.of(mapping.actual)).extracting(AcknowledgeMode::getMode).isEqualTo(mapping.expected);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2012-2023 the original author or authors.
|
* Copyright 2012-2024 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -158,7 +158,7 @@ class MustacheAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(ViewResolverKind.class)
|
@EnumSource
|
||||||
void charsetCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
void charsetCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
||||||
assertViewResolverProperty(kind, "spring.mustache.charset=UTF-16", "charset", "UTF-16");
|
assertViewResolverProperty(kind, "spring.mustache.charset=UTF-16", "charset", "UTF-16");
|
||||||
}
|
}
|
||||||
|
@ -182,21 +182,21 @@ class MustacheAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(ViewResolverKind.class)
|
@EnumSource
|
||||||
void prefixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
void prefixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
||||||
assertViewResolverProperty(kind, "spring.mustache.prefix=classpath:/mustache-templates/", "prefix",
|
assertViewResolverProperty(kind, "spring.mustache.prefix=classpath:/mustache-templates/", "prefix",
|
||||||
"classpath:/mustache-templates/");
|
"classpath:/mustache-templates/");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(ViewResolverKind.class)
|
@EnumSource
|
||||||
void requestContextAttributeCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
void requestContextAttributeCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
||||||
assertViewResolverProperty(kind, "spring.mustache.request-context-attribute=test", "requestContextAttribute",
|
assertViewResolverProperty(kind, "spring.mustache.request-context-attribute=test", "requestContextAttribute",
|
||||||
"test");
|
"test");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(ViewResolverKind.class)
|
@EnumSource
|
||||||
void suffixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
void suffixCanBeCustomizedOnViewResolver(ViewResolverKind kind) {
|
||||||
assertViewResolverProperty(kind, "spring.mustache.suffix=.tache", "suffix", ".tache");
|
assertViewResolverProperty(kind, "spring.mustache.suffix=.tache", "suffix", ".tache");
|
||||||
}
|
}
|
||||||
|
|
|
@ -871,7 +871,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(SameSite.class)
|
@EnumSource
|
||||||
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookies(SameSite sameSite) throws Exception {
|
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookies(SameSite sameSite) throws Exception {
|
||||||
AbstractServletWebServerFactory factory = getFactory();
|
AbstractServletWebServerFactory factory = getFactory();
|
||||||
factory.getSession().getCookie().setSameSite(sameSite);
|
factory.getSession().getCookie().setSameSite(sameSite);
|
||||||
|
@ -886,7 +886,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@ParameterizedTest
|
@ParameterizedTest
|
||||||
@EnumSource(SameSite.class)
|
@EnumSource
|
||||||
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookiesWhenUsingCustomName(SameSite sameSite)
|
void sessionCookieSameSiteAttributeCanBeConfiguredAndOnlyAffectsSessionCookiesWhenUsingCustomName(SameSite sameSite)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
AbstractServletWebServerFactory factory = getFactory();
|
AbstractServletWebServerFactory factory = getFactory();
|
||||||
|
|
Loading…
Reference in New Issue