consistent copies of mocks
This commit is contained in:
parent
8dbbb533f3
commit
9dec670be4
|
|
@ -1,67 +1,66 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import javax.servlet.ServletInputStream;
|
||||||
import javax.servlet.ServletInputStream;
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
/**
|
||||||
/**
|
* Delegating implementation of {@link javax.servlet.ServletInputStream}.
|
||||||
* Delegating implementation of {@link javax.servlet.ServletInputStream}.
|
*
|
||||||
*
|
* <p>Used by {@link MockHttpServletRequest}; typically not directly
|
||||||
* <p>Used by {@link org.springframework.mock.web.MockHttpServletRequest}; typically not directly
|
* used for testing application controllers.
|
||||||
* used for testing application controllers.
|
*
|
||||||
*
|
* @author Juergen Hoeller
|
||||||
* @author Juergen Hoeller
|
* @since 1.0.2
|
||||||
* @since 1.0.2
|
* @see MockHttpServletRequest
|
||||||
* @see org.springframework.mock.web.MockHttpServletRequest
|
*/
|
||||||
*/
|
public class DelegatingServletInputStream extends ServletInputStream {
|
||||||
public class DelegatingServletInputStream extends ServletInputStream {
|
|
||||||
|
private final InputStream sourceStream;
|
||||||
private final InputStream sourceStream;
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Create a DelegatingServletInputStream for the given source stream.
|
||||||
* Create a DelegatingServletInputStream for the given source stream.
|
* @param sourceStream the source stream (never <code>null</code>)
|
||||||
* @param sourceStream the source stream (never <code>null</code>)
|
*/
|
||||||
*/
|
public DelegatingServletInputStream(InputStream sourceStream) {
|
||||||
public DelegatingServletInputStream(InputStream sourceStream) {
|
Assert.notNull(sourceStream, "Source InputStream must not be null");
|
||||||
Assert.notNull(sourceStream, "Source InputStream must not be null");
|
this.sourceStream = sourceStream;
|
||||||
this.sourceStream = sourceStream;
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Return the underlying source stream (never <code>null</code>).
|
||||||
* Return the underlying source stream (never <code>null</code>).
|
*/
|
||||||
*/
|
public final InputStream getSourceStream() {
|
||||||
public final InputStream getSourceStream() {
|
return this.sourceStream;
|
||||||
return this.sourceStream;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public int read() throws IOException {
|
||||||
public int read() throws IOException {
|
return this.sourceStream.read();
|
||||||
return this.sourceStream.read();
|
}
|
||||||
}
|
|
||||||
|
public void close() throws IOException {
|
||||||
public void close() throws IOException {
|
super.close();
|
||||||
super.close();
|
this.sourceStream.close();
|
||||||
this.sourceStream.close();
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,72 +1,71 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import javax.servlet.ServletOutputStream;
|
||||||
import javax.servlet.ServletOutputStream;
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
/**
|
||||||
/**
|
* Delegating implementation of {@link javax.servlet.ServletOutputStream}.
|
||||||
* Delegating implementation of {@link javax.servlet.ServletOutputStream}.
|
*
|
||||||
*
|
* <p>Used by {@link MockHttpServletResponse}; typically not directly
|
||||||
* <p>Used by {@link org.springframework.mock.web.MockHttpServletResponse}; typically not directly
|
* used for testing application controllers.
|
||||||
* used for testing application controllers.
|
*
|
||||||
*
|
* @author Juergen Hoeller
|
||||||
* @author Juergen Hoeller
|
* @since 1.0.2
|
||||||
* @since 1.0.2
|
* @see MockHttpServletResponse
|
||||||
* @see org.springframework.mock.web.MockHttpServletResponse
|
*/
|
||||||
*/
|
public class DelegatingServletOutputStream extends ServletOutputStream {
|
||||||
public class DelegatingServletOutputStream extends ServletOutputStream {
|
|
||||||
|
private final OutputStream targetStream;
|
||||||
private final OutputStream targetStream;
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Create a DelegatingServletOutputStream for the given target stream.
|
||||||
* Create a DelegatingServletOutputStream for the given target stream.
|
* @param targetStream the target stream (never <code>null</code>)
|
||||||
* @param targetStream the target stream (never <code>null</code>)
|
*/
|
||||||
*/
|
public DelegatingServletOutputStream(OutputStream targetStream) {
|
||||||
public DelegatingServletOutputStream(OutputStream targetStream) {
|
Assert.notNull(targetStream, "Target OutputStream must not be null");
|
||||||
Assert.notNull(targetStream, "Target OutputStream must not be null");
|
this.targetStream = targetStream;
|
||||||
this.targetStream = targetStream;
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Return the underlying target stream (never <code>null</code>).
|
||||||
* Return the underlying target stream (never <code>null</code>).
|
*/
|
||||||
*/
|
public final OutputStream getTargetStream() {
|
||||||
public final OutputStream getTargetStream() {
|
return this.targetStream;
|
||||||
return this.targetStream;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public void write(int b) throws IOException {
|
||||||
public void write(int b) throws IOException {
|
this.targetStream.write(b);
|
||||||
this.targetStream.write(b);
|
}
|
||||||
}
|
|
||||||
|
public void flush() throws IOException {
|
||||||
public void flush() throws IOException {
|
super.flush();
|
||||||
super.flush();
|
this.targetStream.flush();
|
||||||
this.targetStream.flush();
|
}
|
||||||
}
|
|
||||||
|
public void close() throws IOException {
|
||||||
public void close() throws IOException {
|
super.close();
|
||||||
super.close();
|
this.targetStream.close();
|
||||||
this.targetStream.close();
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,85 +1,92 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Collections;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal helper class that serves as value holder for request headers.
|
* Internal helper class that serves as value holder for request headers.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Rick Evans
|
* @author Rick Evans
|
||||||
* @since 2.0.1
|
* @since 2.0.1
|
||||||
*/
|
*/
|
||||||
class HeaderValueHolder {
|
class HeaderValueHolder {
|
||||||
|
|
||||||
private final List values = new LinkedList();
|
private final List<Object> values = new LinkedList<Object>();
|
||||||
|
|
||||||
|
|
||||||
public void setValue(Object value) {
|
public void setValue(Object value) {
|
||||||
this.values.clear();
|
this.values.clear();
|
||||||
this.values.add(value);
|
this.values.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addValue(Object value) {
|
public void addValue(Object value) {
|
||||||
this.values.add(value);
|
this.values.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addValues(Collection values) {
|
public void addValues(Collection<?> values) {
|
||||||
this.values.addAll(values);
|
this.values.addAll(values);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addValueArray(Object values) {
|
public void addValueArray(Object values) {
|
||||||
CollectionUtils.mergeArrayIntoCollection(values, this.values);
|
CollectionUtils.mergeArrayIntoCollection(values, this.values);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List getValues() {
|
public List<Object> getValues() {
|
||||||
return Collections.unmodifiableList(this.values);
|
return Collections.unmodifiableList(this.values);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getValue() {
|
public List<String> getStringValues() {
|
||||||
return (!this.values.isEmpty() ? this.values.get(0) : null);
|
List<String> stringList = new ArrayList<String>(this.values.size());
|
||||||
}
|
for (Object value : this.values) {
|
||||||
|
stringList.add(value.toString());
|
||||||
|
}
|
||||||
/**
|
return Collections.unmodifiableList(stringList);
|
||||||
* Find a HeaderValueHolder by name, ignoring casing.
|
}
|
||||||
* @param headers the Map of header names to HeaderValueHolders
|
|
||||||
* @param name the name of the desired header
|
public Object getValue() {
|
||||||
* @return the corresponding HeaderValueHolder,
|
return (!this.values.isEmpty() ? this.values.get(0) : null);
|
||||||
* or <code>null</code> if none found
|
}
|
||||||
*/
|
|
||||||
public static HeaderValueHolder getByName(Map headers, String name) {
|
|
||||||
Assert.notNull(name, "Header name must not be null");
|
/**
|
||||||
for (Iterator it = headers.keySet().iterator(); it.hasNext();) {
|
* Find a HeaderValueHolder by name, ignoring casing.
|
||||||
String headerName = (String) it.next();
|
* @param headers the Map of header names to HeaderValueHolders
|
||||||
if (headerName.equalsIgnoreCase(name)) {
|
* @param name the name of the desired header
|
||||||
return (HeaderValueHolder) headers.get(headerName);
|
* @return the corresponding HeaderValueHolder,
|
||||||
}
|
* or <code>null</code> if none found
|
||||||
}
|
*/
|
||||||
return null;
|
public static HeaderValueHolder getByName(Map<String, HeaderValueHolder> headers, String name) {
|
||||||
}
|
Assert.notNull(name, "Header name must not be null");
|
||||||
|
for (String headerName : headers.keySet()) {
|
||||||
}
|
if (headerName.equalsIgnoreCase(name)) {
|
||||||
|
return headers.get(headerName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,198 +1,197 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.jsp.JspWriter;
|
||||||
import javax.servlet.jsp.JspWriter;
|
import javax.servlet.jsp.tagext.BodyContent;
|
||||||
import javax.servlet.jsp.tagext.BodyContent;
|
|
||||||
|
/**
|
||||||
/**
|
* Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class.
|
||||||
* Mock implementation of the {@link javax.servlet.jsp.tagext.BodyContent} class.
|
*
|
||||||
*
|
* <p>Used for testing the web framework; only necessary for testing
|
||||||
* <p>Used for testing the web framework; only necessary for testing
|
* applications when testing custom JSP tags.
|
||||||
* applications when testing custom JSP tags.
|
*
|
||||||
*
|
* @author Juergen Hoeller
|
||||||
* @author Juergen Hoeller
|
* @since 2.5
|
||||||
* @since 2.5
|
*/
|
||||||
*/
|
public class MockBodyContent extends BodyContent {
|
||||||
public class MockBodyContent extends BodyContent {
|
|
||||||
|
private final String content;
|
||||||
private final String content;
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockBodyContent for the given response.
|
||||||
* Create a MockBodyContent for the given response.
|
* @param content the body content to expose
|
||||||
* @param content the body content to expose
|
* @param response the servlet response to wrap
|
||||||
* @param response the servlet response to wrap
|
*/
|
||||||
*/
|
public MockBodyContent(String content, HttpServletResponse response) {
|
||||||
public MockBodyContent(String content, HttpServletResponse response) {
|
this(content, response, null);
|
||||||
this(content, response, null);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockBodyContent for the given response.
|
||||||
* Create a MockBodyContent for the given response.
|
* @param content the body content to expose
|
||||||
* @param content the body content to expose
|
* @param targetWriter the target Writer to wrap
|
||||||
* @param targetWriter the target Writer to wrap
|
*/
|
||||||
*/
|
public MockBodyContent(String content, Writer targetWriter) {
|
||||||
public MockBodyContent(String content, Writer targetWriter) {
|
this(content, null, targetWriter);
|
||||||
this(content, null, targetWriter);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockBodyContent for the given response.
|
||||||
* Create a MockBodyContent for the given response.
|
* @param content the body content to expose
|
||||||
* @param content the body content to expose
|
* @param response the servlet response to wrap
|
||||||
* @param response the servlet response to wrap
|
* @param targetWriter the target Writer to wrap
|
||||||
* @param targetWriter the target Writer to wrap
|
*/
|
||||||
*/
|
public MockBodyContent(String content, HttpServletResponse response, Writer targetWriter) {
|
||||||
public MockBodyContent(String content, HttpServletResponse response, Writer targetWriter) {
|
super(adaptJspWriter(targetWriter, response));
|
||||||
super(adaptJspWriter(targetWriter, response));
|
this.content = content;
|
||||||
this.content = content;
|
}
|
||||||
}
|
|
||||||
|
private static JspWriter adaptJspWriter(Writer targetWriter, HttpServletResponse response) {
|
||||||
private static JspWriter adaptJspWriter(Writer targetWriter, HttpServletResponse response) {
|
if (targetWriter instanceof JspWriter) {
|
||||||
if (targetWriter instanceof JspWriter) {
|
return (JspWriter) targetWriter;
|
||||||
return (JspWriter) targetWriter;
|
}
|
||||||
}
|
else {
|
||||||
else {
|
return new MockJspWriter(response, targetWriter);
|
||||||
return new MockJspWriter(response, targetWriter);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public Reader getReader() {
|
||||||
public Reader getReader() {
|
return new StringReader(this.content);
|
||||||
return new StringReader(this.content);
|
}
|
||||||
}
|
|
||||||
|
public String getString() {
|
||||||
public String getString() {
|
return this.content;
|
||||||
return this.content;
|
}
|
||||||
}
|
|
||||||
|
public void writeOut(Writer writer) throws IOException {
|
||||||
public void writeOut(Writer writer) throws IOException {
|
writer.write(this.content);
|
||||||
writer.write(this.content);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------------------
|
||||||
//---------------------------------------------------------------------
|
// Delegating implementations of JspWriter's abstract methods
|
||||||
// Delegating implementations of JspWriter's abstract methods
|
//---------------------------------------------------------------------
|
||||||
//---------------------------------------------------------------------
|
|
||||||
|
public void clear() throws IOException {
|
||||||
public void clear() throws IOException {
|
getEnclosingWriter().clear();
|
||||||
getEnclosingWriter().clear();
|
}
|
||||||
}
|
|
||||||
|
public void clearBuffer() throws IOException {
|
||||||
public void clearBuffer() throws IOException {
|
getEnclosingWriter().clearBuffer();
|
||||||
getEnclosingWriter().clearBuffer();
|
}
|
||||||
}
|
|
||||||
|
public void close() throws IOException {
|
||||||
public void close() throws IOException {
|
getEnclosingWriter().close();
|
||||||
getEnclosingWriter().close();
|
}
|
||||||
}
|
|
||||||
|
public int getRemaining() {
|
||||||
public int getRemaining() {
|
return getEnclosingWriter().getRemaining();
|
||||||
return getEnclosingWriter().getRemaining();
|
}
|
||||||
}
|
|
||||||
|
public void newLine() throws IOException {
|
||||||
public void newLine() throws IOException {
|
getEnclosingWriter().println();
|
||||||
getEnclosingWriter().println();
|
}
|
||||||
}
|
|
||||||
|
public void write(char value[], int offset, int length) throws IOException {
|
||||||
public void write(char value[], int offset, int length) throws IOException {
|
getEnclosingWriter().write(value, offset, length);
|
||||||
getEnclosingWriter().write(value, offset, length);
|
}
|
||||||
}
|
|
||||||
|
public void print(boolean value) throws IOException {
|
||||||
public void print(boolean value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(char value) throws IOException {
|
||||||
public void print(char value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(char[] value) throws IOException {
|
||||||
public void print(char[] value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(double value) throws IOException {
|
||||||
public void print(double value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(float value) throws IOException {
|
||||||
public void print(float value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(int value) throws IOException {
|
||||||
public void print(int value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(long value) throws IOException {
|
||||||
public void print(long value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(Object value) throws IOException {
|
||||||
public void print(Object value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(String value) throws IOException {
|
||||||
public void print(String value) throws IOException {
|
getEnclosingWriter().print(value);
|
||||||
getEnclosingWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void println() throws IOException {
|
||||||
public void println() throws IOException {
|
getEnclosingWriter().println();
|
||||||
getEnclosingWriter().println();
|
}
|
||||||
}
|
|
||||||
|
public void println(boolean value) throws IOException {
|
||||||
public void println(boolean value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(char value) throws IOException {
|
||||||
public void println(char value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(char[] value) throws IOException {
|
||||||
public void println(char[] value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(double value) throws IOException {
|
||||||
public void println(double value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(float value) throws IOException {
|
||||||
public void println(float value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(int value) throws IOException {
|
||||||
public void println(int value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(long value) throws IOException {
|
||||||
public void println(long value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(Object value) throws IOException {
|
||||||
public void println(Object value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(String value) throws IOException {
|
||||||
public void println(String value) throws IOException {
|
getEnclosingWriter().println(value);
|
||||||
getEnclosingWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,92 +1,92 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2006 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import javax.servlet.jsp.JspException;
|
import javax.servlet.jsp.JspException;
|
||||||
import javax.servlet.jsp.PageContext;
|
import javax.servlet.jsp.PageContext;
|
||||||
import javax.servlet.jsp.el.ELException;
|
import javax.servlet.jsp.el.ELException;
|
||||||
import javax.servlet.jsp.el.Expression;
|
import javax.servlet.jsp.el.Expression;
|
||||||
import javax.servlet.jsp.el.ExpressionEvaluator;
|
import javax.servlet.jsp.el.ExpressionEvaluator;
|
||||||
import javax.servlet.jsp.el.FunctionMapper;
|
import javax.servlet.jsp.el.FunctionMapper;
|
||||||
import javax.servlet.jsp.el.VariableResolver;
|
import javax.servlet.jsp.el.VariableResolver;
|
||||||
|
|
||||||
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
|
import org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator}
|
* Mock implementation of the JSP 2.0 {@link javax.servlet.jsp.el.ExpressionEvaluator}
|
||||||
* interface, delegating to the Jakarta JSTL ExpressionEvaluatorManager.
|
* interface, delegating to the Jakarta JSTL ExpressionEvaluatorManager.
|
||||||
*
|
*
|
||||||
* <p>Used for testing the web framework; only necessary for testing
|
* <p>Used for testing the web framework; only necessary for testing
|
||||||
* applications when testing custom JSP tags.
|
* applications when testing custom JSP tags.
|
||||||
*
|
*
|
||||||
* <p>Note that the Jakarta JSTL implementation (jstl.jar, standard.jar)
|
* <p>Note that the Jakarta JSTL implementation (jstl.jar, standard.jar)
|
||||||
* has to be available on the class path to use this expression evaluator.
|
* has to be available on the class path to use this expression evaluator.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 1.1.5
|
* @since 1.1.5
|
||||||
* @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager
|
* @see org.apache.taglibs.standard.lang.support.ExpressionEvaluatorManager
|
||||||
*/
|
*/
|
||||||
public class MockExpressionEvaluator extends ExpressionEvaluator {
|
public class MockExpressionEvaluator extends ExpressionEvaluator {
|
||||||
|
|
||||||
private final PageContext pageContext;
|
private final PageContext pageContext;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new MockExpressionEvaluator for the given PageContext.
|
* Create a new MockExpressionEvaluator for the given PageContext.
|
||||||
* @param pageContext the JSP PageContext to run in
|
* @param pageContext the JSP PageContext to run in
|
||||||
*/
|
*/
|
||||||
public MockExpressionEvaluator(PageContext pageContext) {
|
public MockExpressionEvaluator(PageContext pageContext) {
|
||||||
this.pageContext = pageContext;
|
this.pageContext = pageContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Expression parseExpression(
|
public Expression parseExpression(
|
||||||
final String expression, final Class expectedType, final FunctionMapper functionMapper)
|
final String expression, final Class expectedType, final FunctionMapper functionMapper)
|
||||||
throws ELException {
|
throws ELException {
|
||||||
|
|
||||||
return new Expression() {
|
return new Expression() {
|
||||||
public Object evaluate(VariableResolver variableResolver) throws ELException {
|
public Object evaluate(VariableResolver variableResolver) throws ELException {
|
||||||
return doEvaluate(expression, expectedType, functionMapper);
|
return doEvaluate(expression, expectedType, functionMapper);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object evaluate(
|
public Object evaluate(
|
||||||
String expression, Class expectedType, VariableResolver variableResolver, FunctionMapper functionMapper)
|
String expression, Class expectedType, VariableResolver variableResolver, FunctionMapper functionMapper)
|
||||||
throws ELException {
|
throws ELException {
|
||||||
|
|
||||||
if (variableResolver != null) {
|
if (variableResolver != null) {
|
||||||
throw new IllegalArgumentException("Custom VariableResolver not supported");
|
throw new IllegalArgumentException("Custom VariableResolver not supported");
|
||||||
}
|
}
|
||||||
return doEvaluate(expression, expectedType, functionMapper);
|
return doEvaluate(expression, expectedType, functionMapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Object doEvaluate(
|
protected Object doEvaluate(
|
||||||
String expression, Class expectedType, FunctionMapper functionMapper)
|
String expression, Class expectedType, FunctionMapper functionMapper)
|
||||||
throws ELException {
|
throws ELException {
|
||||||
|
|
||||||
if (functionMapper != null) {
|
if (functionMapper != null) {
|
||||||
throw new IllegalArgumentException("Custom FunctionMapper not supported");
|
throw new IllegalArgumentException("Custom FunctionMapper not supported");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext);
|
return ExpressionEvaluatorManager.evaluate("JSP EL expression", expression, expectedType, this.pageContext);
|
||||||
}
|
}
|
||||||
catch (JspException ex) {
|
catch (JspException ex) {
|
||||||
throw new ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex);
|
throw new ELException("Parsing of JSP EL expression \"" + expression + "\" failed", ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2002-2009 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
|
import javax.servlet.FilterChain;
|
||||||
|
import javax.servlet.ServletRequest;
|
||||||
|
import javax.servlet.ServletResponse;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock implementation of the {@link javax.servlet.FilterConfig} interface.
|
||||||
|
*
|
||||||
|
* <p>Used for testing the web framework; also usefol for testing
|
||||||
|
* custom {@link javax.servlet.Filter} implementations.
|
||||||
|
*
|
||||||
|
* @author Juergen Hoeller
|
||||||
|
* @since 2.0.3
|
||||||
|
* @see MockFilterConfig
|
||||||
|
* @see PassThroughFilterChain
|
||||||
|
*/
|
||||||
|
public class MockFilterChain implements FilterChain {
|
||||||
|
|
||||||
|
private ServletRequest request;
|
||||||
|
|
||||||
|
private ServletResponse response;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Records the request and response.
|
||||||
|
*/
|
||||||
|
public void doFilter(ServletRequest request, ServletResponse response) {
|
||||||
|
Assert.notNull(request, "Request must not be null");
|
||||||
|
Assert.notNull(response, "Response must not be null");
|
||||||
|
if (this.request != null) {
|
||||||
|
throw new IllegalStateException("This FilterChain has already been called!");
|
||||||
|
}
|
||||||
|
this.request = request;
|
||||||
|
this.response = response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the request that {@link #doFilter} has been called with.
|
||||||
|
*/
|
||||||
|
public ServletRequest getRequest() {
|
||||||
|
return this.request;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the response that {@link #doFilter} has been called with.
|
||||||
|
*/
|
||||||
|
public ServletResponse getResponse() {
|
||||||
|
return this.response;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2008 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -16,12 +16,10 @@
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.Properties;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Enumeration;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
import javax.servlet.FilterConfig;
|
import javax.servlet.FilterConfig;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
|
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -1,245 +1,246 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Enumeration;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.Enumeration;
|
||||||
import java.util.Hashtable;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.Map;
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import javax.servlet.http.HttpSessionBindingEvent;
|
import javax.servlet.http.HttpSessionBindingEvent;
|
||||||
import javax.servlet.http.HttpSessionBindingListener;
|
import javax.servlet.http.HttpSessionBindingListener;
|
||||||
import javax.servlet.http.HttpSessionContext;
|
import javax.servlet.http.HttpSessionContext;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock implementation of the {@link javax.servlet.http.HttpSession} interface.
|
* Mock implementation of the {@link javax.servlet.http.HttpSession} interface.
|
||||||
* Supports the Servlet 2.4 API level.
|
* Supports the Servlet 2.4 API level.
|
||||||
*
|
*
|
||||||
* <p>Used for testing the web framework; also useful for testing
|
* <p>Used for testing the web framework; also useful for testing
|
||||||
* application controllers.
|
* application controllers.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Rod Johnson
|
* @author Rod Johnson
|
||||||
* @author Mark Fisher
|
* @author Mark Fisher
|
||||||
* @since 1.0.2
|
* @since 1.0.2
|
||||||
*/
|
*/
|
||||||
public class MockHttpSession implements HttpSession {
|
public class MockHttpSession implements HttpSession {
|
||||||
|
|
||||||
public static final String SESSION_COOKIE_NAME = "JSESSION";
|
public static final String SESSION_COOKIE_NAME = "JSESSION";
|
||||||
|
|
||||||
private static int nextId = 1;
|
private static int nextId = 1;
|
||||||
|
|
||||||
|
|
||||||
private final String id;
|
private final String id;
|
||||||
|
|
||||||
private final long creationTime = System.currentTimeMillis();
|
private final long creationTime = System.currentTimeMillis();
|
||||||
|
|
||||||
private int maxInactiveInterval;
|
private int maxInactiveInterval;
|
||||||
|
|
||||||
private long lastAccessedTime = System.currentTimeMillis();
|
private long lastAccessedTime = System.currentTimeMillis();
|
||||||
|
|
||||||
private final ServletContext servletContext;
|
private final ServletContext servletContext;
|
||||||
|
|
||||||
private final Hashtable attributes = new Hashtable();
|
private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
|
||||||
|
|
||||||
private boolean invalid = false;
|
private boolean invalid = false;
|
||||||
|
|
||||||
private boolean isNew = true;
|
private boolean isNew = true;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new MockHttpSession with a default {@link org.springframework.mock.web.MockServletContext}.
|
* Create a new MockHttpSession with a default {@link MockServletContext}.
|
||||||
* @see org.springframework.mock.web.MockServletContext
|
* @see MockServletContext
|
||||||
*/
|
*/
|
||||||
public MockHttpSession() {
|
public MockHttpSession() {
|
||||||
this(null);
|
this(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new MockHttpSession.
|
* Create a new MockHttpSession.
|
||||||
* @param servletContext the ServletContext that the session runs in
|
* @param servletContext the ServletContext that the session runs in
|
||||||
*/
|
*/
|
||||||
public MockHttpSession(ServletContext servletContext) {
|
public MockHttpSession(ServletContext servletContext) {
|
||||||
this(servletContext, null);
|
this(servletContext, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new MockHttpSession.
|
* Create a new MockHttpSession.
|
||||||
* @param servletContext the ServletContext that the session runs in
|
* @param servletContext the ServletContext that the session runs in
|
||||||
* @param id a unique identifier for this session
|
* @param id a unique identifier for this session
|
||||||
*/
|
*/
|
||||||
public MockHttpSession(ServletContext servletContext, String id) {
|
public MockHttpSession(ServletContext servletContext, String id) {
|
||||||
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
||||||
this.id = (id != null ? id : Integer.toString(nextId++));
|
this.id = (id != null ? id : Integer.toString(nextId++));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public long getCreationTime() {
|
public long getCreationTime() {
|
||||||
return this.creationTime;
|
return this.creationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return this.id;
|
return this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void access() {
|
public void access() {
|
||||||
this.lastAccessedTime = System.currentTimeMillis();
|
this.lastAccessedTime = System.currentTimeMillis();
|
||||||
this.isNew = false;
|
this.isNew = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getLastAccessedTime() {
|
public long getLastAccessedTime() {
|
||||||
return this.lastAccessedTime;
|
return this.lastAccessedTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServletContext getServletContext() {
|
public ServletContext getServletContext() {
|
||||||
return this.servletContext;
|
return this.servletContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMaxInactiveInterval(int interval) {
|
public void setMaxInactiveInterval(int interval) {
|
||||||
this.maxInactiveInterval = interval;
|
this.maxInactiveInterval = interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxInactiveInterval() {
|
public int getMaxInactiveInterval() {
|
||||||
return this.maxInactiveInterval;
|
return this.maxInactiveInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpSessionContext getSessionContext() {
|
public HttpSessionContext getSessionContext() {
|
||||||
throw new UnsupportedOperationException("getSessionContext");
|
throw new UnsupportedOperationException("getSessionContext");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getAttribute(String name) {
|
public Object getAttribute(String name) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
return this.attributes.get(name);
|
return this.attributes.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getValue(String name) {
|
public Object getValue(String name) {
|
||||||
return getAttribute(name);
|
return getAttribute(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Enumeration getAttributeNames() {
|
public Enumeration<String> getAttributeNames() {
|
||||||
return this.attributes.keys();
|
return Collections.enumeration(this.attributes.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String[] getValueNames() {
|
public String[] getValueNames() {
|
||||||
return (String[]) this.attributes.keySet().toArray(new String[this.attributes.size()]);
|
return this.attributes.keySet().toArray(new String[this.attributes.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAttribute(String name, Object value) {
|
public void setAttribute(String name, Object value) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
this.attributes.put(name, value);
|
this.attributes.put(name, value);
|
||||||
if (value instanceof HttpSessionBindingListener) {
|
if (value instanceof HttpSessionBindingListener) {
|
||||||
((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value));
|
((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
removeAttribute(name);
|
removeAttribute(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putValue(String name, Object value) {
|
public void putValue(String name, Object value) {
|
||||||
setAttribute(name, value);
|
setAttribute(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeAttribute(String name) {
|
public void removeAttribute(String name) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
Object value = this.attributes.remove(name);
|
Object value = this.attributes.remove(name);
|
||||||
if (value instanceof HttpSessionBindingListener) {
|
if (value instanceof HttpSessionBindingListener) {
|
||||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeValue(String name) {
|
public void removeValue(String name) {
|
||||||
removeAttribute(name);
|
removeAttribute(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear all of this session's attributes.
|
* Clear all of this session's attributes.
|
||||||
*/
|
*/
|
||||||
public void clearAttributes() {
|
public void clearAttributes() {
|
||||||
for (Iterator it = this.attributes.entrySet().iterator(); it.hasNext();) {
|
for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext();) {
|
||||||
Map.Entry entry = (Map.Entry) it.next();
|
Map.Entry<String, Object> entry = it.next();
|
||||||
String name = (String) entry.getKey();
|
String name = entry.getKey();
|
||||||
Object value = entry.getValue();
|
Object value = entry.getValue();
|
||||||
it.remove();
|
it.remove();
|
||||||
if (value instanceof HttpSessionBindingListener) {
|
if (value instanceof HttpSessionBindingListener) {
|
||||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void invalidate() {
|
public void invalidate() {
|
||||||
this.invalid = true;
|
this.invalid = true;
|
||||||
clearAttributes();
|
clearAttributes();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isInvalid() {
|
public boolean isInvalid() {
|
||||||
return this.invalid;
|
return this.invalid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setNew(boolean value) {
|
public void setNew(boolean value) {
|
||||||
this.isNew = value;
|
this.isNew = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isNew() {
|
public boolean isNew() {
|
||||||
return this.isNew;
|
return this.isNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Serialize the attributes of this session into an object that can
|
* Serialize the attributes of this session into an object that can
|
||||||
* be turned into a byte array with standard Java serialization.
|
* be turned into a byte array with standard Java serialization.
|
||||||
* @return a representation of this session's serialized state
|
* @return a representation of this session's serialized state
|
||||||
*/
|
*/
|
||||||
public Serializable serializeState() {
|
public Serializable serializeState() {
|
||||||
HashMap state = new HashMap();
|
HashMap<String, Serializable> state = new HashMap<String, Serializable>();
|
||||||
for (Iterator it = this.attributes.entrySet().iterator(); it.hasNext();) {
|
for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext();) {
|
||||||
Map.Entry entry = (Map.Entry) it.next();
|
Map.Entry<String, Object> entry = it.next();
|
||||||
String name = (String) entry.getKey();
|
String name = entry.getKey();
|
||||||
Object value = entry.getValue();
|
Object value = entry.getValue();
|
||||||
it.remove();
|
it.remove();
|
||||||
if (value instanceof Serializable) {
|
if (value instanceof Serializable) {
|
||||||
state.put(name, value);
|
state.put(name, (Serializable) value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// Not serializable... Servlet containers usually automatically
|
// Not serializable... Servlet containers usually automatically
|
||||||
// unbind the attribute in this case.
|
// unbind the attribute in this case.
|
||||||
if (value instanceof HttpSessionBindingListener) {
|
if (value instanceof HttpSessionBindingListener) {
|
||||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deserialize the attributes of this session from a state object
|
* Deserialize the attributes of this session from a state object
|
||||||
* created by {@link #serializeState()}.
|
* created by {@link #serializeState()}.
|
||||||
* @param state a representation of this session's serialized state
|
* @param state a representation of this session's serialized state
|
||||||
*/
|
*/
|
||||||
public void deserializeState(Serializable state) {
|
@SuppressWarnings("unchecked")
|
||||||
Assert.isTrue(state instanceof Map, "Serialized state needs to be of type [java.util.Map]");
|
public void deserializeState(Serializable state) {
|
||||||
this.attributes.putAll((Map) state);
|
Assert.isTrue(state instanceof Map, "Serialized state needs to be of type [java.util.Map]");
|
||||||
}
|
this.attributes.putAll((Map<String, Object>) state);
|
||||||
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,192 +1,191 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.jsp.JspWriter;
|
||||||
import javax.servlet.jsp.JspWriter;
|
|
||||||
|
/**
|
||||||
/**
|
* Mock implementation of the {@link javax.servlet.jsp.JspWriter} class.
|
||||||
* Mock implementation of the {@link javax.servlet.jsp.JspWriter} class.
|
*
|
||||||
*
|
* <p>Used for testing the web framework; only necessary for testing
|
||||||
* <p>Used for testing the web framework; only necessary for testing
|
* applications when testing custom JSP tags.
|
||||||
* applications when testing custom JSP tags.
|
*
|
||||||
*
|
* @author Juergen Hoeller
|
||||||
* @author Juergen Hoeller
|
* @since 2.5
|
||||||
* @since 2.5
|
*/
|
||||||
*/
|
public class MockJspWriter extends JspWriter {
|
||||||
public class MockJspWriter extends JspWriter {
|
|
||||||
|
private final HttpServletResponse response;
|
||||||
private final HttpServletResponse response;
|
|
||||||
|
private PrintWriter targetWriter;
|
||||||
private PrintWriter targetWriter;
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockJspWriter for the given response,
|
||||||
* Create a MockJspWriter for the given response,
|
* using the response's default Writer.
|
||||||
* using the response's default Writer.
|
* @param response the servlet response to wrap
|
||||||
* @param response the servlet response to wrap
|
*/
|
||||||
*/
|
public MockJspWriter(HttpServletResponse response) {
|
||||||
public MockJspWriter(HttpServletResponse response) {
|
this(response, null);
|
||||||
this(response, null);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockJspWriter for the given plain Writer.
|
||||||
* Create a MockJspWriter for the given plain Writer.
|
* @param targetWriter the target Writer to wrap
|
||||||
* @param targetWriter the target Writer to wrap
|
*/
|
||||||
*/
|
public MockJspWriter(Writer targetWriter) {
|
||||||
public MockJspWriter(Writer targetWriter) {
|
this(null, targetWriter);
|
||||||
this(null, targetWriter);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a MockJspWriter for the given response.
|
||||||
* Create a MockJspWriter for the given response.
|
* @param response the servlet response to wrap
|
||||||
* @param response the servlet response to wrap
|
* @param targetWriter the target Writer to wrap
|
||||||
* @param targetWriter the target Writer to wrap
|
*/
|
||||||
*/
|
public MockJspWriter(HttpServletResponse response, Writer targetWriter) {
|
||||||
public MockJspWriter(HttpServletResponse response, Writer targetWriter) {
|
super(DEFAULT_BUFFER, true);
|
||||||
super(DEFAULT_BUFFER, true);
|
this.response = (response != null ? response : new MockHttpServletResponse());
|
||||||
this.response = (response != null ? response : new MockHttpServletResponse());
|
if (targetWriter instanceof PrintWriter) {
|
||||||
if (targetWriter instanceof PrintWriter) {
|
this.targetWriter = (PrintWriter) targetWriter;
|
||||||
this.targetWriter = (PrintWriter) targetWriter;
|
}
|
||||||
}
|
else if (targetWriter != null) {
|
||||||
else if (targetWriter != null) {
|
this.targetWriter = new PrintWriter(targetWriter);
|
||||||
this.targetWriter = new PrintWriter(targetWriter);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Lazily initialize the target Writer.
|
||||||
* Lazily initialize the target Writer.
|
*/
|
||||||
*/
|
protected PrintWriter getTargetWriter() throws IOException {
|
||||||
protected PrintWriter getTargetWriter() throws IOException {
|
if (this.targetWriter == null) {
|
||||||
if (this.targetWriter == null) {
|
this.targetWriter = this.response.getWriter();
|
||||||
this.targetWriter = this.response.getWriter();
|
}
|
||||||
}
|
return this.targetWriter;
|
||||||
return this.targetWriter;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public void clear() throws IOException {
|
||||||
public void clear() throws IOException {
|
if (this.response.isCommitted()) {
|
||||||
if (this.response.isCommitted()) {
|
throw new IOException("Response already committed");
|
||||||
throw new IOException("Response already committed");
|
}
|
||||||
}
|
this.response.resetBuffer();
|
||||||
this.response.resetBuffer();
|
}
|
||||||
}
|
|
||||||
|
public void clearBuffer() throws IOException {
|
||||||
public void clearBuffer() throws IOException {
|
}
|
||||||
}
|
|
||||||
|
public void flush() throws IOException {
|
||||||
public void flush() throws IOException {
|
this.response.flushBuffer();
|
||||||
this.response.flushBuffer();
|
}
|
||||||
}
|
|
||||||
|
public void close() throws IOException {
|
||||||
public void close() throws IOException {
|
flush();
|
||||||
flush();
|
}
|
||||||
}
|
|
||||||
|
public int getRemaining() {
|
||||||
public int getRemaining() {
|
return Integer.MAX_VALUE;
|
||||||
return Integer.MAX_VALUE;
|
}
|
||||||
}
|
|
||||||
|
public void newLine() throws IOException {
|
||||||
public void newLine() throws IOException {
|
getTargetWriter().println();
|
||||||
getTargetWriter().println();
|
}
|
||||||
}
|
|
||||||
|
public void write(char value[], int offset, int length) throws IOException {
|
||||||
public void write(char value[], int offset, int length) throws IOException {
|
getTargetWriter().write(value, offset, length);
|
||||||
getTargetWriter().write(value, offset, length);
|
}
|
||||||
}
|
|
||||||
|
public void print(boolean value) throws IOException {
|
||||||
public void print(boolean value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(char value) throws IOException {
|
||||||
public void print(char value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(char[] value) throws IOException {
|
||||||
public void print(char[] value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(double value) throws IOException {
|
||||||
public void print(double value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(float value) throws IOException {
|
||||||
public void print(float value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(int value) throws IOException {
|
||||||
public void print(int value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(long value) throws IOException {
|
||||||
public void print(long value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(Object value) throws IOException {
|
||||||
public void print(Object value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void print(String value) throws IOException {
|
||||||
public void print(String value) throws IOException {
|
getTargetWriter().print(value);
|
||||||
getTargetWriter().print(value);
|
}
|
||||||
}
|
|
||||||
|
public void println() throws IOException {
|
||||||
public void println() throws IOException {
|
getTargetWriter().println();
|
||||||
getTargetWriter().println();
|
}
|
||||||
}
|
|
||||||
|
public void println(boolean value) throws IOException {
|
||||||
public void println(boolean value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(char value) throws IOException {
|
||||||
public void println(char value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(char[] value) throws IOException {
|
||||||
public void println(char[] value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(double value) throws IOException {
|
||||||
public void println(double value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(float value) throws IOException {
|
||||||
public void println(float value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(int value) throws IOException {
|
||||||
public void println(int value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(long value) throws IOException {
|
||||||
public void println(long value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(Object value) throws IOException {
|
||||||
public void println(Object value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
public void println(String value) throws IOException {
|
||||||
public void println(String value) throws IOException {
|
getTargetWriter().println(value);
|
||||||
getTargetWriter().println(value);
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,132 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2002-2009 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.util.FileCopyUtils;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock implementation of the {@link org.springframework.web.multipart.MultipartFile}
|
||||||
|
* interface.
|
||||||
|
*
|
||||||
|
* <p>Useful in conjunction with a {@link MockMultipartHttpServletRequest}
|
||||||
|
* for testing application controllers that access multipart uploads.
|
||||||
|
*
|
||||||
|
* @author Juergen Hoeller
|
||||||
|
* @author Eric Crampton
|
||||||
|
* @since 2.0
|
||||||
|
* @see MockMultipartHttpServletRequest
|
||||||
|
*/
|
||||||
|
public class MockMultipartFile implements MultipartFile {
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
private String originalFilename;
|
||||||
|
|
||||||
|
private String contentType;
|
||||||
|
|
||||||
|
private final byte[] content;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new MockMultipartFile with the given content.
|
||||||
|
* @param name the name of the file
|
||||||
|
* @param content the content of the file
|
||||||
|
*/
|
||||||
|
public MockMultipartFile(String name, byte[] content) {
|
||||||
|
this(name, "", null, content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new MockMultipartFile with the given content.
|
||||||
|
* @param name the name of the file
|
||||||
|
* @param contentStream the content of the file as stream
|
||||||
|
* @throws IOException if reading from the stream failed
|
||||||
|
*/
|
||||||
|
public MockMultipartFile(String name, InputStream contentStream) throws IOException {
|
||||||
|
this(name, "", null, FileCopyUtils.copyToByteArray(contentStream));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new MockMultipartFile with the given content.
|
||||||
|
* @param name the name of the file
|
||||||
|
* @param originalFilename the original filename (as on the client's machine)
|
||||||
|
* @param contentType the content type (if known)
|
||||||
|
* @param content the content of the file
|
||||||
|
*/
|
||||||
|
public MockMultipartFile(String name, String originalFilename, String contentType, byte[] content) {
|
||||||
|
Assert.hasLength(name, "Name must not be null");
|
||||||
|
this.name = name;
|
||||||
|
this.originalFilename = (originalFilename != null ? originalFilename : "");
|
||||||
|
this.contentType = contentType;
|
||||||
|
this.content = (content != null ? content : new byte[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new MockMultipartFile with the given content.
|
||||||
|
* @param name the name of the file
|
||||||
|
* @param originalFilename the original filename (as on the client's machine)
|
||||||
|
* @param contentType the content type (if known)
|
||||||
|
* @param contentStream the content of the file as stream
|
||||||
|
* @throws IOException if reading from the stream failed
|
||||||
|
*/
|
||||||
|
public MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOriginalFilename() {
|
||||||
|
return this.originalFilename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentType() {
|
||||||
|
return this.contentType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return (this.content.length == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getSize() {
|
||||||
|
return this.content.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getBytes() throws IOException {
|
||||||
|
return this.content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getInputStream() throws IOException {
|
||||||
|
return new ByteArrayInputStream(this.content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void transferTo(File dest) throws IOException, IllegalStateException {
|
||||||
|
FileCopyUtils.copy(this.content, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2002-2009 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.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.springframework.web.multipart.MultipartHttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mock implementation of the
|
||||||
|
* {@link org.springframework.web.multipart.MultipartHttpServletRequest} interface.
|
||||||
|
*
|
||||||
|
* <p>Useful for testing application controllers that access multipart uploads.
|
||||||
|
* The {@link MockMultipartFile} can be used to populate these mock requests
|
||||||
|
* with files.
|
||||||
|
*
|
||||||
|
* @author Juergen Hoeller
|
||||||
|
* @author Eric Crampton
|
||||||
|
* @since 2.0
|
||||||
|
* @see MockMultipartFile
|
||||||
|
*/
|
||||||
|
public class MockMultipartHttpServletRequest extends MockHttpServletRequest implements MultipartHttpServletRequest {
|
||||||
|
|
||||||
|
private final Map<String, MultipartFile> multipartFiles = new LinkedHashMap<String, MultipartFile>();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a file to this request. The parameter name from the multipart
|
||||||
|
* form is taken from the {@link MultipartFile#getName()}.
|
||||||
|
* @param file multipart file to be added
|
||||||
|
*/
|
||||||
|
public void addFile(MultipartFile file) {
|
||||||
|
Assert.notNull(file, "MultipartFile must not be null");
|
||||||
|
this.multipartFiles.put(file.getName(), file);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<String> getFileNames() {
|
||||||
|
return getFileMap().keySet().iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultipartFile getFile(String name) {
|
||||||
|
return this.multipartFiles.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, MultipartFile> getFileMap() {
|
||||||
|
return Collections.unmodifiableMap(this.multipartFiles);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,337 +1,337 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2009 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.el.ELContext;
|
import javax.el.ELContext;
|
||||||
import javax.servlet.Servlet;
|
import javax.servlet.Servlet;
|
||||||
import javax.servlet.ServletConfig;
|
import javax.servlet.ServletConfig;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
import javax.servlet.jsp.JspWriter;
|
import javax.servlet.jsp.JspWriter;
|
||||||
import javax.servlet.jsp.PageContext;
|
import javax.servlet.jsp.PageContext;
|
||||||
import javax.servlet.jsp.el.ExpressionEvaluator;
|
import javax.servlet.jsp.el.ExpressionEvaluator;
|
||||||
import javax.servlet.jsp.el.VariableResolver;
|
import javax.servlet.jsp.el.VariableResolver;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock implementation of the {@link javax.servlet.jsp.PageContext} interface.
|
* Mock implementation of the {@link javax.servlet.jsp.PageContext} interface.
|
||||||
*
|
*
|
||||||
* <p>Used for testing the web framework; only necessary for testing
|
* <p>Used for testing the web framework; only necessary for testing
|
||||||
* applications when testing custom JSP tags.
|
* applications when testing custom JSP tags.
|
||||||
*
|
*
|
||||||
* <p>Note: Expects initialization via the constructor rather than via the
|
* <p>Note: Expects initialization via the constructor rather than via the
|
||||||
* <code>PageContext.initialize</code> method. Does not support writing to
|
* <code>PageContext.initialize</code> method. Does not support writing to
|
||||||
* a JspWriter, request dispatching, and <code>handlePageException</code> calls.
|
* a JspWriter, request dispatching, and <code>handlePageException</code> calls.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 1.0.2
|
* @since 1.0.2
|
||||||
*/
|
*/
|
||||||
public class MockPageContext extends PageContext {
|
public class MockPageContext extends PageContext {
|
||||||
|
|
||||||
private final ServletContext servletContext;
|
private final ServletContext servletContext;
|
||||||
|
|
||||||
private final HttpServletRequest request;
|
private final HttpServletRequest request;
|
||||||
|
|
||||||
private final HttpServletResponse response;
|
private final HttpServletResponse response;
|
||||||
|
|
||||||
private final ServletConfig servletConfig;
|
private final ServletConfig servletConfig;
|
||||||
|
|
||||||
private final Map<String, Object> attributes = new HashMap<String, Object>();
|
private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
|
||||||
|
|
||||||
private JspWriter out;
|
private JspWriter out;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new MockPageContext with a default {@link MockServletContext},
|
* Create new MockPageContext with a default {@link MockServletContext},
|
||||||
* {@link MockHttpServletRequest}, {@link MockHttpServletResponse},
|
* {@link MockHttpServletRequest}, {@link MockHttpServletResponse},
|
||||||
* {@link MockServletConfig}.
|
* {@link MockServletConfig}.
|
||||||
*/
|
*/
|
||||||
public MockPageContext() {
|
public MockPageContext() {
|
||||||
this(null, null, null, null);
|
this(null, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new MockPageContext with a default {@link MockHttpServletRequest},
|
* Create new MockPageContext with a default {@link MockHttpServletRequest},
|
||||||
* {@link MockHttpServletResponse}, {@link MockServletConfig}.
|
* {@link MockHttpServletResponse}, {@link MockServletConfig}.
|
||||||
* @param servletContext the ServletContext that the JSP page runs in
|
* @param servletContext the ServletContext that the JSP page runs in
|
||||||
* (only necessary when actually accessing the ServletContext)
|
* (only necessary when actually accessing the ServletContext)
|
||||||
*/
|
*/
|
||||||
public MockPageContext(ServletContext servletContext) {
|
public MockPageContext(ServletContext servletContext) {
|
||||||
this(servletContext, null, null, null);
|
this(servletContext, null, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new MockPageContext with a MockHttpServletResponse,
|
* Create new MockPageContext with a MockHttpServletResponse,
|
||||||
* MockServletConfig.
|
* MockServletConfig.
|
||||||
* @param servletContext the ServletContext that the JSP page runs in
|
* @param servletContext the ServletContext that the JSP page runs in
|
||||||
* @param request the current HttpServletRequest
|
* @param request the current HttpServletRequest
|
||||||
* (only necessary when actually accessing the request)
|
* (only necessary when actually accessing the request)
|
||||||
*/
|
*/
|
||||||
public MockPageContext(ServletContext servletContext, HttpServletRequest request) {
|
public MockPageContext(ServletContext servletContext, HttpServletRequest request) {
|
||||||
this(servletContext, request, null, null);
|
this(servletContext, request, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new MockPageContext with a MockServletConfig.
|
* Create new MockPageContext with a MockServletConfig.
|
||||||
* @param servletContext the ServletContext that the JSP page runs in
|
* @param servletContext the ServletContext that the JSP page runs in
|
||||||
* @param request the current HttpServletRequest
|
* @param request the current HttpServletRequest
|
||||||
* @param response the current HttpServletResponse
|
* @param response the current HttpServletResponse
|
||||||
* (only necessary when actually writing to the response)
|
* (only necessary when actually writing to the response)
|
||||||
*/
|
*/
|
||||||
public MockPageContext(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) {
|
public MockPageContext(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) {
|
||||||
this(servletContext, request, response, null);
|
this(servletContext, request, response, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create new MockServletConfig.
|
* Create new MockServletConfig.
|
||||||
* @param servletContext the ServletContext that the JSP page runs in
|
* @param servletContext the ServletContext that the JSP page runs in
|
||||||
* @param request the current HttpServletRequest
|
* @param request the current HttpServletRequest
|
||||||
* @param response the current HttpServletResponse
|
* @param response the current HttpServletResponse
|
||||||
* @param servletConfig the ServletConfig (hardly ever accessed from within a tag)
|
* @param servletConfig the ServletConfig (hardly ever accessed from within a tag)
|
||||||
*/
|
*/
|
||||||
public MockPageContext(ServletContext servletContext, HttpServletRequest request,
|
public MockPageContext(ServletContext servletContext, HttpServletRequest request,
|
||||||
HttpServletResponse response, ServletConfig servletConfig) {
|
HttpServletResponse response, ServletConfig servletConfig) {
|
||||||
|
|
||||||
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
||||||
this.request = (request != null ? request : new MockHttpServletRequest(servletContext));
|
this.request = (request != null ? request : new MockHttpServletRequest(servletContext));
|
||||||
this.response = (response != null ? response : new MockHttpServletResponse());
|
this.response = (response != null ? response : new MockHttpServletResponse());
|
||||||
this.servletConfig = (servletConfig != null ? servletConfig : new MockServletConfig(servletContext));
|
this.servletConfig = (servletConfig != null ? servletConfig : new MockServletConfig(servletContext));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void initialize(
|
public void initialize(
|
||||||
Servlet servlet, ServletRequest request, ServletResponse response,
|
Servlet servlet, ServletRequest request, ServletResponse response,
|
||||||
String errorPageURL, boolean needsSession, int bufferSize, boolean autoFlush) {
|
String errorPageURL, boolean needsSession, int bufferSize, boolean autoFlush) {
|
||||||
|
|
||||||
throw new UnsupportedOperationException("Use appropriate constructor");
|
throw new UnsupportedOperationException("Use appropriate constructor");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void release() {
|
public void release() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAttribute(String name, Object value) {
|
public void setAttribute(String name, Object value) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
if (value != null) {
|
if (value != null) {
|
||||||
this.attributes.put(name, value);
|
this.attributes.put(name, value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this.attributes.remove(name);
|
this.attributes.remove(name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAttribute(String name, Object value, int scope) {
|
public void setAttribute(String name, Object value, int scope) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
switch (scope) {
|
switch (scope) {
|
||||||
case PAGE_SCOPE:
|
case PAGE_SCOPE:
|
||||||
setAttribute(name, value);
|
setAttribute(name, value);
|
||||||
break;
|
break;
|
||||||
case REQUEST_SCOPE:
|
case REQUEST_SCOPE:
|
||||||
this.request.setAttribute(name, value);
|
this.request.setAttribute(name, value);
|
||||||
break;
|
break;
|
||||||
case SESSION_SCOPE:
|
case SESSION_SCOPE:
|
||||||
this.request.getSession().setAttribute(name, value);
|
this.request.getSession().setAttribute(name, value);
|
||||||
break;
|
break;
|
||||||
case APPLICATION_SCOPE:
|
case APPLICATION_SCOPE:
|
||||||
this.servletContext.setAttribute(name, value);
|
this.servletContext.setAttribute(name, value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid scope: " + scope);
|
throw new IllegalArgumentException("Invalid scope: " + scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getAttribute(String name) {
|
public Object getAttribute(String name) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
return this.attributes.get(name);
|
return this.attributes.get(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getAttribute(String name, int scope) {
|
public Object getAttribute(String name, int scope) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
switch (scope) {
|
switch (scope) {
|
||||||
case PAGE_SCOPE:
|
case PAGE_SCOPE:
|
||||||
return getAttribute(name);
|
return getAttribute(name);
|
||||||
case REQUEST_SCOPE:
|
case REQUEST_SCOPE:
|
||||||
return this.request.getAttribute(name);
|
return this.request.getAttribute(name);
|
||||||
case SESSION_SCOPE:
|
case SESSION_SCOPE:
|
||||||
HttpSession session = this.request.getSession(false);
|
HttpSession session = this.request.getSession(false);
|
||||||
return (session != null ? session.getAttribute(name) : null);
|
return (session != null ? session.getAttribute(name) : null);
|
||||||
case APPLICATION_SCOPE:
|
case APPLICATION_SCOPE:
|
||||||
return this.servletContext.getAttribute(name);
|
return this.servletContext.getAttribute(name);
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid scope: " + scope);
|
throw new IllegalArgumentException("Invalid scope: " + scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object findAttribute(String name) {
|
public Object findAttribute(String name) {
|
||||||
Object value = getAttribute(name);
|
Object value = getAttribute(name);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = getAttribute(name, REQUEST_SCOPE);
|
value = getAttribute(name, REQUEST_SCOPE);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = getAttribute(name, SESSION_SCOPE);
|
value = getAttribute(name, SESSION_SCOPE);
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
value = getAttribute(name, APPLICATION_SCOPE);
|
value = getAttribute(name, APPLICATION_SCOPE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeAttribute(String name) {
|
public void removeAttribute(String name) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
this.removeAttribute(name, PageContext.PAGE_SCOPE);
|
this.removeAttribute(name, PageContext.PAGE_SCOPE);
|
||||||
this.removeAttribute(name, PageContext.REQUEST_SCOPE);
|
this.removeAttribute(name, PageContext.REQUEST_SCOPE);
|
||||||
this.removeAttribute(name, PageContext.SESSION_SCOPE);
|
this.removeAttribute(name, PageContext.SESSION_SCOPE);
|
||||||
this.removeAttribute(name, PageContext.APPLICATION_SCOPE);
|
this.removeAttribute(name, PageContext.APPLICATION_SCOPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeAttribute(String name, int scope) {
|
public void removeAttribute(String name, int scope) {
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
switch (scope) {
|
switch (scope) {
|
||||||
case PAGE_SCOPE:
|
case PAGE_SCOPE:
|
||||||
this.attributes.remove(name);
|
this.attributes.remove(name);
|
||||||
break;
|
break;
|
||||||
case REQUEST_SCOPE:
|
case REQUEST_SCOPE:
|
||||||
this.request.removeAttribute(name);
|
this.request.removeAttribute(name);
|
||||||
break;
|
break;
|
||||||
case SESSION_SCOPE:
|
case SESSION_SCOPE:
|
||||||
this.request.getSession().removeAttribute(name);
|
this.request.getSession().removeAttribute(name);
|
||||||
break;
|
break;
|
||||||
case APPLICATION_SCOPE:
|
case APPLICATION_SCOPE:
|
||||||
this.servletContext.removeAttribute(name);
|
this.servletContext.removeAttribute(name);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid scope: " + scope);
|
throw new IllegalArgumentException("Invalid scope: " + scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getAttributesScope(String name) {
|
public int getAttributesScope(String name) {
|
||||||
if (getAttribute(name) != null) {
|
if (getAttribute(name) != null) {
|
||||||
return PAGE_SCOPE;
|
return PAGE_SCOPE;
|
||||||
}
|
}
|
||||||
else if (getAttribute(name, REQUEST_SCOPE) != null) {
|
else if (getAttribute(name, REQUEST_SCOPE) != null) {
|
||||||
return REQUEST_SCOPE;
|
return REQUEST_SCOPE;
|
||||||
}
|
}
|
||||||
else if (getAttribute(name, SESSION_SCOPE) != null) {
|
else if (getAttribute(name, SESSION_SCOPE) != null) {
|
||||||
return SESSION_SCOPE;
|
return SESSION_SCOPE;
|
||||||
}
|
}
|
||||||
else if (getAttribute(name, APPLICATION_SCOPE) != null) {
|
else if (getAttribute(name, APPLICATION_SCOPE) != null) {
|
||||||
return APPLICATION_SCOPE;
|
return APPLICATION_SCOPE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Enumeration<String> getAttributeNames() {
|
public Enumeration<String> getAttributeNames() {
|
||||||
return Collections.enumeration(this.attributes.keySet());
|
return Collections.enumeration(this.attributes.keySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public Enumeration<String> getAttributeNamesInScope(int scope) {
|
public Enumeration<String> getAttributeNamesInScope(int scope) {
|
||||||
switch (scope) {
|
switch (scope) {
|
||||||
case PAGE_SCOPE:
|
case PAGE_SCOPE:
|
||||||
return getAttributeNames();
|
return getAttributeNames();
|
||||||
case REQUEST_SCOPE:
|
case REQUEST_SCOPE:
|
||||||
return this.request.getAttributeNames();
|
return this.request.getAttributeNames();
|
||||||
case SESSION_SCOPE:
|
case SESSION_SCOPE:
|
||||||
HttpSession session = this.request.getSession(false);
|
HttpSession session = this.request.getSession(false);
|
||||||
return (session != null ? session.getAttributeNames() : null);
|
return (session != null ? session.getAttributeNames() : null);
|
||||||
case APPLICATION_SCOPE:
|
case APPLICATION_SCOPE:
|
||||||
return this.servletContext.getAttributeNames();
|
return this.servletContext.getAttributeNames();
|
||||||
default:
|
default:
|
||||||
throw new IllegalArgumentException("Invalid scope: " + scope);
|
throw new IllegalArgumentException("Invalid scope: " + scope);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public JspWriter getOut() {
|
public JspWriter getOut() {
|
||||||
if (this.out == null) {
|
if (this.out == null) {
|
||||||
this.out = new MockJspWriter(this.response);
|
this.out = new MockJspWriter(this.response);
|
||||||
}
|
}
|
||||||
return this.out;
|
return this.out;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExpressionEvaluator getExpressionEvaluator() {
|
public ExpressionEvaluator getExpressionEvaluator() {
|
||||||
return new MockExpressionEvaluator(this);
|
return new MockExpressionEvaluator(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ELContext getELContext() {
|
public ELContext getELContext() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public VariableResolver getVariableResolver() {
|
public VariableResolver getVariableResolver() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpSession getSession() {
|
public HttpSession getSession() {
|
||||||
return this.request.getSession();
|
return this.request.getSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getPage() {
|
public Object getPage() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServletRequest getRequest() {
|
public ServletRequest getRequest() {
|
||||||
return this.request;
|
return this.request;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServletResponse getResponse() {
|
public ServletResponse getResponse() {
|
||||||
return this.response;
|
return this.response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Exception getException() {
|
public Exception getException() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServletConfig getServletConfig() {
|
public ServletConfig getServletConfig() {
|
||||||
return this.servletConfig;
|
return this.servletConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ServletContext getServletContext() {
|
public ServletContext getServletContext() {
|
||||||
return this.servletContext;
|
return this.servletContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void forward(String url) throws ServletException, IOException {
|
public void forward(String url) throws ServletException, IOException {
|
||||||
throw new UnsupportedOperationException("forward");
|
throw new UnsupportedOperationException("forward");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void include(String url) throws ServletException, IOException {
|
public void include(String url) throws ServletException, IOException {
|
||||||
throw new UnsupportedOperationException("include");
|
throw new UnsupportedOperationException("include");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void include(String url, boolean flush) throws ServletException, IOException {
|
public void include(String url, boolean flush) throws ServletException, IOException {
|
||||||
throw new UnsupportedOperationException("include");
|
throw new UnsupportedOperationException("include");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handlePageException(Exception ex) throws ServletException, IOException {
|
public void handlePageException(Exception ex) throws ServletException, IOException {
|
||||||
throw new UnsupportedOperationException("handlePageException");
|
throw new UnsupportedOperationException("handlePageException");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handlePageException(Throwable ex) throws ServletException, IOException {
|
public void handlePageException(Throwable ex) throws ServletException, IOException {
|
||||||
throw new UnsupportedOperationException("handlePageException");
|
throw new UnsupportedOperationException("handlePageException");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,91 +1,91 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import javax.servlet.RequestDispatcher;
|
import javax.servlet.RequestDispatcher;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletResponseWrapper;
|
import javax.servlet.http.HttpServletResponseWrapper;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mock implementation of the {@link javax.servlet.RequestDispatcher} interface.
|
* Mock implementation of the {@link javax.servlet.RequestDispatcher} interface.
|
||||||
*
|
*
|
||||||
* <p>Used for testing the web framework; typically not necessary for
|
* <p>Used for testing the web framework; typically not necessary for
|
||||||
* testing application controllers.
|
* testing application controllers.
|
||||||
*
|
*
|
||||||
* @author Rod Johnson
|
* @author Rod Johnson
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 1.0.2
|
* @since 1.0.2
|
||||||
*/
|
*/
|
||||||
public class MockRequestDispatcher implements RequestDispatcher {
|
public class MockRequestDispatcher implements RequestDispatcher {
|
||||||
|
|
||||||
private final Log logger = LogFactory.getLog(getClass());
|
private final Log logger = LogFactory.getLog(getClass());
|
||||||
|
|
||||||
private final String url;
|
private final String url;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new MockRequestDispatcher for the given URL.
|
* Create a new MockRequestDispatcher for the given URL.
|
||||||
* @param url the URL to dispatch to.
|
* @param url the URL to dispatch to.
|
||||||
*/
|
*/
|
||||||
public MockRequestDispatcher(String url) {
|
public MockRequestDispatcher(String url) {
|
||||||
Assert.notNull(url, "URL must not be null");
|
Assert.notNull(url, "URL must not be null");
|
||||||
this.url = url;
|
this.url = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void forward(ServletRequest request, ServletResponse response) {
|
public void forward(ServletRequest request, ServletResponse response) {
|
||||||
Assert.notNull(request, "Request must not be null");
|
Assert.notNull(request, "Request must not be null");
|
||||||
Assert.notNull(response, "Response must not be null");
|
Assert.notNull(response, "Response must not be null");
|
||||||
if (response.isCommitted()) {
|
if (response.isCommitted()) {
|
||||||
throw new IllegalStateException("Cannot perform forward - response is already committed");
|
throw new IllegalStateException("Cannot perform forward - response is already committed");
|
||||||
}
|
}
|
||||||
getMockHttpServletResponse(response).setForwardedUrl(this.url);
|
getMockHttpServletResponse(response).setForwardedUrl(this.url);
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("MockRequestDispatcher: forwarding to URL [" + this.url + "]");
|
logger.debug("MockRequestDispatcher: forwarding to URL [" + this.url + "]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void include(ServletRequest request, ServletResponse response) {
|
public void include(ServletRequest request, ServletResponse response) {
|
||||||
Assert.notNull(request, "Request must not be null");
|
Assert.notNull(request, "Request must not be null");
|
||||||
Assert.notNull(response, "Response must not be null");
|
Assert.notNull(response, "Response must not be null");
|
||||||
getMockHttpServletResponse(response).setIncludedUrl(this.url);
|
getMockHttpServletResponse(response).setIncludedUrl(this.url);
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("MockRequestDispatcher: including URL [" + this.url + "]");
|
logger.debug("MockRequestDispatcher: including URL [" + this.url + "]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtain the underlying MockHttpServletResponse,
|
* Obtain the underlying MockHttpServletResponse,
|
||||||
* unwrapping {@link javax.servlet.http.HttpServletResponseWrapper} decorators if necessary.
|
* unwrapping {@link HttpServletResponseWrapper} decorators if necessary.
|
||||||
*/
|
*/
|
||||||
protected MockHttpServletResponse getMockHttpServletResponse(ServletResponse response) {
|
protected MockHttpServletResponse getMockHttpServletResponse(ServletResponse response) {
|
||||||
if (response instanceof MockHttpServletResponse) {
|
if (response instanceof MockHttpServletResponse) {
|
||||||
return (MockHttpServletResponse) response;
|
return (MockHttpServletResponse) response;
|
||||||
}
|
}
|
||||||
if (response instanceof HttpServletResponseWrapper) {
|
if (response instanceof HttpServletResponseWrapper) {
|
||||||
return getMockHttpServletResponse(((HttpServletResponseWrapper) response).getResponse());
|
return getMockHttpServletResponse(((HttpServletResponseWrapper) response).getResponse());
|
||||||
}
|
}
|
||||||
throw new IllegalArgumentException("MockRequestDispatcher requires MockHttpServletResponse");
|
throw new IllegalArgumentException("MockRequestDispatcher requires MockHttpServletResponse");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,102 +1,103 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2006 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.util.Enumeration;
|
import java.util.Collections;
|
||||||
import java.util.Properties;
|
import java.util.Enumeration;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import javax.servlet.ServletConfig;
|
import java.util.Map;
|
||||||
import javax.servlet.ServletContext;
|
import javax.servlet.ServletConfig;
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
import org.springframework.util.Assert;
|
||||||
/**
|
|
||||||
* Mock implementation of the {@link javax.servlet.ServletConfig} interface.
|
/**
|
||||||
*
|
* Mock implementation of the {@link javax.servlet.ServletConfig} interface.
|
||||||
* <p>Used for testing the web framework; typically not necessary for
|
*
|
||||||
* testing application controllers.
|
* <p>Used for testing the web framework; typically not necessary for
|
||||||
*
|
* testing application controllers.
|
||||||
* @author Rod Johnson
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Rod Johnson
|
||||||
* @since 1.0.2
|
* @author Juergen Hoeller
|
||||||
*/
|
* @since 1.0.2
|
||||||
public class MockServletConfig implements ServletConfig {
|
*/
|
||||||
|
public class MockServletConfig implements ServletConfig {
|
||||||
private final ServletContext servletContext;
|
|
||||||
|
private final ServletContext servletContext;
|
||||||
private final String servletName;
|
|
||||||
|
private final String servletName;
|
||||||
private final Properties initParameters = new Properties();
|
|
||||||
|
private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new MockServletConfig with a default {@link org.springframework.mock.web.MockServletContext}.
|
/**
|
||||||
*/
|
* Create a new MockServletConfig with a default {@link MockServletContext}.
|
||||||
public MockServletConfig() {
|
*/
|
||||||
this(null, "");
|
public MockServletConfig() {
|
||||||
}
|
this(null, "");
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Create a new MockServletConfig with a default {@link org.springframework.mock.web.MockServletContext}.
|
/**
|
||||||
* @param servletName the name of the servlet
|
* Create a new MockServletConfig with a default {@link MockServletContext}.
|
||||||
*/
|
* @param servletName the name of the servlet
|
||||||
public MockServletConfig(String servletName) {
|
*/
|
||||||
this(null, servletName);
|
public MockServletConfig(String servletName) {
|
||||||
}
|
this(null, servletName);
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Create a new MockServletConfig.
|
/**
|
||||||
* @param servletContext the ServletContext that the servlet runs in
|
* Create a new MockServletConfig.
|
||||||
*/
|
* @param servletContext the ServletContext that the servlet runs in
|
||||||
public MockServletConfig(ServletContext servletContext) {
|
*/
|
||||||
this(servletContext, "");
|
public MockServletConfig(ServletContext servletContext) {
|
||||||
}
|
this(servletContext, "");
|
||||||
|
}
|
||||||
/**
|
|
||||||
* Create a new MockServletConfig.
|
/**
|
||||||
* @param servletContext the ServletContext that the servlet runs in
|
* Create a new MockServletConfig.
|
||||||
* @param servletName the name of the servlet
|
* @param servletContext the ServletContext that the servlet runs in
|
||||||
*/
|
* @param servletName the name of the servlet
|
||||||
public MockServletConfig(ServletContext servletContext, String servletName) {
|
*/
|
||||||
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
public MockServletConfig(ServletContext servletContext, String servletName) {
|
||||||
this.servletName = servletName;
|
this.servletContext = (servletContext != null ? servletContext : new MockServletContext());
|
||||||
}
|
this.servletName = servletName;
|
||||||
|
}
|
||||||
|
|
||||||
public String getServletName() {
|
|
||||||
return servletName;
|
public String getServletName() {
|
||||||
}
|
return this.servletName;
|
||||||
|
}
|
||||||
public ServletContext getServletContext() {
|
|
||||||
return servletContext;
|
public ServletContext getServletContext() {
|
||||||
}
|
return this.servletContext;
|
||||||
|
}
|
||||||
public void addInitParameter(String name, String value) {
|
|
||||||
Assert.notNull(name, "Parameter name must not be null");
|
public void addInitParameter(String name, String value) {
|
||||||
this.initParameters.setProperty(name, value);
|
Assert.notNull(name, "Parameter name must not be null");
|
||||||
}
|
this.initParameters.put(name, value);
|
||||||
|
}
|
||||||
public String getInitParameter(String name) {
|
|
||||||
Assert.notNull(name, "Parameter name must not be null");
|
public String getInitParameter(String name) {
|
||||||
return this.initParameters.getProperty(name);
|
Assert.notNull(name, "Parameter name must not be null");
|
||||||
}
|
return this.initParameters.get(name);
|
||||||
|
}
|
||||||
public Enumeration getInitParameterNames() {
|
|
||||||
return this.initParameters.keys();
|
public Enumeration<String> getInitParameterNames() {
|
||||||
}
|
return Collections.enumeration(this.initParameters.keySet());
|
||||||
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,356 +1,355 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
* You may obtain a copy of the License at
|
* You may obtain a copy of the License at
|
||||||
*
|
*
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
*
|
*
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Hashtable;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Properties;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import javax.activation.FileTypeMap;
|
||||||
import javax.activation.FileTypeMap;
|
import javax.servlet.RequestDispatcher;
|
||||||
import javax.servlet.RequestDispatcher;
|
import javax.servlet.Servlet;
|
||||||
import javax.servlet.Servlet;
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
import org.springframework.core.io.DefaultResourceLoader;
|
||||||
import org.springframework.core.io.DefaultResourceLoader;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.ResourceLoader;
|
||||||
import org.springframework.core.io.ResourceLoader;
|
import org.springframework.util.Assert;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.ObjectUtils;
|
||||||
import org.springframework.util.ObjectUtils;
|
import org.springframework.web.util.WebUtils;
|
||||||
import org.springframework.web.util.WebUtils;
|
|
||||||
|
/**
|
||||||
/**
|
* Mock implementation of the {@link javax.servlet.ServletContext} interface.
|
||||||
* Mock implementation of the {@link javax.servlet.ServletContext} interface.
|
*
|
||||||
*
|
* <p>Used for testing the Spring web framework; only rarely necessary for testing
|
||||||
* <p>Used for testing the Spring web framework; only rarely necessary for testing
|
* application controllers. As long as application components don't explicitly
|
||||||
* application controllers. As long as application components don't explicitly
|
* access the ServletContext, ClassPathXmlApplicationContext or
|
||||||
* access the ServletContext, ClassPathXmlApplicationContext or
|
* FileSystemXmlApplicationContext can be used to load the context files for testing,
|
||||||
* FileSystemXmlApplicationContext can be used to load the context files for testing,
|
* even for DispatcherServlet context definitions.
|
||||||
* even for DispatcherServlet context definitions.
|
*
|
||||||
*
|
* <p>For setting up a full WebApplicationContext in a test environment, you can
|
||||||
* <p>For setting up a full WebApplicationContext in a test environment, you can
|
* use XmlWebApplicationContext (or GenericWebApplicationContext), passing in an
|
||||||
* use XmlWebApplicationContext (or GenericWebApplicationContext), passing in an
|
* appropriate MockServletContext instance. You might want to configure your
|
||||||
* appropriate MockServletContext instance. You might want to configure your
|
* MockServletContext with a FileSystemResourceLoader in that case, to make your
|
||||||
* MockServletContext with a FileSystemResourceLoader in that case, to make your
|
* resource paths interpreted as relative file system locations.
|
||||||
* resource paths interpreted as relative file system locations.
|
*
|
||||||
*
|
* <p>A common setup is to point your JVM working directory to the root of your
|
||||||
* <p>A common setup is to point your JVM working directory to the root of your
|
* web application directory, in combination with filesystem-based resource loading.
|
||||||
* web application directory, in combination with filesystem-based resource loading.
|
* This allows to load the context files as used in the web application, with
|
||||||
* This allows to load the context files as used in the web application, with
|
* relative paths getting interpreted correctly. Such a setup will work with both
|
||||||
* relative paths getting interpreted correctly. Such a setup will work with both
|
* FileSystemXmlApplicationContext (which will load straight from the file system)
|
||||||
* FileSystemXmlApplicationContext (which will load straight from the file system)
|
* and XmlWebApplicationContext with an underlying MockServletContext (as long as
|
||||||
* and XmlWebApplicationContext with an underlying MockServletContext (as long as
|
* the MockServletContext has been configured with a FileSystemResourceLoader).
|
||||||
* the MockServletContext has been configured with a FileSystemResourceLoader).
|
*
|
||||||
*
|
* @author Rod Johnson
|
||||||
* @author Rod Johnson
|
* @author Juergen Hoeller
|
||||||
* @author Juergen Hoeller
|
* @since 1.0.2
|
||||||
* @since 1.0.2
|
* @see #MockServletContext(org.springframework.core.io.ResourceLoader)
|
||||||
* @see #MockServletContext(org.springframework.core.io.ResourceLoader)
|
* @see org.springframework.web.context.support.XmlWebApplicationContext
|
||||||
* @see org.springframework.web.context.support.XmlWebApplicationContext
|
* @see org.springframework.web.context.support.GenericWebApplicationContext
|
||||||
* @see org.springframework.web.context.support.GenericWebApplicationContext
|
* @see org.springframework.context.support.ClassPathXmlApplicationContext
|
||||||
* @see org.springframework.context.support.ClassPathXmlApplicationContext
|
* @see org.springframework.context.support.FileSystemXmlApplicationContext
|
||||||
* @see org.springframework.context.support.FileSystemXmlApplicationContext
|
*/
|
||||||
*/
|
public class MockServletContext implements ServletContext {
|
||||||
public class MockServletContext implements ServletContext {
|
|
||||||
|
private static final String TEMP_DIR_SYSTEM_PROPERTY = "java.io.tmpdir";
|
||||||
private static final String TEMP_DIR_SYSTEM_PROPERTY = "java.io.tmpdir";
|
|
||||||
|
|
||||||
|
private final Log logger = LogFactory.getLog(getClass());
|
||||||
private final Log logger = LogFactory.getLog(getClass());
|
|
||||||
|
private final ResourceLoader resourceLoader;
|
||||||
private final ResourceLoader resourceLoader;
|
|
||||||
|
private final String resourceBasePath;
|
||||||
private final String resourceBasePath;
|
|
||||||
|
private String contextPath = "";
|
||||||
private String contextPath = "";
|
|
||||||
|
private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>();
|
||||||
private final Map contexts = new HashMap();
|
|
||||||
|
private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
|
||||||
private final Properties initParameters = new Properties();
|
|
||||||
|
private final Map<String, Object> attributes = new LinkedHashMap<String, Object>();
|
||||||
private final Hashtable attributes = new Hashtable();
|
|
||||||
|
private String servletContextName = "MockServletContext";
|
||||||
private String servletContextName = "MockServletContext";
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Create a new MockServletContext, using no base path and a
|
||||||
* Create a new MockServletContext, using no base path and a
|
* DefaultResourceLoader (i.e. the classpath root as WAR root).
|
||||||
* DefaultResourceLoader (i.e. the classpath root as WAR root).
|
* @see org.springframework.core.io.DefaultResourceLoader
|
||||||
* @see org.springframework.core.io.DefaultResourceLoader
|
*/
|
||||||
*/
|
public MockServletContext() {
|
||||||
public MockServletContext() {
|
this("", null);
|
||||||
this("", null);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a new MockServletContext, using a DefaultResourceLoader.
|
||||||
* Create a new MockServletContext, using a DefaultResourceLoader.
|
* @param resourceBasePath the WAR root directory (should not end with a slash)
|
||||||
* @param resourceBasePath the WAR root directory (should not end with a slash)
|
* @see org.springframework.core.io.DefaultResourceLoader
|
||||||
* @see org.springframework.core.io.DefaultResourceLoader
|
*/
|
||||||
*/
|
public MockServletContext(String resourceBasePath) {
|
||||||
public MockServletContext(String resourceBasePath) {
|
this(resourceBasePath, null);
|
||||||
this(resourceBasePath, null);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a new MockServletContext, using the specified ResourceLoader
|
||||||
* Create a new MockServletContext, using the specified ResourceLoader
|
* and no base path.
|
||||||
* and no base path.
|
* @param resourceLoader the ResourceLoader to use (or null for the default)
|
||||||
* @param resourceLoader the ResourceLoader to use (or null for the default)
|
*/
|
||||||
*/
|
public MockServletContext(ResourceLoader resourceLoader) {
|
||||||
public MockServletContext(ResourceLoader resourceLoader) {
|
this("", resourceLoader);
|
||||||
this("", resourceLoader);
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
/**
|
* Create a new MockServletContext.
|
||||||
* Create a new MockServletContext.
|
* @param resourceBasePath the WAR root directory (should not end with a slash)
|
||||||
* @param resourceBasePath the WAR root directory (should not end with a slash)
|
* @param resourceLoader the ResourceLoader to use (or null for the default)
|
||||||
* @param resourceLoader the ResourceLoader to use (or null for the default)
|
*/
|
||||||
*/
|
public MockServletContext(String resourceBasePath, ResourceLoader resourceLoader) {
|
||||||
public MockServletContext(String resourceBasePath, ResourceLoader resourceLoader) {
|
this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader());
|
||||||
this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader());
|
this.resourceBasePath = (resourceBasePath != null ? resourceBasePath : "");
|
||||||
this.resourceBasePath = (resourceBasePath != null ? resourceBasePath : "");
|
|
||||||
|
// Use JVM temp dir as ServletContext temp dir.
|
||||||
// Use JVM temp dir as ServletContext temp dir.
|
String tempDir = System.getProperty(TEMP_DIR_SYSTEM_PROPERTY);
|
||||||
String tempDir = System.getProperty(TEMP_DIR_SYSTEM_PROPERTY);
|
if (tempDir != null) {
|
||||||
if (tempDir != null) {
|
this.attributes.put(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File(tempDir));
|
||||||
this.attributes.put(WebUtils.TEMP_DIR_CONTEXT_ATTRIBUTE, new File(tempDir));
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Build a full resource location for the given path,
|
||||||
* Build a full resource location for the given path,
|
* prepending the resource base path of this MockServletContext.
|
||||||
* prepending the resource base path of this MockServletContext.
|
* @param path the path as specified
|
||||||
* @param path the path as specified
|
* @return the full resource path
|
||||||
* @return the full resource path
|
*/
|
||||||
*/
|
protected String getResourceLocation(String path) {
|
||||||
protected String getResourceLocation(String path) {
|
if (!path.startsWith("/")) {
|
||||||
if (!path.startsWith("/")) {
|
path = "/" + path;
|
||||||
path = "/" + path;
|
}
|
||||||
}
|
return this.resourceBasePath + path;
|
||||||
return this.resourceBasePath + path;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
public void setContextPath(String contextPath) {
|
||||||
public void setContextPath(String contextPath) {
|
this.contextPath = (contextPath != null ? contextPath : "");
|
||||||
this.contextPath = (contextPath != null ? contextPath : "");
|
}
|
||||||
}
|
|
||||||
|
/* This is a Servlet API 2.5 method. */
|
||||||
/* This is a Servlet API 2.5 method. */
|
public String getContextPath() {
|
||||||
public String getContextPath() {
|
return this.contextPath;
|
||||||
return this.contextPath;
|
}
|
||||||
}
|
|
||||||
|
public void registerContext(String contextPath, ServletContext context) {
|
||||||
public void registerContext(String contextPath, ServletContext context) {
|
this.contexts.put(contextPath, context);
|
||||||
this.contexts.put(contextPath, context);
|
}
|
||||||
}
|
|
||||||
|
public ServletContext getContext(String contextPath) {
|
||||||
public ServletContext getContext(String contextPath) {
|
if (this.contextPath.equals(contextPath)) {
|
||||||
if (this.contextPath.equals(contextPath)) {
|
return this;
|
||||||
return this;
|
}
|
||||||
}
|
return this.contexts.get(contextPath);
|
||||||
return (ServletContext) this.contexts.get(contextPath);
|
}
|
||||||
}
|
|
||||||
|
public int getMajorVersion() {
|
||||||
public int getMajorVersion() {
|
return 2;
|
||||||
return 2;
|
}
|
||||||
}
|
|
||||||
|
public int getMinorVersion() {
|
||||||
public int getMinorVersion() {
|
return 5;
|
||||||
return 5;
|
}
|
||||||
}
|
|
||||||
|
public String getMimeType(String filePath) {
|
||||||
public String getMimeType(String filePath) {
|
return MimeTypeResolver.getMimeType(filePath);
|
||||||
return MimeTypeResolver.getMimeType(filePath);
|
}
|
||||||
}
|
|
||||||
|
public Set<String> getResourcePaths(String path) {
|
||||||
public Set getResourcePaths(String path) {
|
String actualPath = (path.endsWith("/") ? path : path + "/");
|
||||||
String actualPath = (path.endsWith("/") ? path : path + "/");
|
Resource resource = this.resourceLoader.getResource(getResourceLocation(actualPath));
|
||||||
Resource resource = this.resourceLoader.getResource(getResourceLocation(actualPath));
|
try {
|
||||||
try {
|
File file = resource.getFile();
|
||||||
File file = resource.getFile();
|
String[] fileList = file.list();
|
||||||
String[] fileList = file.list();
|
if (ObjectUtils.isEmpty(fileList)) {
|
||||||
if (ObjectUtils.isEmpty(fileList)) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
Set<String> resourcePaths = new LinkedHashSet<String>(fileList.length);
|
||||||
Set resourcePaths = new LinkedHashSet(fileList.length);
|
for (String fileEntry : fileList) {
|
||||||
for (int i = 0; i < fileList.length; i++) {
|
String resultPath = actualPath + fileEntry;
|
||||||
String resultPath = actualPath + fileList[i];
|
if (resource.createRelative(fileEntry).getFile().isDirectory()) {
|
||||||
if (resource.createRelative(fileList[i]).getFile().isDirectory()) {
|
resultPath += "/";
|
||||||
resultPath += "/";
|
}
|
||||||
}
|
resourcePaths.add(resultPath);
|
||||||
resourcePaths.add(resultPath);
|
}
|
||||||
}
|
return resourcePaths;
|
||||||
return resourcePaths;
|
}
|
||||||
}
|
catch (IOException ex) {
|
||||||
catch (IOException ex) {
|
logger.warn("Couldn't get resource paths for " + resource, ex);
|
||||||
logger.warn("Couldn't get resource paths for " + resource, ex);
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public URL getResource(String path) throws MalformedURLException {
|
||||||
public URL getResource(String path) throws MalformedURLException {
|
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
||||||
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
if (!resource.exists()) {
|
||||||
if (!resource.exists()) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
try {
|
||||||
try {
|
return resource.getURL();
|
||||||
return resource.getURL();
|
}
|
||||||
}
|
catch (MalformedURLException ex) {
|
||||||
catch (MalformedURLException ex) {
|
throw ex;
|
||||||
throw ex;
|
}
|
||||||
}
|
catch (IOException ex) {
|
||||||
catch (IOException ex) {
|
logger.warn("Couldn't get URL for " + resource, ex);
|
||||||
logger.warn("Couldn't get URL for " + resource, ex);
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public InputStream getResourceAsStream(String path) {
|
||||||
public InputStream getResourceAsStream(String path) {
|
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
||||||
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
if (!resource.exists()) {
|
||||||
if (!resource.exists()) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
try {
|
||||||
try {
|
return resource.getInputStream();
|
||||||
return resource.getInputStream();
|
}
|
||||||
}
|
catch (IOException ex) {
|
||||||
catch (IOException ex) {
|
logger.warn("Couldn't open InputStream for " + resource, ex);
|
||||||
logger.warn("Couldn't open InputStream for " + resource, ex);
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public RequestDispatcher getRequestDispatcher(String path) {
|
||||||
public RequestDispatcher getRequestDispatcher(String path) {
|
if (!path.startsWith("/")) {
|
||||||
if (!path.startsWith("/")) {
|
throw new IllegalArgumentException("RequestDispatcher path at ServletContext level must start with '/'");
|
||||||
throw new IllegalArgumentException("RequestDispatcher path at ServletContext level must start with '/'");
|
}
|
||||||
}
|
return new MockRequestDispatcher(path);
|
||||||
return new MockRequestDispatcher(path);
|
}
|
||||||
}
|
|
||||||
|
public RequestDispatcher getNamedDispatcher(String path) {
|
||||||
public RequestDispatcher getNamedDispatcher(String path) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
|
||||||
|
public Servlet getServlet(String name) {
|
||||||
public Servlet getServlet(String name) {
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
|
||||||
|
public Enumeration<Servlet> getServlets() {
|
||||||
public Enumeration getServlets() {
|
return Collections.enumeration(new HashSet<Servlet>());
|
||||||
return Collections.enumeration(Collections.EMPTY_SET);
|
}
|
||||||
}
|
|
||||||
|
public Enumeration<String> getServletNames() {
|
||||||
public Enumeration getServletNames() {
|
return Collections.enumeration(new HashSet<String>());
|
||||||
return Collections.enumeration(Collections.EMPTY_SET);
|
}
|
||||||
}
|
|
||||||
|
public void log(String message) {
|
||||||
public void log(String message) {
|
logger.info(message);
|
||||||
logger.info(message);
|
}
|
||||||
}
|
|
||||||
|
public void log(Exception ex, String message) {
|
||||||
public void log(Exception ex, String message) {
|
logger.info(message, ex);
|
||||||
logger.info(message, ex);
|
}
|
||||||
}
|
|
||||||
|
public void log(String message, Throwable ex) {
|
||||||
public void log(String message, Throwable ex) {
|
logger.info(message, ex);
|
||||||
logger.info(message, ex);
|
}
|
||||||
}
|
|
||||||
|
public String getRealPath(String path) {
|
||||||
public String getRealPath(String path) {
|
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
||||||
Resource resource = this.resourceLoader.getResource(getResourceLocation(path));
|
try {
|
||||||
try {
|
return resource.getFile().getAbsolutePath();
|
||||||
return resource.getFile().getAbsolutePath();
|
}
|
||||||
}
|
catch (IOException ex) {
|
||||||
catch (IOException ex) {
|
logger.warn("Couldn't determine real path of resource " + resource, ex);
|
||||||
logger.warn("Couldn't determine real path of resource " + resource, ex);
|
return null;
|
||||||
return null;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public String getServerInfo() {
|
||||||
public String getServerInfo() {
|
return "MockServletContext";
|
||||||
return "MockServletContext";
|
}
|
||||||
}
|
|
||||||
|
public String getInitParameter(String name) {
|
||||||
public String getInitParameter(String name) {
|
Assert.notNull(name, "Parameter name must not be null");
|
||||||
Assert.notNull(name, "Parameter name must not be null");
|
return this.initParameters.get(name);
|
||||||
return this.initParameters.getProperty(name);
|
}
|
||||||
}
|
|
||||||
|
public void addInitParameter(String name, String value) {
|
||||||
public void addInitParameter(String name, String value) {
|
Assert.notNull(name, "Parameter name must not be null");
|
||||||
Assert.notNull(name, "Parameter name must not be null");
|
this.initParameters.put(name, value);
|
||||||
this.initParameters.setProperty(name, value);
|
}
|
||||||
}
|
|
||||||
|
public Enumeration<String> getInitParameterNames() {
|
||||||
public Enumeration getInitParameterNames() {
|
return Collections.enumeration(this.initParameters.keySet());
|
||||||
return this.initParameters.keys();
|
}
|
||||||
}
|
|
||||||
|
public Object getAttribute(String name) {
|
||||||
public Object getAttribute(String name) {
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
return this.attributes.get(name);
|
||||||
return this.attributes.get(name);
|
}
|
||||||
}
|
|
||||||
|
public Enumeration<String> getAttributeNames() {
|
||||||
public Enumeration getAttributeNames() {
|
return Collections.enumeration(this.attributes.keySet());
|
||||||
return this.attributes.keys();
|
}
|
||||||
}
|
|
||||||
|
public void setAttribute(String name, Object value) {
|
||||||
public void setAttribute(String name, Object value) {
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
if (value != null) {
|
||||||
if (value != null) {
|
this.attributes.put(name, value);
|
||||||
this.attributes.put(name, value);
|
}
|
||||||
}
|
else {
|
||||||
else {
|
this.attributes.remove(name);
|
||||||
this.attributes.remove(name);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public void removeAttribute(String name) {
|
||||||
public void removeAttribute(String name) {
|
Assert.notNull(name, "Attribute name must not be null");
|
||||||
Assert.notNull(name, "Attribute name must not be null");
|
this.attributes.remove(name);
|
||||||
this.attributes.remove(name);
|
}
|
||||||
}
|
|
||||||
|
public void setServletContextName(String servletContextName) {
|
||||||
public void setServletContextName(String servletContextName) {
|
this.servletContextName = servletContextName;
|
||||||
this.servletContextName = servletContextName;
|
}
|
||||||
}
|
|
||||||
|
public String getServletContextName() {
|
||||||
public String getServletContextName() {
|
return this.servletContextName;
|
||||||
return this.servletContextName;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
/**
|
||||||
/**
|
* Inner factory class used to just introduce a Java Activation Framework
|
||||||
* Inner factory class used to just introduce a Java Activation Framework
|
* dependency when actually asked to resolve a MIME type.
|
||||||
* dependency when actually asked to resolve a MIME type.
|
*/
|
||||||
*/
|
private static class MimeTypeResolver {
|
||||||
private static class MimeTypeResolver {
|
|
||||||
|
public static String getMimeType(String filePath) {
|
||||||
public static String getMimeType(String filePath) {
|
return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
|
||||||
return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2007 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
package org.springframework.mock.web;
|
package org.springframework.mock.web;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
import javax.servlet.Servlet;
|
import javax.servlet.Servlet;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue