From 37e024c6ebfdc57874e5024b3e9efa69de05fa44 Mon Sep 17 00:00:00 2001 From: Chris Beams Date: Sun, 20 May 2012 19:44:06 +0300 Subject: [PATCH] Test meta-@Async executor qualification Prove that Async#value is respected even when using @Async as a meta annotation. Issue: SPR-6847 --- ...otationAsyncExecutionInterceptorTests.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/spring-context/src/test/java/org/springframework/scheduling/annotation/AnnotationAsyncExecutionInterceptorTests.java b/spring-context/src/test/java/org/springframework/scheduling/annotation/AnnotationAsyncExecutionInterceptorTests.java index b0ddea9e169..b698b4fbe11 100644 --- a/spring-context/src/test/java/org/springframework/scheduling/annotation/AnnotationAsyncExecutionInterceptorTests.java +++ b/spring-context/src/test/java/org/springframework/scheduling/annotation/AnnotationAsyncExecutionInterceptorTests.java @@ -16,6 +16,9 @@ package org.springframework.scheduling.annotation; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + import org.junit.Test; import static org.hamcrest.CoreMatchers.*; @@ -33,21 +36,29 @@ public class AnnotationAsyncExecutionInterceptorTests { @SuppressWarnings("unused") public void testGetExecutorQualifier() throws SecurityException, NoSuchMethodException { AnnotationAsyncExecutionInterceptor i = new AnnotationAsyncExecutionInterceptor(null); - { + { // method level class C { @Async("qMethod") void m() { } } assertThat(i.getExecutorQualifier(C.class.getDeclaredMethod("m")), is("qMethod")); } - { + { // class level @Async("qClass") class C { void m() { } } assertThat(i.getExecutorQualifier(C.class.getDeclaredMethod("m")), is("qClass")); } - { + { // method and class level -> method value overrides @Async("qClass") class C { @Async("qMethod") void m() { } } assertThat(i.getExecutorQualifier(C.class.getDeclaredMethod("m")), is("qMethod")); } - { + { // method and class level -> method value, even if empty, overrides @Async("qClass") class C { @Async void m() { } } assertThat(i.getExecutorQualifier(C.class.getDeclaredMethod("m")), is("")); } + { // meta annotation with qualifier + @MyAsync class C { void m() { } } + assertThat(i.getExecutorQualifier(C.class.getDeclaredMethod("m")), is("qMeta")); + } } + + @Async("qMeta") + @Retention(RetentionPolicy.RUNTIME) + @interface MyAsync { } }