diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java index bccc8dbd3a..9d93851c2c 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java @@ -23,6 +23,7 @@ import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; @@ -493,6 +494,17 @@ public class MockHttpServletResponse implements HttpServletResponse { setHeaderValue(name, formatDate(value)); } + public long getDateHeader(String name) { + SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); + dateFormat.setTimeZone(GMT); + try { + return dateFormat.parse(getHeader(name)).getTime(); + } catch (ParseException exception) { + throw new IllegalArgumentException( + "Value for header '" + name + "' is not a valid Date: " + getHeader(name)); + } + } + @Override public void addDateHeader(String name, long value) { addHeaderValue(name, formatDate(value)); diff --git a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java index 05341c8a8b..8928338cde 100644 --- a/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java +++ b/spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java @@ -36,6 +36,7 @@ import static org.junit.Assert.*; * @author Rossen Stoyanchev * @author Rob Winch * @author Sam Brannen + * @author Brian Clozel * @since 19.02.2006 */ public class MockHttpServletResponseTests { @@ -253,6 +254,21 @@ public class MockHttpServletResponseTests { assertEquals("Tue, 21 Jul 2015 10:00:01 GMT", response.getHeaders("Last-Modified").get(1)); } + @Test + public void getDateHeader() { + long time = 1437472800000L; + response.setDateHeader("Last-Modified", time); + assertEquals("Tue, 21 Jul 2015 10:00:00 GMT", response.getHeader("Last-Modified")); + assertEquals(time, response.getDateHeader("Last-Modified")); + } + + @Test(expected = IllegalArgumentException.class) + public void getInvalidDateHeader() { + response.setHeader("Last-Modified", "invalid"); + assertEquals("invalid", response.getHeader("Last-Modified")); + response.getDateHeader("Last-Modified"); + } + /** * SPR-10414 */ diff --git a/src/asciidoc/whats-new.adoc b/src/asciidoc/whats-new.adoc index 1649290d57..7b3913c5f5 100644 --- a/src/asciidoc/whats-new.adoc +++ b/src/asciidoc/whats-new.adoc @@ -618,4 +618,6 @@ public @interface MyTestConfig { allowing common test database configuration to be reused in different ++ApplicationContext++s within a test suite. ** See <> for details. +* `MockHttpServletRequest` and `MockHttpServletResponse` now better supports + date header formatting `getDateHeader` and `setDateHeader` methods.