diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java index cfeeeb0bbea..c7ec34d0882 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockCookie.java @@ -43,9 +43,16 @@ public class MockCookie extends Cookie { private static final long serialVersionUID = 4312531139502726325L; + private static final String PATH = "Path"; + private static final String DOMAIN = "Domain"; + private static final String COMMENT = "Comment"; + private static final String SECURE = "Secure"; + private static final String HTTP_ONLY = "HttpOnly"; + private static final String PARTITIONED = "Partitioned"; private static final String SAME_SITE = "SameSite"; + private static final String MAX_AGE = "Max-Age"; private static final String EXPIRES = "Expires"; - private static final String PARTITIONED = "Partitioned"; + @Nullable private ZonedDateTime expires; @@ -140,10 +147,10 @@ public class MockCookie extends Cookie { MockCookie cookie = new MockCookie(name, value); for (String attribute : attributes) { - if (StringUtils.startsWithIgnoreCase(attribute, "Domain")) { + if (StringUtils.startsWithIgnoreCase(attribute, DOMAIN)) { cookie.setDomain(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Max-Age")) { + else if (StringUtils.startsWithIgnoreCase(attribute, MAX_AGE)) { cookie.setMaxAge(Integer.parseInt(extractAttributeValue(attribute, setCookieHeader))); } else if (StringUtils.startsWithIgnoreCase(attribute, EXPIRES)) { @@ -155,19 +162,19 @@ public class MockCookie extends Cookie { // ignore invalid date formats } } - else if (StringUtils.startsWithIgnoreCase(attribute, "Path")) { + else if (StringUtils.startsWithIgnoreCase(attribute, PATH)) { cookie.setPath(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Secure")) { + else if (StringUtils.startsWithIgnoreCase(attribute, SECURE)) { cookie.setSecure(true); } - else if (StringUtils.startsWithIgnoreCase(attribute, "HttpOnly")) { + else if (StringUtils.startsWithIgnoreCase(attribute, HTTP_ONLY)) { cookie.setHttpOnly(true); } else if (StringUtils.startsWithIgnoreCase(attribute, SAME_SITE)) { cookie.setSameSite(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Comment")) { + else if (StringUtils.startsWithIgnoreCase(attribute, COMMENT)) { cookie.setComment(extractAttributeValue(attribute, setCookieHeader)); } else if (!attribute.isEmpty()) { @@ -202,15 +209,15 @@ public class MockCookie extends Cookie { return new ToStringCreator(this) .append("name", getName()) .append("value", getValue()) - .append("Path", getPath()) - .append("Domain", getDomain()) + .append(PATH, getPath()) + .append(DOMAIN, getDomain()) .append("Version", getVersion()) - .append("Comment", getComment()) - .append("Secure", getSecure()) - .append("HttpOnly", isHttpOnly()) + .append(COMMENT, getComment()) + .append(SECURE, getSecure()) + .append(HTTP_ONLY, isHttpOnly()) .append(PARTITIONED, isPartitioned()) .append(SAME_SITE, getSameSite()) - .append("Max-Age", getMaxAge()) + .append(MAX_AGE, getMaxAge()) .append(EXPIRES, getAttribute(EXPIRES)) .toString(); } diff --git a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java index b0d35105bbe..023231d4846 100644 --- a/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java +++ b/spring-web/src/test/java/org/springframework/http/codec/json/Jackson2JsonDecoderTests.java @@ -394,7 +394,7 @@ class Jackson2JsonDecoderTests extends AbstractDecoderTests private static final long serialVersionUID = 1L; - protected Deserializer() { + Deserializer() { super(TestObject.class); } diff --git a/spring-web/src/test/java/org/springframework/web/util/ContentCachingRequestWrapperTests.java b/spring-web/src/test/java/org/springframework/web/util/ContentCachingRequestWrapperTests.java index 8da7ba658ba..d955c70010e 100644 --- a/spring-web/src/test/java/org/springframework/web/util/ContentCachingRequestWrapperTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/ContentCachingRequestWrapperTests.java @@ -106,8 +106,8 @@ class ContentCachingRequestWrapperTests { } }; - assertThatIllegalStateException().isThrownBy(() -> - wrapper.getInputStream().readAllBytes()) + assertThatIllegalStateException() + .isThrownBy(() -> wrapper.getInputStream().readAllBytes()) .withMessage("3"); } diff --git a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java index d10c457324c..9d01ad1c6d6 100644 --- a/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java +++ b/spring-web/src/testFixtures/java/org/springframework/web/testfixture/servlet/MockCookie.java @@ -43,9 +43,16 @@ public class MockCookie extends Cookie { private static final long serialVersionUID = 4312531139502726325L; + private static final String PATH = "Path"; + private static final String DOMAIN = "Domain"; + private static final String COMMENT = "Comment"; + private static final String SECURE = "Secure"; + private static final String HTTP_ONLY = "HttpOnly"; + private static final String PARTITIONED = "Partitioned"; private static final String SAME_SITE = "SameSite"; + private static final String MAX_AGE = "Max-Age"; private static final String EXPIRES = "Expires"; - private static final String PARTITIONED = "Partitioned"; + @Nullable private ZonedDateTime expires; @@ -140,10 +147,10 @@ public class MockCookie extends Cookie { MockCookie cookie = new MockCookie(name, value); for (String attribute : attributes) { - if (StringUtils.startsWithIgnoreCase(attribute, "Domain")) { + if (StringUtils.startsWithIgnoreCase(attribute, DOMAIN)) { cookie.setDomain(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Max-Age")) { + else if (StringUtils.startsWithIgnoreCase(attribute, MAX_AGE)) { cookie.setMaxAge(Integer.parseInt(extractAttributeValue(attribute, setCookieHeader))); } else if (StringUtils.startsWithIgnoreCase(attribute, EXPIRES)) { @@ -155,23 +162,23 @@ public class MockCookie extends Cookie { // ignore invalid date formats } } - else if (StringUtils.startsWithIgnoreCase(attribute, "Path")) { + else if (StringUtils.startsWithIgnoreCase(attribute, PATH)) { cookie.setPath(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Secure")) { + else if (StringUtils.startsWithIgnoreCase(attribute, SECURE)) { cookie.setSecure(true); } - else if (StringUtils.startsWithIgnoreCase(attribute, "HttpOnly")) { + else if (StringUtils.startsWithIgnoreCase(attribute, HTTP_ONLY)) { cookie.setHttpOnly(true); } else if (StringUtils.startsWithIgnoreCase(attribute, SAME_SITE)) { cookie.setSameSite(extractAttributeValue(attribute, setCookieHeader)); } - else if (StringUtils.startsWithIgnoreCase(attribute, "Comment")) { + else if (StringUtils.startsWithIgnoreCase(attribute, COMMENT)) { cookie.setComment(extractAttributeValue(attribute, setCookieHeader)); } - else { - cookie.setAttribute(attribute, extractAttributeValue(attribute, setCookieHeader)); + else if (!attribute.isEmpty()) { + cookie.setAttribute(attribute, extractOptionalAttributeValue(attribute, setCookieHeader)); } } return cookie; @@ -184,6 +191,11 @@ public class MockCookie extends Cookie { return nameAndValue[1]; } + private static String extractOptionalAttributeValue(String attribute, String header) { + String[] nameAndValue = attribute.split("="); + return nameAndValue.length == 2 ? nameAndValue[1] : ""; + } + @Override public void setAttribute(String name, @Nullable String value) { if (EXPIRES.equalsIgnoreCase(name)) { @@ -197,15 +209,15 @@ public class MockCookie extends Cookie { return new ToStringCreator(this) .append("name", getName()) .append("value", getValue()) - .append("Path", getPath()) - .append("Domain", getDomain()) + .append(PATH, getPath()) + .append(DOMAIN, getDomain()) .append("Version", getVersion()) - .append("Comment", getComment()) - .append("Secure", getSecure()) - .append("HttpOnly", isHttpOnly()) + .append(COMMENT, getComment()) + .append(SECURE, getSecure()) + .append(HTTP_ONLY, isHttpOnly()) .append(PARTITIONED, isPartitioned()) .append(SAME_SITE, getSameSite()) - .append("Max-Age", getMaxAge()) + .append(MAX_AGE, getMaxAge()) .append(EXPIRES, getAttribute(EXPIRES)) .toString(); }