From af6dd56e89db8ea8c88f607c4214abcde50dfc94 Mon Sep 17 00:00:00 2001 From: Sauli Tähkäpää Date: Tue, 3 Feb 2015 15:02:45 +0200 Subject: Encode filenames to UTF-8 in Content-Disposition header. (#16556) Change-Id: Ie2cf41f2176d05105663cdb84934379efa826f03 --- .../src/com/vaadin/server/FileDownloaderTests.java | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 server/tests/src/com/vaadin/server/FileDownloaderTests.java (limited to 'server/tests/src') diff --git a/server/tests/src/com/vaadin/server/FileDownloaderTests.java b/server/tests/src/com/vaadin/server/FileDownloaderTests.java new file mode 100644 index 0000000000..4e9478c570 --- /dev/null +++ b/server/tests/src/com/vaadin/server/FileDownloaderTests.java @@ -0,0 +1,41 @@ +package com.vaadin.server; + +import static org.mockito.Matchers.contains; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URLEncoder; + +import org.junit.Before; +import org.junit.Test; + +public class FileDownloaderTests { + private String filename = "日本語.png"; + private DownloadStream stream; + + @Before + public void setup() { + stream = new DownloadStream(mock(InputStream.class), "", filename); + } + + @Test + public void contentDispositionFilenameIsUtf8Encoded() throws IOException { + VaadinResponse response = mock(VaadinResponse.class); + + stream.writeResponse(mock(VaadinRequest.class), response); + + verify(response).setHeader(eq("Content-Disposition"), + contains("attachment;")); + String encodedFileName = URLEncoder.encode(filename, "utf-8"); + verify(response).setHeader(eq("Content-Disposition"), + contains(String.format("filename=\"%s\";", encodedFileName))); + verify(response) + .setHeader( + eq("Content-Disposition"), + contains(String.format("filename*=utf-8''%s", + encodedFileName))); + } +} -- cgit v1.2.3