Mock Servlet request/response support Accept-Language

Issue: SPR-15209
This commit is contained in:
Rossen Stoyanchev
2017-04-11 07:01:20 -04:00
parent 3393c10d79
commit 5d92a85fcb
8 changed files with 84 additions and 37 deletions

View File

@@ -33,6 +33,7 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.http.HttpHeaders;
import org.springframework.util.StreamUtils;
import static org.junit.Assert.*;
@@ -297,6 +298,16 @@ public class MockHttpServletRequestTests {
List<Locale> preferredLocales = Arrays.asList(Locale.ITALY, Locale.CHINA);
request.setPreferredLocales(preferredLocales);
assertEqualEnumerations(Collections.enumeration(preferredLocales), request.getLocales());
assertEquals("it-it, zh-cn", request.getHeader(HttpHeaders.ACCEPT_LANGUAGE));
}
@Test
public void preferredLocalesFromAcceptLanguageHeader() {
String headerValue = "fr-ch, fr;q=0.9, en-*;q=0.8, de;q=0.7, *;q=0.5";
request.addHeader("Accept-Language", headerValue);
List<Locale> actual = Collections.list(request.getLocales());
assertEquals(Arrays.asList(Locale.forLanguageTag("fr-ch"), Locale.forLanguageTag("fr"),
Locale.forLanguageTag("en"), Locale.forLanguageTag("de")), actual);
}
@Test

View File

@@ -45,10 +45,16 @@ import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import static java.util.Arrays.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.isEmptyString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.Assert.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
/**
* Unit tests for {@link HtmlUnitRequestBuilder}.
@@ -291,16 +297,16 @@ public class HtmlUnitRequestBuilderTests {
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getLocale(), equalTo(new Locale("en", "gb", "0.8")));
assertThat(actualRequest.getLocale(), equalTo(new Locale("en", "gb")));
}
@Test
public void buildRequestLocaleEnQ07() {
webRequest.setAdditionalHeader("Accept-Language", "en;q=0.7");
webRequest.setAdditionalHeader("Accept-Language", "en");
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
assertThat(actualRequest.getLocale(), equalTo(new Locale("en", "", "0.7")));
assertThat(actualRequest.getLocale(), equalTo(new Locale("en", "")));
}
@Test
@@ -323,13 +329,11 @@ public class HtmlUnitRequestBuilderTests {
@Test
public void buildRequestLocaleMulti() {
webRequest.setAdditionalHeader("Accept-Language", "da, en-gb;q=0.8, en;q=0.7");
webRequest.setAdditionalHeader("Accept-Language", "en-gb;q=0.8, da, en;q=0.7");
MockHttpServletRequest actualRequest = requestBuilder.buildRequest(servletContext);
// Append Locale.ENGLISH since MockHttpServletRequest automatically sets it as the
// preferred locale.
List<Locale> expected = asList(new Locale("da"), new Locale("en", "gb", "0.8"), new Locale("en", "", "0.7"), Locale.ENGLISH);
List<Locale> expected = asList(new Locale("da"), new Locale("en", "gb"), new Locale("en", ""));
assertThat(Collections.list(actualRequest.getLocales()), equalTo(expected));
}