mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
Polish "Improve testing of architecture checks"
See gh-48139
This commit is contained in:
+13
-15
@@ -59,8 +59,6 @@ import org.gradle.api.tasks.SourceSet;
|
||||
import org.gradle.api.tasks.TaskAction;
|
||||
import org.gradle.api.tasks.VerificationException;
|
||||
|
||||
import org.springframework.boot.build.architecture.ArchitectureCheckAnnotations.Annotation;
|
||||
|
||||
/**
|
||||
* {@link Task} that checks for architecture problems.
|
||||
*
|
||||
@@ -77,22 +75,22 @@ public abstract class ArchitectureCheck extends DefaultTask {
|
||||
|
||||
public ArchitectureCheck() {
|
||||
getOutputDirectory().convention(getProject().getLayout().getBuildDirectory().dir(getName()));
|
||||
getAnnotationClasses().convention(ArchitectureCheckAnnotations.asMap());
|
||||
getAnnotationClasses().convention(ArchitectureCheckAnnotation.asMap());
|
||||
getRules().addAll(getProhibitObjectsRequireNonNull().convention(true)
|
||||
.map(whenTrue(ArchitectureRules::noClassesShouldCallObjectsRequireNonNull)));
|
||||
getRules().addAll(ArchitectureRules.standard());
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.beanMethods(
|
||||
ArchitectureCheckAnnotations.classFor(getAnnotationClasses().get(), Annotation.CONDITIONAL_ON_CLASS))));
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.conditionalOnMissingBean(ArchitectureCheckAnnotations
|
||||
.classFor(getAnnotationClasses().get(), Annotation.CONDITIONAL_ON_MISSING_BEAN))));
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.configurationProperties(ArchitectureCheckAnnotations
|
||||
.classFor(getAnnotationClasses().get(), Annotation.CONFIGURATION_PROPERTIES))));
|
||||
getRules()
|
||||
.addAll(whenMainSources(() -> ArchitectureRules.configurationPropertiesBinding(ArchitectureCheckAnnotations
|
||||
.classFor(getAnnotationClasses().get(), Annotation.CONFIGURATION_PROPERTIES_BINDING))));
|
||||
getRules().addAll(
|
||||
whenMainSources(() -> ArchitectureRules.configurationPropertiesDeprecation(ArchitectureCheckAnnotations
|
||||
.classFor(getAnnotationClasses().get(), Annotation.DEPRECATED_CONFIGURATION_PROPERTY))));
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.beanMethods(ArchitectureCheckAnnotation
|
||||
.classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONDITIONAL_ON_CLASS))));
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.conditionalOnMissingBean(ArchitectureCheckAnnotation
|
||||
.classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONDITIONAL_ON_MISSING_BEAN))));
|
||||
getRules().addAll(whenMainSources(() -> ArchitectureRules.configurationProperties(ArchitectureCheckAnnotation
|
||||
.classFor(getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES))));
|
||||
getRules().addAll(whenMainSources(
|
||||
() -> ArchitectureRules.configurationPropertiesBinding(ArchitectureCheckAnnotation.classFor(
|
||||
getAnnotationClasses().get(), ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES_BINDING))));
|
||||
getRules().addAll(whenMainSources(
|
||||
() -> ArchitectureRules.configurationPropertiesDeprecation(ArchitectureCheckAnnotation.classFor(
|
||||
getAnnotationClasses().get(), ArchitectureCheckAnnotation.DEPRECATED_CONFIGURATION_PROPERTY))));
|
||||
getRuleDescriptions().set(getRules().map(this::asDescriptions));
|
||||
}
|
||||
|
||||
|
||||
+29
-15
@@ -23,35 +23,49 @@ import java.util.Map;
|
||||
* tests.
|
||||
*
|
||||
* @author Scott Frederick
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public final class ArchitectureCheckAnnotations {
|
||||
public enum ArchitectureCheckAnnotation {
|
||||
|
||||
enum Annotation {
|
||||
/**
|
||||
* Condition on class check.
|
||||
*/
|
||||
CONDITIONAL_ON_CLASS,
|
||||
|
||||
CONDITIONAL_ON_CLASS, CONDITIONAL_ON_MISSING_BEAN, CONFIGURATION_PROPERTIES, DEPRECATED_CONFIGURATION_PROPERTY,
|
||||
CONFIGURATION_PROPERTIES_BINDING
|
||||
/**
|
||||
* Condition on missing bean check.
|
||||
*/
|
||||
CONDITIONAL_ON_MISSING_BEAN,
|
||||
|
||||
}
|
||||
/**
|
||||
* Configuration properties bean.
|
||||
*/
|
||||
CONFIGURATION_PROPERTIES,
|
||||
|
||||
private ArchitectureCheckAnnotations() {
|
||||
}
|
||||
/**
|
||||
* Deprecated configuration property.
|
||||
*/
|
||||
DEPRECATED_CONFIGURATION_PROPERTY,
|
||||
|
||||
private static final Map<String, String> annotationNameToClassName = Map.of(Annotation.CONDITIONAL_ON_CLASS.name(),
|
||||
"org.springframework.boot.autoconfigure.condition.ConditionalOnClass",
|
||||
Annotation.CONDITIONAL_ON_MISSING_BEAN.name(),
|
||||
/**
|
||||
* Custom implementation to bind configuration properties.
|
||||
*/
|
||||
CONFIGURATION_PROPERTIES_BINDING;
|
||||
|
||||
private static final Map<String, String> annotationNameToClassName = Map.of(CONDITIONAL_ON_CLASS.name(),
|
||||
"org.springframework.boot.autoconfigure.condition.ConditionalOnClass", CONDITIONAL_ON_MISSING_BEAN.name(),
|
||||
"org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean",
|
||||
Annotation.CONFIGURATION_PROPERTIES.name(),
|
||||
"org.springframework.boot.context.properties.ConfigurationProperties",
|
||||
Annotation.DEPRECATED_CONFIGURATION_PROPERTY.name(),
|
||||
CONFIGURATION_PROPERTIES.name(), "org.springframework.boot.context.properties.ConfigurationProperties",
|
||||
DEPRECATED_CONFIGURATION_PROPERTY.name(),
|
||||
"org.springframework.boot.context.properties.DeprecatedConfigurationProperty",
|
||||
Annotation.CONFIGURATION_PROPERTIES_BINDING.name(),
|
||||
CONFIGURATION_PROPERTIES_BINDING.name(),
|
||||
"org.springframework.boot.context.properties.ConfigurationPropertiesBinding");
|
||||
|
||||
static Map<String, String> asMap() {
|
||||
return annotationNameToClassName;
|
||||
}
|
||||
|
||||
static String classFor(Map<String, String> annotationProperty, Annotation annotation) {
|
||||
static String classFor(Map<String, String> annotationProperty, ArchitectureCheckAnnotation annotation) {
|
||||
String name = annotation.name();
|
||||
return annotationProperty.getOrDefault(name, asMap().get(name));
|
||||
}
|
||||
+8
-6
@@ -43,7 +43,6 @@ import org.junit.jupiter.api.io.TempDir;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.EnumSource;
|
||||
|
||||
import org.springframework.boot.build.architecture.ArchitectureCheckAnnotations.Annotation;
|
||||
import org.springframework.boot.build.architecture.annotations.TestConditionalOnClass;
|
||||
import org.springframework.boot.build.architecture.annotations.TestConditionalOnMissingBean;
|
||||
import org.springframework.boot.build.architecture.annotations.TestConfigurationProperties;
|
||||
@@ -530,28 +529,31 @@ class ArchitectureCheckTests {
|
||||
}
|
||||
|
||||
GradleBuild withConditionalOnClassAnnotation() {
|
||||
configureTasks(Annotation.CONDITIONAL_ON_CLASS.name(), TestConditionalOnClass.class.getName());
|
||||
configureTasks(ArchitectureCheckAnnotation.CONDITIONAL_ON_CLASS.name(),
|
||||
TestConditionalOnClass.class.getName());
|
||||
return this;
|
||||
}
|
||||
|
||||
GradleBuild withConditionalOnMissingBeanAnnotation() {
|
||||
configureTasks(Annotation.CONDITIONAL_ON_MISSING_BEAN.name(), TestConditionalOnMissingBean.class.getName());
|
||||
configureTasks(ArchitectureCheckAnnotation.CONDITIONAL_ON_MISSING_BEAN.name(),
|
||||
TestConditionalOnMissingBean.class.getName());
|
||||
return this;
|
||||
}
|
||||
|
||||
GradleBuild withConfigurationPropertiesAnnotation() {
|
||||
configureTasks(Annotation.CONFIGURATION_PROPERTIES.name(), TestConfigurationProperties.class.getName());
|
||||
configureTasks(ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES.name(),
|
||||
TestConfigurationProperties.class.getName());
|
||||
return this;
|
||||
}
|
||||
|
||||
GradleBuild withConfigurationPropertiesBindingAnnotation() {
|
||||
configureTasks(Annotation.CONFIGURATION_PROPERTIES_BINDING.name(),
|
||||
configureTasks(ArchitectureCheckAnnotation.CONFIGURATION_PROPERTIES_BINDING.name(),
|
||||
TestConfigurationPropertiesBinding.class.getName());
|
||||
return this;
|
||||
}
|
||||
|
||||
GradleBuild withDeprecatedConfigurationPropertyAnnotation() {
|
||||
configureTasks(Annotation.DEPRECATED_CONFIGURATION_PROPERTY.name(),
|
||||
configureTasks(ArchitectureCheckAnnotation.DEPRECATED_CONFIGURATION_PROPERTY.name(),
|
||||
TestDeprecatedConfigurationProperty.class.getName());
|
||||
return this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user