+ * This method is package private instead of private to support unit test invocation. + *
+ * + * @param osName the actual OS name + * @param osNamePrefix the prefix for the expected OS name + * @return true if matches, or false if not or can't determine + */ + private static boolean isOSNameMatch(final String osName, final String osNamePrefix) { + if (osName == null) { + return false; + } + return osName.startsWith(osNamePrefix); + } } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/template/TemplateProcessor.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/template/TemplateProcessor.groovy index 6791fea2b6..0d768437fc 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/template/TemplateProcessor.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/template/TemplateProcessor.groovy @@ -1,6 +1,7 @@ package org.springframework.cloud.contract.verifier.template import org.springframework.cloud.contract.spec.internal.Request + /** * Contract for conversion of templated responses. * diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContentUtils.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContentUtils.groovy index ea0aa40b39..98cfa5cc69 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContentUtils.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/ContentUtils.groovy @@ -32,9 +32,9 @@ import org.springframework.cloud.contract.spec.internal.OptionalProperty import java.util.regex.Matcher import java.util.regex.Pattern -import static org.apache.commons.lang3.StringEscapeUtils.escapeJava -import static org.apache.commons.lang3.StringEscapeUtils.escapeJson -import static org.apache.commons.lang3.StringEscapeUtils.escapeXml11 +import static org.apache.commons.text.StringEscapeUtils.escapeJava +import static org.apache.commons.text.StringEscapeUtils.escapeJson +import static org.apache.commons.text.StringEscapeUtils.escapeXml11 /** * A utility class that can operate on a message body basing on the provided Content Type. diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/DelegatingJsonVerifiable.java b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/DelegatingJsonVerifiable.java index 1975f04bef..58ef30623d 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/DelegatingJsonVerifiable.java +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/DelegatingJsonVerifiable.java @@ -16,12 +16,12 @@ package org.springframework.cloud.contract.verifier.util; -import com.toomuchcoding.jsonassert.JsonVerifiable; - import java.util.LinkedList; import java.util.regex.Pattern; -import static org.apache.commons.lang3.StringEscapeUtils.escapeJava; +import com.toomuchcoding.jsonassert.JsonVerifiable; + +import static org.apache.commons.text.StringEscapeUtils.escapeJava; /** * Implementation of the {@link MethodBufferingJsonVerifiable} that contains a list diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy index 0d9c1184ba..f1593eb2f4 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/util/RegexpBuilders.groovy @@ -23,7 +23,7 @@ import org.springframework.cloud.contract.spec.util.RegexpUtils import java.util.regex.Pattern -import static org.apache.commons.lang3.StringEscapeUtils.escapeJson +import static org.apache.commons.text.StringEscapeUtils.escapeJson import static ContentType.* import static ContentUtils.extractValue diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy index df5930b7ca..aebd757d63 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -2291,6 +2291,8 @@ DocumentContext parsedJson = JsonPath.parse(json); } body( url: fromRequest().url(), + path: fromRequest().path(), + pathIndex: fromRequest().path(1), param: fromRequest().query("foo"), paramIndex: fromRequest().query("foo", 1), authorization: fromRequest().header("Authorization"), @@ -2312,7 +2314,9 @@ DocumentContext parsedJson = JsonPath.parse(json); SyntaxChecker.tryToCompileWithoutCompileStatic(methodBuilderName, test) then: !test.contains('''DslProperty''') - test.contains('''assertThatJson(parsedJson).field("['url']").isEqualTo("/api/v1/xxxx")''') + test.contains('''assertThatJson(parsedJson).field("['url']").isEqualTo("/api/v1/xxxx?foo=bar&foo=bar2")''') + test.contains('''assertThatJson(parsedJson).field("['path']").isEqualTo("/api/v1/xxxx")''') + test.contains('''assertThatJson(parsedJson).field("['pathIndex']").isEqualTo("v1")''') test.contains('''assertThatJson(parsedJson).field("['fullBody']").isEqualTo("{\\"foo\\":\\"bar\\",\\"baz\\":5}")''') test.contains('''assertThatJson(parsedJson).field("['paramIndex']").isEqualTo("bar2")''') test.contains('''assertThatJson(parsedJson).field("['responseFoo']").isEqualTo("bar")''') diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy index f4df63cb15..de924d9c5b 100755 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/WireMockGroovyDslSpec.groovy @@ -1759,6 +1759,8 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie } body( url: fromRequest().url(), + path: fromRequest().path(), + pathIndex: fromRequest().path(1), param: fromRequest().query("foo"), paramIndex: fromRequest().query("foo", 1), authorization: fromRequest().header("Authorization"), @@ -1796,7 +1798,7 @@ class WireMockGroovyDslSpec extends Specification implements WireMockStubVerifie }, "response" : { "status" : 200, - "body" : "{\\"url\\":\\"{{{request.url}}}\\",\\"param\\":\\"{{{request.query.foo.[0]}}}\\",\\"paramIndex\\":\\"{{{request.query.foo.[1]}}}\\",\\"authorization\\":\\"{{{request.headers.Authorization.[0]}}}\\",\\"authorization2\\":\\"{{{request.headers.Authorization.[1]}}}\\",\\"fullBody\\":\\"{{{escapejsonbody}}}\\",\\"responseFoo\\":\\"{{{jsonpath this '$.foo'}}}\\",\\"responseBaz\\":{{{jsonpath this '$.baz'}}} ,\\"responseBaz2\\":\\"Bla bla {{{jsonpath this '$.foo'}}} bla bla\\"}", + "body" : "{\\"url\\":\\"{{{request.url}}}\\",\\"path\\":\\"{{{request.path}}}\\",\\"pathIndex\\":\\"{{{request.path.[1]}}}\\",\\"param\\":\\"{{{request.query.foo.[0]}}}\\",\\"paramIndex\\":\\"{{{request.query.foo.[1]}}}\\",\\"authorization\\":\\"{{{request.headers.Authorization.[0]}}}\\",\\"authorization2\\":\\"{{{request.headers.Authorization.[1]}}}\\",\\"fullBody\\":\\"{{{escapejsonbody}}}\\",\\"responseFoo\\":\\"{{{jsonpath this '$.foo'}}}\\",\\"responseBaz\\":{{{jsonpath this '$.baz'}}} ,\\"responseBaz2\\":\\"Bla bla {{{jsonpath this '$.foo'}}} bla bla\\"}", "headers" : { "Authorization" : "{{{request.headers.Authorization.[0]}}};foo" },