Polishing contribution

Closes gh-31924
This commit is contained in:
rstoyanchev
2024-03-11 16:09:26 +00:00
parent 667e30f580
commit 282ee02419
2 changed files with 62 additions and 41 deletions

View File

@@ -19,6 +19,8 @@ package org.springframework.test.web.client.match;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
@@ -60,7 +62,12 @@ import static org.springframework.test.util.AssertionErrors.assertTrue;
*/
public class ContentRequestMatchers {
private static final String DEFAULT_ENCODING = "UTF-8";
/**
* The encoding for parsing multipart content when the sender hasn't specified it.
* @see DiskFileItemFactory#setDefaultCharset(String)
*/
private static final Charset DEFAULT_MULTIPART_ENCODING = StandardCharsets.UTF_8;
private final XmlExpectationsHelper xmlHelper;
@@ -206,7 +213,15 @@ public class ContentRequestMatchers {
* @since 5.3
*/
public RequestMatcher multipartData(MultiValueMap<String, ?> expectedMap) {
return multipartData(expectedMap, true);
return multipartData(expectedMap, DEFAULT_MULTIPART_ENCODING, true);
}
/**
* Variant of {@link #multipartData(MultiValueMap)} with a defaultCharset.
* @since 6.2
*/
public RequestMatcher multipartData(MultiValueMap<String, ?> expectedMap, Charset defaultCharset) {
return multipartData(expectedMap, defaultCharset, true);
}
/**
@@ -221,13 +236,15 @@ public class ContentRequestMatchers {
public RequestMatcher multipartDataContains(Map<String, ?> expectedMap) {
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(expectedMap.size());
expectedMap.forEach(map::add);
return multipartData(map, false);
return multipartData(map, DEFAULT_MULTIPART_ENCODING, false);
}
@SuppressWarnings("ConstantConditions")
private RequestMatcher multipartData(MultiValueMap<String, ?> expectedMap, boolean containsExactly) {
private RequestMatcher multipartData(
MultiValueMap<String, ?> expectedMap, Charset defaultCharset, boolean containsExactly) {
return request -> {
MultiValueMap<String, ?> actualMap = MultipartHelper.parse((MockClientHttpRequest) request);
MultiValueMap<String, ?> actualMap = MultipartHelper.parse((MockClientHttpRequest) request, defaultCharset);
if (containsExactly) {
assertEquals("Multipart request content: " + actualMap, expectedMap.size(), actualMap.size());
}
@@ -366,11 +383,11 @@ public class ContentRequestMatchers {
private static class MultipartHelper {
public static MultiValueMap<String, ?> parse(MockClientHttpRequest request) {
public static MultiValueMap<String, ?> parse(MockClientHttpRequest request, Charset defaultCharset) {
try {
FileUpload fileUpload = new FileUpload();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setDefaultCharset(DEFAULT_ENCODING);
factory.setDefaultCharset(defaultCharset.name());
fileUpload.setFileItemFactory(factory);
List<FileItem> fileItems = fileUpload.parseRequest(new UploadContext() {