From 65e55ac15cf01a60bb07ef04bbab490d1f7a6b33 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Mon, 23 May 2016 16:10:47 +0100 Subject: [PATCH] Allow descriptors to be added using a List in addition to varags Closes gh-242 --- .../headers/RequestHeadersSnippet.java | 19 ++++++++--- .../headers/ResponseHeadersSnippet.java | 18 ++++++++-- .../restdocs/hypermedia/LinksSnippet.java | 19 ++++++++--- .../payload/RequestFieldsSnippet.java | 34 +++++++++++++++++-- .../payload/ResponseFieldsSnippet.java | 34 +++++++++++++++++-- .../request/PathParametersSnippet.java | 20 ++++++++--- .../request/RequestParametersSnippet.java | 17 ++++++++-- .../restdocs/request/RequestPartsSnippet.java | 20 ++++++++--- 8 files changed, 154 insertions(+), 27 deletions(-) diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/RequestHeadersSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/RequestHeadersSnippet.java index ecdc933a..71ec61ab 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/RequestHeadersSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/RequestHeadersSnippet.java @@ -70,10 +70,21 @@ public class RequestHeadersSnippet extends AbstractHeadersSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public RequestHeadersSnippet and(HeaderDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(this.getHeaderDescriptors()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + public final RequestHeadersSnippet and(HeaderDescriptor... additionalDescriptors) { + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code RequestHeadersSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final RequestHeadersSnippet and(List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + this.getHeaderDescriptors()); + combinedDescriptors.addAll(additionalDescriptors); return new RequestHeadersSnippet(combinedDescriptors, getAttributes()); } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/ResponseHeadersSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/ResponseHeadersSnippet.java index 1a417167..8b9ec45c 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/ResponseHeadersSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/headers/ResponseHeadersSnippet.java @@ -71,9 +71,21 @@ public class ResponseHeadersSnippet extends AbstractHeadersSnippet { * @return the new snippet */ public final ResponseHeadersSnippet and(HeaderDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(this.getHeaderDescriptors()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code ResponseHeadersSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final ResponseHeadersSnippet and( + List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + this.getHeaderDescriptors()); + combinedDescriptors.addAll(additionalDescriptors); return new ResponseHeadersSnippet(combinedDescriptors, getAttributes()); } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/LinksSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/LinksSnippet.java index 51b28f92..f0a4cb30 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/LinksSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/hypermedia/LinksSnippet.java @@ -249,10 +249,21 @@ public class LinksSnippet extends TemplatedSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public LinksSnippet and(LinkDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(this.descriptorsByRel.values()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + public final LinksSnippet and(LinkDescriptor... additionalDescriptors) { + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code RequestHeadersSnippet} configured with this snippet's link + * extractor and attributes, and its descriptors combined with the given + * {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final LinksSnippet and(List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + this.descriptorsByRel.values()); + combinedDescriptors.addAll(additionalDescriptors); return new LinksSnippet(this.linkExtractor, combinedDescriptors, getAttributes()); } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/RequestFieldsSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/RequestFieldsSnippet.java index cfb2ee26..3d03d71a 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/RequestFieldsSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/RequestFieldsSnippet.java @@ -107,7 +107,19 @@ public class RequestFieldsSnippet extends AbstractFieldsSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public RequestFieldsSnippet and(FieldDescriptor... additionalDescriptors) { + public final RequestFieldsSnippet and(FieldDescriptor... additionalDescriptors) { + return andWithPrefix("", additionalDescriptors); + } + + /** + * Returns a new {@code RequestFieldsSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final RequestFieldsSnippet and(List additionalDescriptors) { return andWithPrefix("", additionalDescriptors); } @@ -121,7 +133,7 @@ public class RequestFieldsSnippet extends AbstractFieldsSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public RequestFieldsSnippet andWithPrefix(String pathPrefix, + public final RequestFieldsSnippet andWithPrefix(String pathPrefix, FieldDescriptor... additionalDescriptors) { List combinedDescriptors = new ArrayList<>(); combinedDescriptors.addAll(getFieldDescriptors()); @@ -130,4 +142,22 @@ public class RequestFieldsSnippet extends AbstractFieldsSnippet { return new RequestFieldsSnippet(combinedDescriptors, this.getAttributes()); } + /** + * Returns a new {@code RequestFieldsSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. The given {@code pathPrefix} is applied to the path + * of each additional descriptor. + * + * @param pathPrefix the prefix to apply to the additional descriptors + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final RequestFieldsSnippet andWithPrefix(String pathPrefix, + List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + getFieldDescriptors()); + combinedDescriptors.addAll(applyPathPrefix(pathPrefix, additionalDescriptors)); + return new RequestFieldsSnippet(combinedDescriptors, this.getAttributes()); + } + } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/ResponseFieldsSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/ResponseFieldsSnippet.java index 06b5ac65..f3ce3539 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/ResponseFieldsSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/payload/ResponseFieldsSnippet.java @@ -108,7 +108,19 @@ public class ResponseFieldsSnippet extends AbstractFieldsSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public ResponseFieldsSnippet and(FieldDescriptor... additionalDescriptors) { + public final ResponseFieldsSnippet and(FieldDescriptor... additionalDescriptors) { + return andWithPrefix("", additionalDescriptors); + } + + /** + * Returns a new {@code ResponseFieldsSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final ResponseFieldsSnippet and(List additionalDescriptors) { return andWithPrefix("", additionalDescriptors); } @@ -122,7 +134,7 @@ public class ResponseFieldsSnippet extends AbstractFieldsSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public ResponseFieldsSnippet andWithPrefix(String pathPrefix, + public final ResponseFieldsSnippet andWithPrefix(String pathPrefix, FieldDescriptor... additionalDescriptors) { List combinedDescriptors = new ArrayList<>(); combinedDescriptors.addAll(getFieldDescriptors()); @@ -131,4 +143,22 @@ public class ResponseFieldsSnippet extends AbstractFieldsSnippet { return new ResponseFieldsSnippet(combinedDescriptors, this.getAttributes()); } + /** + * Returns a new {@code ResponseFieldsSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. The given {@code pathPrefix} is applied to the path + * of each additional descriptor. + * + * @param pathPrefix the prefix to apply to the additional descriptors + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final ResponseFieldsSnippet andWithPrefix(String pathPrefix, + List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + getFieldDescriptors()); + combinedDescriptors.addAll(applyPathPrefix(pathPrefix, additionalDescriptors)); + return new ResponseFieldsSnippet(combinedDescriptors, this.getAttributes()); + } + } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/PathParametersSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/PathParametersSnippet.java index 509a604b..afbd0b52 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/PathParametersSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/PathParametersSnippet.java @@ -165,10 +165,22 @@ public class PathParametersSnippet extends AbstractParametersSnippet { * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public PathParametersSnippet and(ParameterDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(getParameterDescriptors().values()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + public final PathParametersSnippet and(ParameterDescriptor... additionalDescriptors) { + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code PathParametersSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final PathParametersSnippet and( + List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + getParameterDescriptors().values()); + combinedDescriptors.addAll(additionalDescriptors); return new PathParametersSnippet(combinedDescriptors, this.getAttributes()); } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestParametersSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestParametersSnippet.java index 37a5696d..1fa21bf7 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestParametersSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestParametersSnippet.java @@ -129,9 +129,20 @@ public class RequestParametersSnippet extends AbstractParametersSnippet { * @return the new snippet */ public RequestParametersSnippet and(ParameterDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(getParameterDescriptors().values()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code RequestParametersSnippet} configured with this snippet's + * attributes and its descriptors combined with the given + * {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public RequestParametersSnippet and(List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + getParameterDescriptors().values()); + combinedDescriptors.addAll(additionalDescriptors); return new RequestParametersSnippet(combinedDescriptors, this.getAttributes()); } diff --git a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestPartsSnippet.java b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestPartsSnippet.java index 1a5d3059..c55bca4e 100644 --- a/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestPartsSnippet.java +++ b/spring-restdocs-core/src/main/java/org/springframework/restdocs/request/RequestPartsSnippet.java @@ -115,14 +115,24 @@ public class RequestPartsSnippet extends TemplatedSnippet { /** * Returns a new {@code RequestPartsSnippet} configured with this snippet's attributes * and its descriptors combined with the given {@code additionalDescriptors}. - * * @param additionalDescriptors the additional descriptors * @return the new snippet */ - public RequestPartsSnippet and(RequestPartDescriptor... additionalDescriptors) { - List combinedDescriptors = new ArrayList<>(); - combinedDescriptors.addAll(this.descriptorsByName.values()); - combinedDescriptors.addAll(Arrays.asList(additionalDescriptors)); + public final RequestPartsSnippet and(RequestPartDescriptor... additionalDescriptors) { + return and(Arrays.asList(additionalDescriptors)); + } + + /** + * Returns a new {@code RequestPartsSnippet} configured with this snippet's attributes + * and its descriptors combined with the given {@code additionalDescriptors}. + * @param additionalDescriptors the additional descriptors + * @return the new snippet + */ + public final RequestPartsSnippet and( + List additionalDescriptors) { + List combinedDescriptors = new ArrayList<>( + this.descriptorsByName.values()); + combinedDescriptors.addAll(additionalDescriptors); return new RequestPartsSnippet(combinedDescriptors, this.getAttributes()); }