parent
f084b63286
commit
c97580035e
|
|
@ -28,129 +28,143 @@ import org.springframework.util.ReflectionUtils;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unit tests for {@link ContentDisposition}
|
* Unit tests for {@link ContentDisposition}
|
||||||
*
|
|
||||||
* @author Sebastien Deleuze
|
* @author Sebastien Deleuze
|
||||||
|
* @author Rossen Stoyanchev
|
||||||
*/
|
*/
|
||||||
public class ContentDispositionTests {
|
public class ContentDispositionTests {
|
||||||
|
|
||||||
@Test
|
private static DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
|
||||||
public void parseTest() {
|
|
||||||
ContentDisposition disposition = ContentDisposition
|
|
||||||
.parse("form-data; name=\"foo\"; filename=\"foo.txt\"; size=123");
|
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data")
|
|
||||||
.name("foo").filename("foo.txt").size(123L).build());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parse() {
|
public void parse() {
|
||||||
ContentDisposition disposition = ContentDisposition
|
assertThat(parse("form-data; name=\"foo\"; filename=\"foo.txt\"; size=123"))
|
||||||
.parse("form-data; name=\"foo\"; filename=\"foo.txt\"; size=123");
|
.isEqualTo(ContentDisposition.builder("form-data")
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data")
|
.name("foo")
|
||||||
.name("foo").filename("foo.txt").size(123L).build());
|
.filename("foo.txt")
|
||||||
|
.size(123L)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseType() {
|
public void parseFilenameUnquoted() {
|
||||||
ContentDisposition disposition = ContentDisposition.parse("form-data");
|
assertThat(parse("form-data; filename=unquoted"))
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data").build());
|
.isEqualTo(ContentDisposition.builder("form-data")
|
||||||
}
|
.filename("unquoted")
|
||||||
|
.build());
|
||||||
@Test
|
|
||||||
public void parseUnquotedFilename() {
|
|
||||||
ContentDisposition disposition = ContentDisposition
|
|
||||||
.parse("form-data; filename=unquoted");
|
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data").filename("unquoted").build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test // SPR-16091
|
@Test // SPR-16091
|
||||||
public void parseFilenameWithSemicolon() {
|
public void parseFilenameWithSemicolon() {
|
||||||
ContentDisposition disposition = ContentDisposition
|
assertThat(parse("attachment; filename=\"filename with ; semicolon.txt\""))
|
||||||
.parse("attachment; filename=\"filename with ; semicolon.txt\"");
|
.isEqualTo(ContentDisposition.builder("attachment")
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("attachment")
|
.filename("filename with ; semicolon.txt")
|
||||||
.filename("filename with ; semicolon.txt").build());
|
.build());
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void parseAndIgnoreEmptyParts() {
|
|
||||||
ContentDisposition disposition = ContentDisposition
|
|
||||||
.parse("form-data; name=\"foo\";; ; filename=\"foo.txt\"; size=123");
|
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data")
|
|
||||||
.name("foo").filename("foo.txt").size(123L).build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseEncodedFilename() {
|
public void parseEncodedFilename() {
|
||||||
ContentDisposition disposition = ContentDisposition
|
assertThat(parse("form-data; name=\"name\"; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt"))
|
||||||
.parse("form-data; name=\"name\"; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt");
|
.isEqualTo(ContentDisposition.builder("form-data")
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("form-data").name("name")
|
.name("name")
|
||||||
.filename("中文.txt", StandardCharsets.UTF_8).build());
|
.filename("中文.txt", StandardCharsets.UTF_8)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test // gh-23077
|
@Test // gh-23077
|
||||||
public void parseWithEscapedQuote() {
|
public void parseWithEscapedQuote() {
|
||||||
ContentDisposition disposition = ContentDisposition.parse(
|
assertThat(parse("form-data; name=\"file\"; filename=\"\\\"The Twilight Zone\\\".txt\"; size=123"))
|
||||||
"form-data; name=\"file\"; filename=\"\\\"The Twilight Zone\\\".txt\"; size=123");
|
.isEqualTo(ContentDisposition.builder("form-data")
|
||||||
assertThat(ContentDisposition.builder("form-data").name("file")
|
.name("file")
|
||||||
.filename("\\\"The Twilight Zone\\\".txt").size(123L).build()).isEqualTo(disposition);
|
.filename("\\\"The Twilight Zone\\\".txt")
|
||||||
|
.size(123L)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseEmpty() {
|
public void parseWithExtraSemicolons() {
|
||||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
assertThat(parse("form-data; name=\"foo\";; ; filename=\"foo.txt\"; size=123"))
|
||||||
ContentDisposition.parse(""));
|
.isEqualTo(ContentDisposition.builder("form-data")
|
||||||
}
|
.name("foo")
|
||||||
|
.filename("foo.txt")
|
||||||
@Test
|
.size(123L)
|
||||||
public void parseNoType() {
|
.build());
|
||||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
|
||||||
ContentDisposition.parse(";"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void parseInvalidParameter() {
|
|
||||||
assertThatIllegalArgumentException().isThrownBy(() ->
|
|
||||||
ContentDisposition.parse("foo;bar"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseDates() {
|
public void parseDates() {
|
||||||
ContentDisposition disposition = ContentDisposition
|
ZonedDateTime creationTime = ZonedDateTime.parse("Mon, 12 Feb 2007 10:15:30 -0500", formatter);
|
||||||
.parse("attachment; creation-date=\"Mon, 12 Feb 2007 10:15:30 -0500\"; " +
|
ZonedDateTime modificationTime = ZonedDateTime.parse("Tue, 13 Feb 2007 10:15:30 -0500", formatter);
|
||||||
"modification-date=\"Tue, 13 Feb 2007 10:15:30 -0500\"; " +
|
ZonedDateTime readTime = ZonedDateTime.parse("Wed, 14 Feb 2007 10:15:30 -0500", formatter);
|
||||||
"read-date=\"Wed, 14 Feb 2007 10:15:30 -0500\"");
|
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
|
assertThat(
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("attachment")
|
parse("attachment; " +
|
||||||
.creationDate(ZonedDateTime.parse("Mon, 12 Feb 2007 10:15:30 -0500", formatter))
|
"creation-date=\"" + creationTime.format(formatter) + "\"; " +
|
||||||
.modificationDate(ZonedDateTime.parse("Tue, 13 Feb 2007 10:15:30 -0500", formatter))
|
"modification-date=\"" + modificationTime.format(formatter) + "\"; " +
|
||||||
.readDate(ZonedDateTime.parse("Wed, 14 Feb 2007 10:15:30 -0500", formatter)).build());
|
"read-date=\"" + readTime.format(formatter) + "\"")).isEqualTo(
|
||||||
|
ContentDisposition.builder("attachment")
|
||||||
|
.creationDate(creationTime)
|
||||||
|
.modificationDate(modificationTime)
|
||||||
|
.readDate(readTime)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void parseInvalidDates() {
|
public void parseIgnoresInvalidDates() {
|
||||||
ContentDisposition disposition = ContentDisposition
|
ZonedDateTime readTime = ZonedDateTime.parse("Wed, 14 Feb 2007 10:15:30 -0500", formatter);
|
||||||
.parse("attachment; creation-date=\"-1\"; modification-date=\"-1\"; " +
|
|
||||||
"read-date=\"Wed, 14 Feb 2007 10:15:30 -0500\"");
|
assertThat(
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME;
|
parse("attachment; " +
|
||||||
assertThat(disposition).isEqualTo(ContentDisposition.builder("attachment")
|
"creation-date=\"-1\"; " +
|
||||||
.readDate(ZonedDateTime.parse("Wed, 14 Feb 2007 10:15:30 -0500", formatter)).build());
|
"modification-date=\"-1\"; " +
|
||||||
|
"read-date=\"" + readTime.format(formatter) + "\"")).isEqualTo(
|
||||||
|
ContentDisposition.builder("attachment")
|
||||||
|
.readDate(readTime)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseEmpty() {
|
||||||
|
assertThatIllegalArgumentException().isThrownBy(() -> parse(""));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseNoType() {
|
||||||
|
assertThatIllegalArgumentException().isThrownBy(() -> parse(";"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseInvalidParameter() {
|
||||||
|
assertThatIllegalArgumentException().isThrownBy(() -> parse("foo;bar"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static ContentDisposition parse(String input) {
|
||||||
|
return ContentDisposition.parse(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void headerValue() {
|
public void headerValue() {
|
||||||
ContentDisposition disposition = ContentDisposition.builder("form-data")
|
assertThat(
|
||||||
.name("foo").filename("foo.txt").size(123L).build();
|
ContentDisposition.builder("form-data")
|
||||||
assertThat(disposition.toString()).isEqualTo("form-data; name=\"foo\"; filename=\"foo.txt\"; size=123");
|
.name("foo")
|
||||||
|
.filename("foo.txt")
|
||||||
|
.size(123L)
|
||||||
|
.build().toString())
|
||||||
|
.isEqualTo("form-data; name=\"foo\"; filename=\"foo.txt\"; size=123");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void headerValueWithEncodedFilename() {
|
public void headerValueWithEncodedFilename() {
|
||||||
ContentDisposition disposition = ContentDisposition.builder("form-data")
|
assertThat(
|
||||||
.name("name").filename("中文.txt", StandardCharsets.UTF_8).build();
|
ContentDisposition.builder("form-data")
|
||||||
assertThat(disposition.toString()).isEqualTo("form-data; name=\"name\"; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt");
|
.name("name")
|
||||||
|
.filename("中文.txt", StandardCharsets.UTF_8)
|
||||||
|
.build().toString())
|
||||||
|
.isEqualTo("form-data; name=\"name\"; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test // SPR-14547
|
@Test // SPR-14547
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue