MockHttpServletResponse.setIntHeader supports 'Content-Length' header as well

Issue: SPR-13752
This commit is contained in:
Juergen Hoeller 2015-12-02 13:36:35 +01:00
parent 4d4d2e2966
commit a4f5c46fed
3 changed files with 34 additions and 20 deletions

View File

@ -154,7 +154,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
* <p>If {@code false}, {@link #getCharacterEncoding()} will return a default encoding value. * <p>If {@code false}, {@link #getCharacterEncoding()} will return a default encoding value.
*/ */
public boolean isCharset() { public boolean isCharset() {
return charset; return this.charset;
} }
@Override @Override
@ -552,11 +552,12 @@ public class MockHttpServletResponse implements HttpServletResponse {
private boolean setSpecialHeader(String name, Object value) { private boolean setSpecialHeader(String name, Object value) {
if (CONTENT_TYPE_HEADER.equalsIgnoreCase(name)) { if (CONTENT_TYPE_HEADER.equalsIgnoreCase(name)) {
setContentType((String) value); setContentType(value.toString());
return true; return true;
} }
else if (CONTENT_LENGTH_HEADER.equalsIgnoreCase(name)) { else if (CONTENT_LENGTH_HEADER.equalsIgnoreCase(name)) {
setContentLength(Integer.parseInt((String) value)); setContentLength(value instanceof Number ? ((Number) value).intValue() :
Integer.parseInt(value.toString()));
return true; return true;
} }
else { else {

View File

@ -19,7 +19,6 @@ package org.springframework.mock.web;
import java.io.IOException; import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.junit.Test; import org.junit.Test;
@ -92,9 +91,7 @@ public class MockHttpServletResponseTests {
assertEquals("UTF-8", response.getCharacterEncoding()); assertEquals("UTF-8", response.getCharacterEncoding());
} }
// SPR-12677 @Test // SPR-12677
@Test
public void contentTypeHeaderWithMoreComplexCharsetSyntax() { public void contentTypeHeaderWithMoreComplexCharsetSyntax() {
String contentType = "test/plain;charset=\"utf-8\";foo=\"charset=bar\";foocharset=bar;foo=bar"; String contentType = "test/plain;charset=\"utf-8\";foo=\"charset=bar\";foocharset=bar;foo=bar";
response.setHeader("Content-Type", contentType); response.setHeader("Content-Type", contentType);
@ -141,6 +138,13 @@ public class MockHttpServletResponseTests {
assertEquals("66", response.getHeader("Content-Length")); assertEquals("66", response.getHeader("Content-Length"));
} }
@Test
public void contentLengthIntHeader() {
response.addIntHeader("Content-Length", 66);
assertEquals(66, response.getContentLength());
assertEquals("66", response.getHeader("Content-Length"));
}
@Test @Test
public void httpHeaderNameCasingIsPreserved() throws Exception { public void httpHeaderNameCasingIsPreserved() throws Exception {
final String headerName = "Header1"; final String headerName = "Header1";
@ -269,20 +273,14 @@ public class MockHttpServletResponseTests {
response.getDateHeader("Last-Modified"); response.getDateHeader("Last-Modified");
} }
/** @Test // SPR-10414
* SPR-10414
*/
@Test
public void modifyStatusAfterSendError() throws IOException { public void modifyStatusAfterSendError() throws IOException {
response.sendError(HttpServletResponse.SC_NOT_FOUND); response.sendError(HttpServletResponse.SC_NOT_FOUND);
response.setStatus(HttpServletResponse.SC_OK); response.setStatus(HttpServletResponse.SC_OK);
assertEquals(response.getStatus(),HttpServletResponse.SC_NOT_FOUND); assertEquals(response.getStatus(),HttpServletResponse.SC_NOT_FOUND);
} }
/** @Test // SPR-10414
* SPR-10414
*/
@Test
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void modifyStatusMessageAfterSendError() throws IOException { public void modifyStatusMessageAfterSendError() throws IOException {
response.sendError(HttpServletResponse.SC_NOT_FOUND); response.sendError(HttpServletResponse.SC_NOT_FOUND);

View File

@ -23,6 +23,7 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
@ -32,7 +33,6 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -490,16 +490,30 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override @Override
public void setDateHeader(String name, long value) { public void setDateHeader(String name, long value) {
setHeaderValue(name, formatDate(value));
}
public long getDateHeader(String name) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
dateFormat.setTimeZone(GMT); dateFormat.setTimeZone(GMT);
setHeaderValue(name, dateFormat.format(new Date(value))); try {
return dateFormat.parse(getHeader(name)).getTime();
}
catch (ParseException ex) {
throw new IllegalArgumentException(
"Value for header '" + name + "' is not a valid Date: " + getHeader(name));
}
} }
@Override @Override
public void addDateHeader(String name, long value) { public void addDateHeader(String name, long value) {
addHeaderValue(name, formatDate(value));
}
private String formatDate(long date) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
dateFormat.setTimeZone(GMT); dateFormat.setTimeZone(GMT);
setHeaderValue(name, dateFormat.format(new Date(value))); return dateFormat.format(new Date(date));
} }
@Override @Override
@ -538,11 +552,12 @@ public class MockHttpServletResponse implements HttpServletResponse {
private boolean setSpecialHeader(String name, Object value) { private boolean setSpecialHeader(String name, Object value) {
if (CONTENT_TYPE_HEADER.equalsIgnoreCase(name)) { if (CONTENT_TYPE_HEADER.equalsIgnoreCase(name)) {
setContentType((String) value); setContentType(value.toString());
return true; return true;
} }
else if (CONTENT_LENGTH_HEADER.equalsIgnoreCase(name)) { else if (CONTENT_LENGTH_HEADER.equalsIgnoreCase(name)) {
setContentLength(Integer.parseInt((String) value)); setContentLength(value instanceof Number ? ((Number) value).intValue() :
Integer.parseInt(value.toString()));
return true; return true;
} }
else { else {