diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/config/SnippetConfigurer.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/config/SnippetConfigurer.java index cb72f152..d6475aad 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/config/SnippetConfigurer.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/config/SnippetConfigurer.java @@ -16,6 +16,7 @@ package org.springframework.restdocs.config; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -38,9 +39,9 @@ import org.springframework.restdocs.templates.TemplateFormats; public abstract class SnippetConfigurer extends AbstractNestedConfigurer { - private List defaultSnippets = Arrays.asList(CliDocumentation.curlRequest(), - CliDocumentation.httpieRequest(), HttpDocumentation.httpRequest(), - HttpDocumentation.httpResponse()); + private List defaultSnippets = new ArrayList<>(Arrays.asList( + CliDocumentation.curlRequest(), CliDocumentation.httpieRequest(), + HttpDocumentation.httpRequest(), HttpDocumentation.httpResponse())); /** * The default encoding for documentation snippets. @@ -97,10 +98,24 @@ public abstract class SnippetConfigurer * * @param defaultSnippets the default snippets * @return {@code this} + * @see #withAdditionalDefaults(Snippet...) */ @SuppressWarnings("unchecked") public TYPE withDefaults(Snippet... defaultSnippets) { - this.defaultSnippets = Arrays.asList(defaultSnippets); + this.defaultSnippets = new ArrayList<>(Arrays.asList(defaultSnippets)); + return (TYPE) this; + } + + /** + * Configures additional documentation snippets that will be produced by default. + * + * @param additionalDefaultSnippets the additional default snippets + * @return {@code this} + * @see #withDefaults(Snippet...) + */ + @SuppressWarnings("unchecked") + public TYPE withAdditionalDefaults(Snippet... additionalDefaultSnippets) { + this.defaultSnippets.addAll(Arrays.asList(additionalDefaultSnippets)); return (TYPE) this; } diff --git a/spring-restdocs-core/src/test/java/org/springframework/restdocs/config/RestDocumentationConfigurerTests.java b/spring-restdocs-core/src/test/java/org/springframework/restdocs/config/RestDocumentationConfigurerTests.java index a629283f..0872c20d 100644 --- a/spring-restdocs-core/src/test/java/org/springframework/restdocs/config/RestDocumentationConfigurerTests.java +++ b/spring-restdocs-core/src/test/java/org/springframework/restdocs/config/RestDocumentationConfigurerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2014-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -119,6 +119,26 @@ public class RestDocumentationConfigurerTests { assertThat(defaultSnippets, contains(instanceOf(CurlRequestSnippet.class))); } + @SuppressWarnings("unchecked") + @Test + public void additionalDefaultSnippets() { + Map configuration = new HashMap<>(); + Snippet snippet = mock(Snippet.class); + this.configurer.snippets().withAdditionalDefaults(snippet).apply(configuration, + createContext()); + assertThat(configuration, + hasEntry( + equalTo(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_SNIPPETS), + instanceOf(List.class))); + List defaultSnippets = (List) configuration + .get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_SNIPPETS); + assertThat(defaultSnippets, + contains(instanceOf(CurlRequestSnippet.class), + instanceOf(HttpieRequestSnippet.class), + instanceOf(HttpRequestSnippet.class), + instanceOf(HttpResponseSnippet.class), equalTo(snippet))); + } + @Test public void customSnippetEncoding() { Map configuration = new HashMap<>();