Use @AliasFor in @AutoConfigureRestDocs

Replace custom alias logic in @AutoConfigureRestDocs with @AliasFor.

Closes gh-6403
This commit is contained in:
Phillip Webb 2016-07-15 16:24:58 -07:00
parent c889c09066
commit c265de2535
3 changed files with 11 additions and 20 deletions

View File

@ -25,6 +25,7 @@ import java.lang.annotation.Target;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.autoconfigure.properties.PropertyMapping;
import org.springframework.context.annotation.Import;
import org.springframework.core.annotation.AliasFor;
/**
* Annotation that can be applied to a test class to enable and configure
@ -46,17 +47,19 @@ import org.springframework.context.annotation.Import;
public @interface AutoConfigureRestDocs {
/**
* The output directory to which generated snippets will be written. A synonym for
* The output directory to which generated snippets will be written. A alias for
* {@link #outputDir}.
* @return the output directory
*/
@AliasFor("outputDir")
String value() default "";
/**
* The output directory to which generated snippets will be written. A synonym for
* The output directory to which generated snippets will be written. A alias for
* {@link #value}.
* @return the output directory
*/
@AliasFor("value")
String outputDir() default "";
/**

View File

@ -24,38 +24,26 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.restdocs.ManualRestDocumentation;
import org.springframework.util.StringUtils;
/**
* {@link ImportBeanDefinitionRegistrar} used by {@link AutoConfigureRestDocs}.
*
* @author Andy Wilkinson
* @see AutoConfigureRestDocs
*/
class RestDocumentationContextProviderRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry) {
Map<String, Object> annotationAttributes = importingClassMetadata
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
String outputDir = (String) annotationAttributes.get("outputDir");
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder
.genericBeanDefinition(ManualRestDocumentation.class)
.addConstructorArgValue(determineOutputDir(importingClassMetadata))
.getBeanDefinition();
.addConstructorArgValue(outputDir).getBeanDefinition();
registry.registerBeanDefinition(ManualRestDocumentation.class.getName(),
beanDefinition);
}
private String determineOutputDir(AnnotationMetadata annotationMetadata) {
Map<String, Object> annotationAttributes = annotationMetadata
.getAnnotationAttributes(AutoConfigureRestDocs.class.getName());
String outputDir = (String) annotationAttributes.get("outputDir");
if (!StringUtils.hasText(outputDir)) {
outputDir = (String) annotationAttributes.get("value");
if (!StringUtils.hasText(outputDir)) {
throw new IllegalStateException(
"Either value or outputDir must be specified on @AutoConfigureRestDocs");
}
}
return outputDir;
}
}

View File

@ -47,7 +47,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
*/
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = RestDocsTestController.class, secure = false)
@AutoConfigureRestDocs(outputDir = "target/generated-snippets")
@AutoConfigureRestDocs("target/generated-snippets")
public class RestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
@Before