Improve setDateHeader impl in MockServletResponse
Prior to this change, calling the `setDateHeader` method on a MockHttpServletResponse instance (internal implementation for testing the spring-web module) would just store the given long value in a Map, not writing it as a formatted date String. This can be problematic when testing features related to date headers such as "Expires", "If-Modified-Since", "Last-Modified", etc. This commit formats long dates into date Strings using the date format recommended by the RFC and the GMT time zone.
This commit is contained in:
@@ -23,12 +23,16 @@ import java.io.OutputStreamWriter;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.io.Writer;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@@ -59,6 +63,10 @@ public class MockHttpServletResponse implements HttpServletResponse {
|
||||
|
||||
private static final String LOCATION_HEADER = "Location";
|
||||
|
||||
private static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz";
|
||||
|
||||
private static TimeZone GMT = TimeZone.getTimeZone("GMT");
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
// ServletResponse properties
|
||||
@@ -481,12 +489,16 @@ public class MockHttpServletResponse implements HttpServletResponse {
|
||||
|
||||
@Override
|
||||
public void setDateHeader(String name, long value) {
|
||||
setHeaderValue(name, value);
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
|
||||
dateFormat.setTimeZone(GMT);
|
||||
setHeaderValue(name, dateFormat.format(new Date(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addDateHeader(String name, long value) {
|
||||
addHeaderValue(name, value);
|
||||
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
|
||||
dateFormat.setTimeZone(GMT);
|
||||
setHeaderValue(name, dateFormat.format(new Date(value)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -107,7 +107,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
assertTrue(request.checkNotModified(epochTime));
|
||||
|
||||
assertEquals(304, servletResponse.getStatus());
|
||||
assertEquals("" + epochTime, servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,7 +118,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
assertFalse(request.checkNotModified(currentDate.getTime()));
|
||||
|
||||
assertEquals(200, servletResponse.getStatus());
|
||||
assertEquals("" + currentDate.getTime(), servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(currentDate.getTime()), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -189,7 +189,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
|
||||
assertEquals(304, servletResponse.getStatus());
|
||||
assertEquals(eTag, servletResponse.getHeader("ETag"));
|
||||
assertEquals("" + currentDate.getTime(), servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(currentDate.getTime()), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -204,7 +204,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
|
||||
assertEquals(200, servletResponse.getStatus());
|
||||
assertEquals(eTag, servletResponse.getHeader("ETag"));
|
||||
assertEquals("" + currentEpoch, servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(currentEpoch), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -219,7 +219,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
|
||||
assertEquals(200, servletResponse.getStatus());
|
||||
assertEquals(currentETag, servletResponse.getHeader("ETag"));
|
||||
assertEquals("" + epochTime, servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -266,7 +266,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
assertTrue(request.checkNotModified(epochTime));
|
||||
|
||||
assertEquals(304, servletResponse.getStatus());
|
||||
assertEquals("" + epochTime, servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -278,7 +278,7 @@ public class ServletWebRequestHttpMethodsTests {
|
||||
assertFalse(request.checkNotModified(epochTime));
|
||||
|
||||
assertEquals(200, servletResponse.getStatus());
|
||||
assertEquals("" + epochTime, servletResponse.getHeader("Last-Modified"));
|
||||
assertEquals(dateFormat.format(epochTime), servletResponse.getHeader("Last-Modified"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user