Browse Source

Configurable locales in MockHttpServletRequest

Prior to this commit the MockHttpServletRequest constructor chain set
the preferred local to Locale.ENGLISH. Furthermore, it was possible to
add additional preferred locales "in front" of ENGLISH; however, it was
not possible to delete ENGLISH from the list of preferred locales.

This commit documents the fact that ENGLISH is the default preferred
locale and makes it possible to set the list of preferred locales via a
new setPreferredLocales(List<Locale> locales) method.

Issue: SPR-9724
pull/173/merge
Sam Brannen 13 years ago
parent
commit
591aa01741
  1. 109
      spring-orm/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java
  2. 106
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java
  3. 102
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java
  4. 66
      spring-web/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java
  5. 57
      spring-webmvc/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java
  6. 7
      spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java

109
spring-orm/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -35,7 +35,7 @@ import java.util.List; @@ -35,7 +35,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@ -58,6 +58,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -58,6 +58,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
* @author Rod Johnson
* @author Rick Evans
* @author Mark Fisher
* @author Sam Brannen
* @since 1.0.2
*/
public class MockHttpServletRequest implements HttpServletRequest {
@ -93,13 +94,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -93,13 +94,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
public static final String DEFAULT_REMOTE_HOST = "localhost";
private static final String CONTENT_TYPE_HEADER = "Content-Type";
private static final String CHARSET_PREFIX = "charset=";
private boolean active = true;
// ---------------------------------------------------------------------
// ServletRequest properties
// ---------------------------------------------------------------------
@ -141,7 +140,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -141,7 +140,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
private int localPort = DEFAULT_SERVER_PORT;
// ---------------------------------------------------------------------
// HttpServletRequest properties
// ---------------------------------------------------------------------
@ -186,46 +184,49 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -186,46 +184,49 @@ public class MockHttpServletRequest implements HttpServletRequest {
// ---------------------------------------------------------------------
/**
* Create a new MockHttpServletRequest with a default
* {@link org.springframework.mock.web.MockServletContext}.
* @see org.springframework.mock.web.MockServletContext
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest() {
this(null, "", "");
}
/**
* Create a new MockHttpServletRequest with a default
* {@link org.springframework.mock.web.MockServletContext}.
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see org.springframework.mock.web.MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(String method, String requestURI) {
this(null, method, requestURI);
}
/**
* Create a new MockHttpServletRequest.
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default MockServletContext)
* @see org.springframework.mock.web.MockServletContext
* <code>null</code> to use a default {@link MockServletContext})
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(ServletContext servletContext) {
this(servletContext, "", "");
}
/**
* Create a new MockHttpServletRequest.
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext},
* {@code method}, and {@code requestURI}.
* <p>The preferred locale will be set to {@link Locale#ENGLISH}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default MockServletContext)
* <code>null</code> to use a default {@link MockServletContext})
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see org.springframework.mock.web.MockServletContext
* @see #setPreferredLocales
* @see MockServletContext
*/
public MockHttpServletRequest(ServletContext servletContext, String method, String requestURI) {
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
@ -234,7 +235,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -234,7 +235,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.locales.add(Locale.ENGLISH);
}
// ---------------------------------------------------------------------
// Lifecycle methods
// ---------------------------------------------------------------------
@ -279,7 +279,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -279,7 +279,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
}
// ---------------------------------------------------------------------
// ServletRequest interface
// ---------------------------------------------------------------------
@ -291,7 +290,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -291,7 +290,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
public Enumeration<String> getAttributeNames() {
checkActive();
return new Vector<String>(this.attributes.keySet()).elements();
return Collections.enumeration(this.attributes.keySet());
}
public String getCharacterEncoding() {
@ -302,11 +301,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -302,11 +301,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.characterEncoding = characterEncoding;
updateContentTypeHeader();
}
private void updateContentTypeHeader() {
if (this.contentType != null) {
StringBuilder sb = new StringBuilder(this.contentType);
if (this.contentType.toLowerCase().indexOf(CHARSET_PREFIX) == -1 && this.characterEncoding != null) {
if (!this.contentType.toLowerCase().contains(CHARSET_PREFIX) && this.characterEncoding != null) {
sb.append(";").append(CHARSET_PREFIX).append(this.characterEncoding);
}
doAddHeaderValue(CONTENT_TYPE_HEADER, sb.toString(), true);
@ -348,8 +347,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -348,8 +347,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Set a single value for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, they will be replaced.
*/
public void setParameter(String name, String value) {
@ -358,8 +356,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -358,8 +356,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Set an array of values for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, they will be replaced.
*/
public void setParameter(String name, String[] values) {
@ -368,7 +365,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -368,7 +365,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Sets all provided parameters <emphasis>replacing</emphasis> any existing
* Sets all provided parameters <strong>replacing</strong> any existing
* values for the provided parameter names. To add without replacing
* existing values, use {@link #addParameters(java.util.Map)}.
*/
@ -393,8 +390,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -393,8 +390,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a single value for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, the given value will be added to the end of the list.
*/
public void addParameter(String name, String value) {
@ -403,8 +399,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -403,8 +399,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add an array of values for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, the given values will be added to the end of the list.
*/
public void addParameter(String name, String[] values) {
@ -422,7 +417,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -422,7 +417,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Adds all provided parameters <emphasis>without</emphasis> replacing any
* Adds all provided parameters <strong>without</strong> replacing any
* existing values. To replace existing values, use
* {@link #setParameters(java.util.Map)}.
*/
@ -566,12 +561,25 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -566,12 +561,25 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a new preferred locale, before any existing locales.
* @see #setPreferredLocales
*/
public void addPreferredLocale(Locale locale) {
Assert.notNull(locale, "Locale must not be null");
this.locales.add(0, locale);
}
/**
* Set the list of preferred locales, in descending order, effectively replacing
* any existing locales.
* @see #addPreferredLocale
* @since 3.2
*/
public void setPreferredLocales(List<Locale> locales) {
Assert.notEmpty(locales, "preferred locales list must not be empty");
this.locales.clear();
this.locales.addAll(locales);
}
public Locale getLocale() {
return this.locales.get(0);
}
@ -628,7 +636,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -628,7 +636,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
return this.localPort;
}
// ---------------------------------------------------------------------
// HttpServletRequest interface
// ---------------------------------------------------------------------
@ -673,7 +680,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -673,7 +680,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
doAddHeaderValue(name, value, false);
}
@SuppressWarnings("rawtypes")
private void doAddHeaderValue(String name, Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
@ -711,6 +718,20 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -711,6 +718,20 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
}
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return (header != null ? header.getStringValue() : null);
}
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<String>());
}
public Enumeration<String> getHeaderNames() {
return Collections.enumeration(this.headers.keySet());
}
public int getIntHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
Object value = (header != null ? header.getValue() : null);
@ -728,20 +749,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -728,20 +749,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
}
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return (header != null ? header.getStringValue() : null);
}
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<String>());
}
public Enumeration<String> getHeaderNames() {
return Collections.enumeration(this.headers.keySet());
}
public void setMethod(String method) {
this.method = method;
}
@ -791,8 +798,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -791,8 +798,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
public boolean isUserInRole(String role) {
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext &&
((MockServletContext) this.servletContext).getDeclaredRoles().contains(role)));
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext && ((MockServletContext) this.servletContext).getDeclaredRoles().contains(
role)));
}
public void setUserPrincipal(Principal userPrincipal) {

106
spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -35,7 +35,7 @@ import java.util.List; @@ -35,7 +35,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@ -58,6 +58,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -58,6 +58,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
* @author Rod Johnson
* @author Rick Evans
* @author Mark Fisher
* @author Sam Brannen
* @since 1.0.2
*/
public class MockHttpServletRequest implements HttpServletRequest {
@ -93,13 +94,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -93,13 +94,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
public static final String DEFAULT_REMOTE_HOST = "localhost";
private static final String CONTENT_TYPE_HEADER = "Content-Type";
private static final String CHARSET_PREFIX = "charset=";
private static final String CHARSET_PREFIX = "charset=";
private boolean active = true;
// ---------------------------------------------------------------------
// ServletRequest properties
// ---------------------------------------------------------------------
@ -141,7 +140,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -141,7 +140,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
private int localPort = DEFAULT_SERVER_PORT;
// ---------------------------------------------------------------------
// HttpServletRequest properties
// ---------------------------------------------------------------------
@ -186,45 +184,48 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -186,45 +184,48 @@ public class MockHttpServletRequest implements HttpServletRequest {
// ---------------------------------------------------------------------
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest() {
this(null, "", "");
}
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(String method, String requestURI) {
this(null, method, requestURI);
}
/**
* Create a new MockHttpServletRequest.
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default MockServletContext)
* @see MockServletContext
* <code>null</code> to use a default {@link MockServletContext})
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(ServletContext servletContext) {
this(servletContext, "", "");
}
/**
* Create a new MockHttpServletRequest.
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext},
* {@code method}, and {@code requestURI}.
* <p>The preferred locale will be set to {@link Locale#ENGLISH}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default MockServletContext)
* <code>null</code> to use a default {@link MockServletContext})
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see #setPreferredLocales
* @see MockServletContext
*/
public MockHttpServletRequest(ServletContext servletContext, String method, String requestURI) {
@ -234,7 +235,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -234,7 +235,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.locales.add(Locale.ENGLISH);
}
// ---------------------------------------------------------------------
// Lifecycle methods
// ---------------------------------------------------------------------
@ -279,7 +279,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -279,7 +279,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
}
// ---------------------------------------------------------------------
// ServletRequest interface
// ---------------------------------------------------------------------
@ -291,7 +290,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -291,7 +290,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
public Enumeration<String> getAttributeNames() {
checkActive();
return new Vector<String>(this.attributes.keySet()).elements();
return Collections.enumeration(this.attributes.keySet());
}
public String getCharacterEncoding() {
@ -302,7 +301,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -302,7 +301,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.characterEncoding = characterEncoding;
updateContentTypeHeader();
}
private void updateContentTypeHeader() {
if (this.contentType != null) {
StringBuilder sb = new StringBuilder(this.contentType);
@ -348,8 +347,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -348,8 +347,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Set a single value for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, they will be replaced.
*/
public void setParameter(String name, String value) {
@ -358,8 +356,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -358,8 +356,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Set an array of values for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, they will be replaced.
*/
public void setParameter(String name, String[] values) {
@ -368,7 +365,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -368,7 +365,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Sets all provided parameters <emphasis>replacing</emphasis> any existing
* Sets all provided parameters <strong>replacing</strong> any existing
* values for the provided parameter names. To add without replacing
* existing values, use {@link #addParameters(java.util.Map)}.
*/
@ -393,8 +390,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -393,8 +390,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a single value for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, the given value will be added to the end of the list.
*/
public void addParameter(String name, String value) {
@ -403,8 +399,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -403,8 +399,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add an array of values for the specified HTTP parameter.
* <p>
* If there are already one or more values registered for the given
* <p>If there are already one or more values registered for the given
* parameter name, the given values will be added to the end of the list.
*/
public void addParameter(String name, String[] values) {
@ -422,7 +417,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -422,7 +417,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Adds all provided parameters <emphasis>without</emphasis> replacing any
* Adds all provided parameters <strong>without</strong> replacing any
* existing values. To replace existing values, use
* {@link #setParameters(java.util.Map)}.
*/
@ -446,8 +441,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -446,8 +441,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Remove already registered values for the specified HTTP parameter, if
* any.
* Remove already registered values for the specified HTTP parameter, if any.
*/
public void removeParameter(String name) {
Assert.notNull(name, "Parameter name must not be null");
@ -566,12 +560,25 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -566,12 +560,25 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a new preferred locale, before any existing locales.
* @see #setPreferredLocales
*/
public void addPreferredLocale(Locale locale) {
Assert.notNull(locale, "Locale must not be null");
this.locales.add(0, locale);
}
/**
* Set the list of preferred locales, in descending order, effectively replacing
* any existing locales.
* @see #addPreferredLocale
* @since 3.2
*/
public void setPreferredLocales(List<Locale> locales) {
Assert.notEmpty(locales, "preferred locales list must not be empty");
this.locales.clear();
this.locales.addAll(locales);
}
public Locale getLocale() {
return this.locales.get(0);
}
@ -628,7 +635,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -628,7 +635,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
return this.localPort;
}
// ---------------------------------------------------------------------
// HttpServletRequest interface
// ---------------------------------------------------------------------
@ -673,7 +679,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -673,7 +679,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
doAddHeaderValue(name, value, false);
}
@SuppressWarnings("rawtypes")
private void doAddHeaderValue(String name, Object value, boolean replace) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
@ -711,6 +717,20 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -711,6 +717,20 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
}
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return (header != null ? header.getStringValue() : null);
}
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<String>());
}
public Enumeration<String> getHeaderNames() {
return Collections.enumeration(this.headers.keySet());
}
public int getIntHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
Object value = (header != null ? header.getValue() : null);
@ -727,21 +747,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -727,21 +747,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
return -1;
}
}
public String getHeader(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return (header != null ? header.getStringValue() : null);
}
public Enumeration<String> getHeaders(String name) {
HeaderValueHolder header = HeaderValueHolder.getByName(this.headers, name);
return Collections.enumeration(header != null ? header.getStringValues() : new LinkedList<String>());
}
public Enumeration<String> getHeaderNames() {
return Collections.enumeration(this.headers.keySet());
}
public void setMethod(String method) {
this.method = method;
}
@ -791,8 +797,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -791,8 +797,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
public boolean isUserInRole(String role) {
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext &&
((MockServletContext) this.servletContext).getDeclaredRoles().contains(role)));
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext && ((MockServletContext) this.servletContext).getDeclaredRoles().contains(
role)));
}
public void setUserPrincipal(Principal userPrincipal) {

102
spring-test/src/test/java/org/springframework/mock/web/MockHttpServletRequestTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,57 +16,70 @@ @@ -16,57 +16,70 @@
package org.springframework.mock.web;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import junit.framework.TestCase;
import org.junit.Test;
/**
* Unit tests for {@link MockHttpServletRequest}.
*
* @author Rick Evans
* @author Mark Fisher
* @author Rossen Stoyanchev
* @author Sam Brannen
*/
public class MockHttpServletRequestTests extends TestCase {
public class MockHttpServletRequestTests {
private MockHttpServletRequest request = new MockHttpServletRequest();
public void testSetContentType() {
@Test
public void setContentType() {
String contentType = "test/plain";
MockHttpServletRequest request = new MockHttpServletRequest();
request.setContentType(contentType);
assertEquals(contentType, request.getContentType());
assertEquals(contentType, request.getHeader("Content-Type"));
assertNull(request.getCharacterEncoding());
}
public void testSetContentTypeUTF8() {
@Test
public void setContentTypeUTF8() {
String contentType = "test/plain;charset=UTF-8";
MockHttpServletRequest request = new MockHttpServletRequest();
request.setContentType(contentType);
assertEquals(contentType, request.getContentType());
assertEquals(contentType, request.getHeader("Content-Type"));
assertEquals("UTF-8", request.getCharacterEncoding());
}
public void testContentTypeHeader() {
@Test
public void contentTypeHeader() {
String contentType = "test/plain";
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("Content-Type", contentType);
assertEquals(contentType, request.getContentType());
assertEquals(contentType, request.getHeader("Content-Type"));
assertNull(request.getCharacterEncoding());
}
public void testContentTypeHeaderUTF8() {
@Test
public void contentTypeHeaderUTF8() {
String contentType = "test/plain;charset=UTF-8";
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader("Content-Type", contentType);
assertEquals(contentType, request.getContentType());
assertEquals(contentType, request.getHeader("Content-Type"));
assertEquals("UTF-8", request.getCharacterEncoding());
}
public void testSetContentTypeThenCharacterEncoding() {
MockHttpServletRequest request = new MockHttpServletRequest();
@Test
public void setContentTypeThenCharacterEncoding() {
request.setContentType("test/plain");
request.setCharacterEncoding("UTF-8");
assertEquals("test/plain", request.getContentType());
@ -74,8 +87,8 @@ public class MockHttpServletRequestTests extends TestCase { @@ -74,8 +87,8 @@ public class MockHttpServletRequestTests extends TestCase {
assertEquals("UTF-8", request.getCharacterEncoding());
}
public void testSetCharacterEncodingThenContentType() {
MockHttpServletRequest request = new MockHttpServletRequest();
@Test
public void setCharacterEncodingThenContentType() {
request.setCharacterEncoding("UTF-8");
request.setContentType("test/plain");
assertEquals("test/plain", request.getContentType());
@ -83,17 +96,17 @@ public class MockHttpServletRequestTests extends TestCase { @@ -83,17 +96,17 @@ public class MockHttpServletRequestTests extends TestCase {
assertEquals("UTF-8", request.getCharacterEncoding());
}
public void testHttpHeaderNameCasingIsPreserved() throws Exception {
@Test
public void httpHeaderNameCasingIsPreserved() throws Exception {
String headerName = "Header1";
MockHttpServletRequest request = new MockHttpServletRequest();
request.addHeader(headerName, "value1");
Enumeration<String> requestHeaders = request.getHeaderNames();
assertNotNull(requestHeaders);
assertEquals("HTTP header casing not being preserved", headerName, requestHeaders.nextElement());
}
public void testSetMultipleParameters() {
MockHttpServletRequest request = new MockHttpServletRequest();
@Test
public void setMultipleParameters() {
request.setParameter("key1", "value1");
request.setParameter("key2", "value2");
Map<String, Object> params = new HashMap<String, Object>(2);
@ -110,8 +123,8 @@ public class MockHttpServletRequestTests extends TestCase { @@ -110,8 +123,8 @@ public class MockHttpServletRequestTests extends TestCase {
assertEquals("value3B", values3[1]);
}
public void testAddMultipleParameters() {
MockHttpServletRequest request = new MockHttpServletRequest();
@Test
public void addMultipleParameters() {
request.setParameter("key1", "value1");
request.setParameter("key2", "value2");
Map<String, Object> params = new HashMap<String, Object>(2);
@ -129,8 +142,8 @@ public class MockHttpServletRequestTests extends TestCase { @@ -129,8 +142,8 @@ public class MockHttpServletRequestTests extends TestCase {
assertEquals("value3B", values3[1]);
}
public void testRemoveAllParameters() {
MockHttpServletRequest request = new MockHttpServletRequest();
@Test
public void removeAllParameters() {
request.setParameter("key1", "value1");
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("key2", "value2");
@ -141,4 +154,47 @@ public class MockHttpServletRequestTests extends TestCase { @@ -141,4 +154,47 @@ public class MockHttpServletRequestTests extends TestCase {
assertEquals(0, request.getParameterMap().size());
}
@Test
public void defaultLocale() {
Locale originalDefaultLocale = Locale.getDefault();
try {
Locale newDefaultLocale = originalDefaultLocale.equals(Locale.GERMANY) ? Locale.FRANCE : Locale.GERMANY;
Locale.setDefault(newDefaultLocale);
// Create the request after changing the default locale.
MockHttpServletRequest request = new MockHttpServletRequest();
assertFalse(newDefaultLocale.equals(request.getLocale()));
assertEquals(Locale.ENGLISH, request.getLocale());
}
finally {
Locale.setDefault(originalDefaultLocale);
}
}
@Test(expected = IllegalArgumentException.class)
public void setPreferredLocalesWithNullList() {
request.setPreferredLocales(null);
}
@Test(expected = IllegalArgumentException.class)
public void setPreferredLocalesWithEmptyList() {
request.setPreferredLocales(new ArrayList<Locale>());
}
@Test
public void setPreferredLocales() {
List<Locale> preferredLocales = Arrays.asList(Locale.ITALY, Locale.CHINA);
request.setPreferredLocales(preferredLocales);
assertEqualEnumerations(Collections.enumeration(preferredLocales), request.getLocales());
}
private void assertEqualEnumerations(Enumeration<?> enum1, Enumeration<?> enum2) {
assertNotNull(enum1);
assertNotNull(enum2);
int count = 0;
while (enum1.hasMoreElements()) {
assertTrue("enumerations must be equal in length", enum2.hasMoreElements());
assertEquals("enumeration element #" + ++count, enum1.nextElement(), enum2.nextElement());
}
}
}

66
spring-web/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -56,7 +56,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -56,7 +56,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
/**
* Mock implementation of the {@link javax.servlet.http.HttpServletRequest}
* interface. Supports the Servlet 2.5 API leve. Throws
* interface. Supports the Servlet 2.5 API level; throws
* {@link UnsupportedOperationException} for some methods introduced in Servlet 3.0.
*
* <p>Used for testing the web framework; also useful for testing
@ -67,6 +67,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -67,6 +67,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
* @author Rick Evans
* @author Mark Fisher
* @author Chris Beams
* @author Sam Brannen
* @since 1.0.2
*/
public class MockHttpServletRequest implements HttpServletRequest {
@ -198,50 +199,54 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -198,50 +199,54 @@ public class MockHttpServletRequest implements HttpServletRequest {
private DispatcherType dispatcherType = DispatcherType.REQUEST;
//---------------------------------------------------------------------
// Constructors
//---------------------------------------------------------------------
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest() {
this(null, "", "");
}
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(String method, String requestURI) {
this(null, method, requestURI);
}
/**
* Create a new MockHttpServletRequest.
* @param servletContext the ServletContext that the request runs in
* (may be <code>null</code> to use a default MockServletContext)
* @see MockServletContext
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default {@link MockServletContext})
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(ServletContext servletContext) {
this(servletContext, "", "");
}
/**
* Create a new MockHttpServletRequest.
* @param servletContext the ServletContext that the request runs in
* (may be <code>null</code> to use a default MockServletContext)
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext},
* {@code method}, and {@code requestURI}.
* <p>The preferred locale will be set to {@link Locale#ENGLISH}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default {@link MockServletContext})
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see #setPreferredLocales
* @see MockServletContext
*/
public MockHttpServletRequest(ServletContext servletContext, String method, String requestURI) {
@ -251,14 +256,13 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -251,14 +256,13 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.locales.add(Locale.ENGLISH);
}
//---------------------------------------------------------------------
// Lifecycle methods
//---------------------------------------------------------------------
/**
* Return the ServletContext that this request is associated with.
* (Not available in the standard HttpServletRequest interface for some reason.)
* Return the ServletContext that this request is associated with. (Not
* available in the standard HttpServletRequest interface for some reason.)
*/
public ServletContext getServletContext() {
return this.servletContext;
@ -323,7 +327,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -323,7 +327,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
private void updateContentTypeHeader() {
if (this.contentType != null) {
StringBuilder sb = new StringBuilder(this.contentType);
if (this.contentType.toLowerCase().indexOf(CHARSET_PREFIX) == -1 && this.characterEncoding != null) {
if (!this.contentType.toLowerCase().contains(CHARSET_PREFIX) && this.characterEncoding != null) {
sb.append(";").append(CHARSET_PREFIX).append(this.characterEncoding);
}
doAddHeaderValue(CONTENT_TYPE_HEADER, sb.toString(), true);
@ -383,10 +387,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -383,10 +387,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Sets all provided parameters <emphasis>replacing</emphasis> any
* existing values for the provided parameter names. To add without
* replacing existing values, use {@link #addParameters(java.util.Map)}.
* Sets all provided parameters <strong>replacing</strong> any existing
* values for the provided parameter names. To add without replacing
* existing values, use {@link #addParameters(java.util.Map)}.
*/
@SuppressWarnings("rawtypes")
public void setParameters(Map params) {
Assert.notNull(params, "Parameter map must not be null");
for (Object key : params.keySet()) {
@ -436,10 +441,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -436,10 +441,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Adds all provided parameters <emphasis>without</emphasis> replacing
* any existing values. To replace existing values, use
* Adds all provided parameters <strong>without</strong> replacing any
* existing values. To replace existing values, use
* {@link #setParameters(java.util.Map)}.
*/
@SuppressWarnings("rawtypes")
public void addParameters(Map params) {
Assert.notNull(params, "Parameter map must not be null");
for (Object key : params.keySet()) {
@ -579,12 +585,25 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -579,12 +585,25 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a new preferred locale, before any existing locales.
* @see #setPreferredLocales
*/
public void addPreferredLocale(Locale locale) {
Assert.notNull(locale, "Locale must not be null");
this.locales.add(0, locale);
}
/**
* Set the list of preferred locales, in descending order, effectively replacing
* any existing locales.
* @see #addPreferredLocale
* @since 3.2
*/
public void setPreferredLocales(List<Locale> locales) {
Assert.notEmpty(locales, "preferred locales list must not be empty");
this.locales.clear();
this.locales.addAll(locales);
}
public Locale getLocale() {
return this.locales.get(0);
}
@ -804,7 +823,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -804,7 +823,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
public boolean isUserInRole(String role) {
return this.userRoles.contains(role);
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext && ((MockServletContext) this.servletContext).getDeclaredRoles().contains(
role)));
}
public void setUserPrincipal(Principal userPrincipal) {

57
spring-webmvc/src/test/java/org/springframework/mock/web/MockHttpServletRequest.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2011 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -57,7 +57,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -57,7 +57,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
/**
* Mock implementation of the {@link javax.servlet.http.HttpServletRequest}
* interface. Supports the Servlet 2.5 API level; throws
* {@link UnsupportedOperationException} for all methods introduced in Servlet 3.0.
* {@link UnsupportedOperationException} for some methods introduced in Servlet 3.0.
*
* <p>Used for testing the web framework; also useful for testing
* application controllers.
@ -67,6 +67,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap; @@ -67,6 +67,7 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
* @author Rick Evans
* @author Mark Fisher
* @author Chris Beams
* @author Sam Brannen
* @since 1.0.2
*/
public class MockHttpServletRequest implements HttpServletRequest {
@ -204,45 +205,48 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -204,45 +205,48 @@ public class MockHttpServletRequest implements HttpServletRequest {
//---------------------------------------------------------------------
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest() {
this(null, "", "");
}
/**
* Create a new MockHttpServletRequest with a default
* Create a new {@code MockHttpServletRequest} with a default
* {@link MockServletContext}.
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see MockServletContext
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(String method, String requestURI) {
this(null, method, requestURI);
}
/**
* Create a new MockHttpServletRequest.
* @param servletContext the ServletContext that the request runs in
* (may be <code>null</code> to use a default MockServletContext)
* @see MockServletContext
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default {@link MockServletContext})
* @see #MockHttpServletRequest(ServletContext, String, String)
*/
public MockHttpServletRequest(ServletContext servletContext) {
this(servletContext, "", "");
}
/**
* Create a new MockHttpServletRequest.
* @param servletContext the ServletContext that the request runs in
* (may be <code>null</code> to use a default MockServletContext)
* Create a new {@code MockHttpServletRequest} with the supplied {@link ServletContext},
* {@code method}, and {@code requestURI}.
* <p>The preferred locale will be set to {@link Locale#ENGLISH}.
* @param servletContext the ServletContext that the request runs in (may be
* <code>null</code> to use a default {@link MockServletContext})
* @param method the request method (may be <code>null</code>)
* @param requestURI the request URI (may be <code>null</code>)
* @see #setMethod
* @see #setRequestURI
* @see #setPreferredLocales
* @see MockServletContext
*/
public MockHttpServletRequest(ServletContext servletContext, String method, String requestURI) {
@ -252,7 +256,6 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -252,7 +256,6 @@ public class MockHttpServletRequest implements HttpServletRequest {
this.locales.add(Locale.ENGLISH);
}
//---------------------------------------------------------------------
// Lifecycle methods
//---------------------------------------------------------------------
@ -324,7 +327,7 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -324,7 +327,7 @@ public class MockHttpServletRequest implements HttpServletRequest {
private void updateContentTypeHeader() {
if (this.contentType != null) {
StringBuilder sb = new StringBuilder(this.contentType);
if (this.contentType.toLowerCase().indexOf(CHARSET_PREFIX) == -1 && this.characterEncoding != null) {
if (!this.contentType.toLowerCase().contains(CHARSET_PREFIX) && this.characterEncoding != null) {
sb.append(";").append(CHARSET_PREFIX).append(this.characterEncoding);
}
doAddHeaderValue(CONTENT_TYPE_HEADER, sb.toString(), true);
@ -384,10 +387,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -384,10 +387,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Sets all provided parameters <emphasis>replacing</emphasis> any
* Sets all provided parameters, <strong>replacing</strong> any
* existing values for the provided parameter names. To add without
* replacing existing values, use {@link #addParameters(java.util.Map)}.
*/
@SuppressWarnings("rawtypes")
public void setParameters(Map params) {
Assert.notNull(params, "Parameter map must not be null");
for (Object key : params.keySet()) {
@ -437,10 +441,11 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -437,10 +441,11 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
/**
* Adds all provided parameters <emphasis>without</emphasis> replacing
* any existing values. To replace existing values, use
* Adds all provided parameters <strong>without</strong> replacing any
* existing values. To replace existing values, use
* {@link #setParameters(java.util.Map)}.
*/
@SuppressWarnings("rawtypes")
public void addParameters(Map params) {
Assert.notNull(params, "Parameter map must not be null");
for (Object key : params.keySet()) {
@ -580,12 +585,25 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -580,12 +585,25 @@ public class MockHttpServletRequest implements HttpServletRequest {
/**
* Add a new preferred locale, before any existing locales.
* @see #setPreferredLocales
*/
public void addPreferredLocale(Locale locale) {
Assert.notNull(locale, "Locale must not be null");
this.locales.add(0, locale);
}
/**
* Set the list of preferred locales, in descending order, effectively replacing
* any existing locales.
* @see #addPreferredLocale
* @since 3.2
*/
public void setPreferredLocales(List<Locale> locales) {
Assert.notEmpty(locales, "preferred locales list must not be empty");
this.locales.clear();
this.locales.addAll(locales);
}
public Locale getLocale() {
return this.locales.get(0);
}
@ -805,7 +823,8 @@ public class MockHttpServletRequest implements HttpServletRequest { @@ -805,7 +823,8 @@ public class MockHttpServletRequest implements HttpServletRequest {
}
public boolean isUserInRole(String role) {
return this.userRoles.contains(role);
return (this.userRoles.contains(role) || (this.servletContext instanceof MockServletContext && ((MockServletContext) this.servletContext).getDeclaredRoles().contains(
role)));
}
public void setUserPrincipal(Principal userPrincipal) {

7
spring-webmvc/src/test/java/org/springframework/web/servlet/tags/AbstractTagTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2007 the original author or authors.
* Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -31,13 +31,14 @@ import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; @@ -31,13 +31,14 @@ import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import org.springframework.web.servlet.theme.FixedThemeResolver;
/**
* Abstract base class for testing tags: provides createPageContext.
* Abstract base class for testing tags; provides {@link #createPageContext()}.
*
* @author Alef Arendsen
* @author Juergen Hoeller
* @author Sam Brannen
*/
public abstract class AbstractTagTests extends TestCase {
protected MockPageContext createPageContext() {
MockServletContext sc = new MockServletContext();
SimpleWebApplicationContext wac = new SimpleWebApplicationContext();

Loading…
Cancel
Save