Merge branch '1.4.x' into 1.5.x

pull/7902/head
Andy Wilkinson 8 years ago
commit 1d476b375f

@ -123,21 +123,11 @@
<artifactId>spring-boot-junit-runners</artifactId> <artifactId>spring-boot-junit-runners</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-runtime</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.apache.tomcat.embed</groupId> <groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId> <artifactId>tomcat-embed-core</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.codehaus.groovy</groupId> <groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId> <artifactId>groovy</artifactId>
@ -149,6 +139,20 @@
<optional>true</optional> <optional>true</optional>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-runtime</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>

@ -214,6 +214,16 @@ class ImportsContextCustomizer implements ContextCustomizer {
*/ */
static class ContextCustomizerKey { static class ContextCustomizerKey {
private static final Set<AnnotationFilter> ANNOTATION_FILTERS;
static {
Set<AnnotationFilter> filters = new HashSet<AnnotationFilter>();
filters.add(new JavaLangAnnotationFilter());
filters.add(new KotlinAnnotationFilter());
filters.add(new SpockAnnotationFilter());
ANNOTATION_FILTERS = Collections.unmodifiableSet(filters);
}
private final Set<Annotation> annotations; private final Set<Annotation> annotations;
ContextCustomizerKey(Class<?> testClass) { ContextCustomizerKey(Class<?> testClass) {
@ -239,8 +249,7 @@ class ImportsContextCustomizer implements ContextCustomizer {
private void collectElementAnnotations(AnnotatedElement element, private void collectElementAnnotations(AnnotatedElement element,
Set<Annotation> annotations, Set<Class<?>> seen) { Set<Annotation> annotations, Set<Class<?>> seen) {
for (Annotation annotation : element.getDeclaredAnnotations()) { for (Annotation annotation : element.getDeclaredAnnotations()) {
if (!AnnotationUtils.isInJavaLangAnnotationPackage(annotation) if (!isIgnoredAnnotation(annotation)) {
&& !isIgnoredKotlinAnnotation(annotation)) {
annotations.add(annotation); annotations.add(annotation);
collectClassAnnotations(annotation.annotationType(), annotations, collectClassAnnotations(annotation.annotationType(), annotations,
seen); seen);
@ -248,13 +257,13 @@ class ImportsContextCustomizer implements ContextCustomizer {
} }
} }
private boolean isIgnoredKotlinAnnotation(Annotation annotation) { private boolean isIgnoredAnnotation(Annotation annotation) {
return "kotlin.Metadata".equals(annotation.annotationType().getName()) for (AnnotationFilter annotationFilter : ANNOTATION_FILTERS) {
|| isInKotlinAnnotationPackage(annotation); if (annotationFilter.isIgnored(annotation)) {
} return true;
}
private boolean isInKotlinAnnotationPackage(Annotation annotation) { }
return annotation.annotationType().getName().startsWith("kotlin.annotation."); return false;
} }
@Override @Override
@ -268,6 +277,46 @@ class ImportsContextCustomizer implements ContextCustomizer {
&& this.annotations.equals(((ContextCustomizerKey) obj).annotations)); && this.annotations.equals(((ContextCustomizerKey) obj).annotations));
} }
private interface AnnotationFilter {
boolean isIgnored(Annotation annotation);
}
private static final class JavaLangAnnotationFilter implements AnnotationFilter {
@Override
public boolean isIgnored(Annotation annotation) {
return AnnotationUtils.isInJavaLangAnnotationPackage(annotation);
}
}
private static final class KotlinAnnotationFilter implements AnnotationFilter {
@Override
public boolean isIgnored(Annotation annotation) {
return "kotlin.Metadata".equals(annotation.annotationType().getName())
|| isInKotlinAnnotationPackage(annotation);
}
private boolean isInKotlinAnnotationPackage(Annotation annotation) {
return annotation.annotationType().getName()
.startsWith("kotlin.annotation.");
}
}
private static final class SpockAnnotationFilter implements AnnotationFilter {
@Override
public boolean isIgnored(Annotation annotation) {
return annotation.annotationType().getName()
.startsWith("org.spockframework.");
}
}
} }
} }

@ -18,6 +18,7 @@ package org.springframework.boot.test.context;
import kotlin.Metadata; import kotlin.Metadata;
import org.junit.Test; import org.junit.Test;
import org.spockframework.runtime.model.SpecMetadata;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -35,6 +36,13 @@ public class ImportsContextCustomizerTests {
SecondKotlinAnnotatedTestClass.class)); SecondKotlinAnnotatedTestClass.class));
} }
@Test
public void customizersForTestClassesWithDifferentSpockMetadataAreEqual() {
assertThat(new ImportsContextCustomizer(FirstSpockAnnotatedTestClass.class))
.isEqualTo(new ImportsContextCustomizer(
SecondSpockAnnotatedTestClass.class));
}
@Metadata(d2 = "foo") @Metadata(d2 = "foo")
static class FirstKotlinAnnotatedTestClass { static class FirstKotlinAnnotatedTestClass {
@ -45,4 +53,14 @@ public class ImportsContextCustomizerTests {
} }
@SpecMetadata(filename = "foo", line = 10)
static class FirstSpockAnnotatedTestClass {
}
@SpecMetadata(filename = "bar", line = 10)
static class SecondSpockAnnotatedTestClass {
}
} }

Loading…
Cancel
Save