consistent mocks between modules

This commit is contained in:
Juergen Hoeller 2010-08-15 22:02:40 +00:00
parent 19fcbeafb4
commit 1841b14b21
7 changed files with 269 additions and 43 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2010 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.
@ -18,13 +18,12 @@ package org.springframework.mock.web;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
@ -44,7 +43,8 @@ import org.springframework.web.multipart.MultipartHttpServletRequest;
*/ */
public class MockMultipartHttpServletRequest extends MockHttpServletRequest implements MultipartHttpServletRequest { public class MockMultipartHttpServletRequest extends MockHttpServletRequest implements MultipartHttpServletRequest {
private final MultiValueMap<String, MultipartFile> multipartFiles = new LinkedMultiValueMap<String, MultipartFile>(); private final MultiValueMap<String, MultipartFile> multipartFiles =
new LinkedMultiValueMap<String, MultipartFile>();
/** /**
@ -58,7 +58,7 @@ public class MockMultipartHttpServletRequest extends MockHttpServletRequest impl
} }
public Iterator<String> getFileNames() { public Iterator<String> getFileNames() {
return getFileMap().keySet().iterator(); return this.multipartFiles.keySet().iterator();
} }
public MultipartFile getFile(String name) { public MultipartFile getFile(String name) {
@ -76,11 +76,11 @@ public class MockMultipartHttpServletRequest extends MockHttpServletRequest impl
} }
public Map<String, MultipartFile> getFileMap() { public Map<String, MultipartFile> getFileMap() {
return Collections.unmodifiableMap(this.multipartFiles.toSingleValueMap()); return this.multipartFiles.toSingleValueMap();
} }
public MultiValueMap<String, MultipartFile> getMultiFileMap() { public MultiValueMap<String, MultipartFile> getMultiFileMap() {
return new LinkedMultiValueMap<String, MultipartFile>(Collections.unmodifiableMap(this.multipartFiles)); return new LinkedMultiValueMap<String, MultipartFile>(this.multipartFiles);
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2010 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.
@ -89,6 +89,8 @@ public class MockServletContext implements ServletContext {
private String contextPath = ""; private String contextPath = "";
private int minorVersion = 5;
private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>(); private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>();
private final Map<String, String> initParameters = new LinkedHashMap<String, String>(); private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
@ -97,7 +99,6 @@ public class MockServletContext implements ServletContext {
private String servletContextName = "MockServletContext"; private String servletContextName = "MockServletContext";
private int minorVersion = 5;
/** /**
* Create a new MockServletContext, using no base path and a * Create a new MockServletContext, using no base path and a
@ -181,6 +182,13 @@ public class MockServletContext implements ServletContext {
return 2; return 2;
} }
public void setMinorVersion(int minorVersion) {
if (minorVersion < 3 || minorVersion > 5) {
throw new IllegalArgumentException("Only Servlet minor versions between 3 and 5 are supported");
}
this.minorVersion = minorVersion;
}
public int getMinorVersion() { public int getMinorVersion() {
return this.minorVersion; return this.minorVersion;
} }
@ -341,11 +349,6 @@ public class MockServletContext implements ServletContext {
return this.servletContextName; return this.servletContextName;
} }
public void setMinorVersion(int minorVersion) {
if (minorVersion <3 || minorVersion > 5)
throw new IllegalArgumentException("Only Servlet minor versions between 3 and 5 are supported");
this.minorVersion = minorVersion;
}
/** /**
* Inner factory class used to just introduce a Java Activation Framework * Inner factory class used to just introduce a Java Activation Framework
@ -357,4 +360,5 @@ public class MockServletContext implements ServletContext {
return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath); return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
} }
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2010 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.
@ -18,13 +18,12 @@ package org.springframework.mock.web.portlet;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.portlet.multipart.MultipartActionRequest; import org.springframework.web.portlet.multipart.MultipartActionRequest;
@ -43,7 +42,8 @@ import org.springframework.web.portlet.multipart.MultipartActionRequest;
*/ */
public class MockMultipartActionRequest extends MockActionRequest implements MultipartActionRequest { public class MockMultipartActionRequest extends MockActionRequest implements MultipartActionRequest {
private final MultiValueMap<String, MultipartFile> multipartFiles = new LinkedMultiValueMap<String, MultipartFile>(); private final MultiValueMap<String, MultipartFile> multipartFiles =
new LinkedMultiValueMap<String, MultipartFile>();
/** /**
@ -57,7 +57,7 @@ public class MockMultipartActionRequest extends MockActionRequest implements Mul
} }
public Iterator<String> getFileNames() { public Iterator<String> getFileNames() {
return getFileMap().keySet().iterator(); return this.multipartFiles.keySet().iterator();
} }
public MultipartFile getFile(String name) { public MultipartFile getFile(String name) {
@ -75,11 +75,11 @@ public class MockMultipartActionRequest extends MockActionRequest implements Mul
} }
public Map<String, MultipartFile> getFileMap() { public Map<String, MultipartFile> getFileMap() {
return Collections.unmodifiableMap(this.multipartFiles.toSingleValueMap()); return this.multipartFiles.toSingleValueMap();
} }
public MultiValueMap<String, MultipartFile> getMultiFileMap() { public MultiValueMap<String, MultipartFile> getMultiFileMap() {
return new LinkedMultiValueMap<String, MultipartFile>(Collections.unmodifiableMap(this.multipartFiles)); return new LinkedMultiValueMap<String, MultipartFile>(this.multipartFiles);
} }
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2010 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.
@ -18,13 +18,12 @@ package org.springframework.mock.web.portlet;
import java.util.Collections; import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.List; import java.util.List;
import java.util.Map;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.MultiValueMap;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.portlet.multipart.MultipartActionRequest; import org.springframework.web.portlet.multipart.MultipartActionRequest;
@ -43,7 +42,8 @@ import org.springframework.web.portlet.multipart.MultipartActionRequest;
*/ */
public class MockMultipartActionRequest extends MockActionRequest implements MultipartActionRequest { public class MockMultipartActionRequest extends MockActionRequest implements MultipartActionRequest {
private final MultiValueMap<String, MultipartFile> multipartFiles = new LinkedMultiValueMap<String, MultipartFile>(); private final MultiValueMap<String, MultipartFile> multipartFiles =
new LinkedMultiValueMap<String, MultipartFile>();
/** /**
@ -57,7 +57,7 @@ public class MockMultipartActionRequest extends MockActionRequest implements Mul
} }
public Iterator<String> getFileNames() { public Iterator<String> getFileNames() {
return getFileMap().keySet().iterator(); return this.multipartFiles.keySet().iterator();
} }
public MultipartFile getFile(String name) { public MultipartFile getFile(String name) {
@ -75,10 +75,11 @@ public class MockMultipartActionRequest extends MockActionRequest implements Mul
} }
public Map<String, MultipartFile> getFileMap() { public Map<String, MultipartFile> getFileMap() {
return Collections.unmodifiableMap(this.multipartFiles.toSingleValueMap()); return this.multipartFiles.toSingleValueMap();
} }
public MultiValueMap<String, MultipartFile> getMultiFileMap() { public MultiValueMap<String, MultipartFile> getMultiFileMap() {
return new LinkedMultiValueMap<String, MultipartFile>(Collections.unmodifiableMap(this.multipartFiles)); return new LinkedMultiValueMap<String, MultipartFile>(this.multipartFiles);
} }
} }

View File

@ -0,0 +1,132 @@
/*
* Copyright 2002-2010 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 java.io.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 java.io.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);
}
}

View File

@ -0,0 +1,86 @@
/*
* Copyright 2002-2010 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.List;
import java.util.Map;
import org.springframework.util.Assert;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
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 org.springframework.mock.web.MockMultipartFile} can be used to populate these mock requests
* with files.
*
* @author Juergen Hoeller
* @author Eric Crampton
* @author Arjen Poutsma
* @since 2.0
* @see org.springframework.mock.web.MockMultipartFile
*/
public class MockMultipartHttpServletRequest extends MockHttpServletRequest implements MultipartHttpServletRequest {
private final MultiValueMap<String, MultipartFile> multipartFiles =
new LinkedMultiValueMap<String, MultipartFile>();
/**
* Add a file to this request. The parameter name from the multipart
* form is taken from the {@link org.springframework.web.multipart.MultipartFile#getName()}.
* @param file multipart file to be added
*/
public void addFile(MultipartFile file) {
Assert.notNull(file, "MultipartFile must not be null");
this.multipartFiles.add(file.getName(), file);
}
public Iterator<String> getFileNames() {
return this.multipartFiles.keySet().iterator();
}
public MultipartFile getFile(String name) {
return this.multipartFiles.getFirst(name);
}
public List<MultipartFile> getFiles(String name) {
List<MultipartFile> multipartFiles = this.multipartFiles.get(name);
if (multipartFiles != null) {
return multipartFiles;
}
else {
return Collections.emptyList();
}
}
public Map<String, MultipartFile> getFileMap() {
return this.multipartFiles.toSingleValueMap();
}
public MultiValueMap<String, MultipartFile> getMultiFileMap() {
return new LinkedMultiValueMap<String, MultipartFile>(this.multipartFiles);
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2009 the original author or authors. * Copyright 2002-2010 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.
@ -89,6 +89,8 @@ public class MockServletContext implements ServletContext {
private String contextPath = ""; private String contextPath = "";
private int minorVersion = 5;
private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>(); private final Map<String, ServletContext> contexts = new HashMap<String, ServletContext>();
private final Map<String, String> initParameters = new LinkedHashMap<String, String>(); private final Map<String, String> initParameters = new LinkedHashMap<String, String>();
@ -97,8 +99,6 @@ public class MockServletContext implements ServletContext {
private String servletContextName = "MockServletContext"; private String servletContextName = "MockServletContext";
private int minorVersion = 5;
/** /**
* Create a new MockServletContext, using no base path and a * Create a new MockServletContext, using no base path and a
@ -182,8 +182,15 @@ public class MockServletContext implements ServletContext {
return 2; return 2;
} }
public void setMinorVersion(int minorVersion) {
if (minorVersion < 3 || minorVersion > 5) {
throw new IllegalArgumentException("Only Servlet minor versions between 3 and 5 are supported");
}
this.minorVersion = minorVersion;
}
public int getMinorVersion() { public int getMinorVersion() {
return minorVersion; return this.minorVersion;
} }
public String getMimeType(String filePath) { public String getMimeType(String filePath) {
@ -342,11 +349,6 @@ public class MockServletContext implements ServletContext {
return this.servletContextName; return this.servletContextName;
} }
public void setMinorVersion(int minorVersion) {
if (minorVersion <3 || minorVersion > 5)
throw new IllegalArgumentException("Only Servlet minor versions between 3 and 5 are supported");
this.minorVersion = minorVersion;
}
/** /**
* Inner factory class used to just introduce a Java Activation Framework * Inner factory class used to just introduce a Java Activation Framework
@ -358,4 +360,5 @@ public class MockServletContext implements ServletContext {
return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath); return FileTypeMap.getDefaultFileTypeMap().getContentType(filePath);
} }
} }
} }