Merge branch '5.3.x'

This commit is contained in:
Sam Brannen 2022-05-31 12:01:39 +02:00
commit b659030867
4 changed files with 86 additions and 160 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2022 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.
@ -42,49 +42,49 @@ import static org.assertj.core.api.Assertions.assertThat;
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @author Juergen Hoeller * @author Juergen Hoeller
*/ */
public class AcceptHeaderLocaleResolverTests { class AcceptHeaderLocaleResolverTests {
private final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver(); private final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
@Test @Test
public void resolve() { void resolve() {
assertThat(this.resolver.resolveLocale(request(CANADA))).isEqualTo(CANADA); assertThat(this.resolver.resolveLocale(request(CANADA))).isEqualTo(CANADA);
assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(US); assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(US);
} }
@Test @Test
public void resolvePreferredSupported() { void resolvePreferredSupported() {
this.resolver.setSupportedLocales(Collections.singletonList(CANADA)); this.resolver.setSupportedLocales(Collections.singletonList(CANADA));
assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(CANADA); assertThat(this.resolver.resolveLocale(request(US, CANADA))).isEqualTo(CANADA);
} }
@Test @Test
public void resolvePreferredNotSupported() { void resolvePreferredNotSupported() {
this.resolver.setSupportedLocales(Collections.singletonList(CANADA)); this.resolver.setSupportedLocales(Collections.singletonList(CANADA));
assertThat(this.resolver.resolveLocale(request(US, UK))).isEqualTo(US); assertThat(this.resolver.resolveLocale(request(US, UK))).isEqualTo(US);
} }
@Test @Test
public void resolvePreferredAgainstLanguageOnly() { void resolvePreferredAgainstLanguageOnly() {
this.resolver.setSupportedLocales(Collections.singletonList(ENGLISH)); this.resolver.setSupportedLocales(Collections.singletonList(ENGLISH));
assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(ENGLISH); assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(ENGLISH);
} }
@Test @Test
public void resolvePreferredAgainstCountryIfPossible() { void resolvePreferredAgainstCountryIfPossible() {
this.resolver.setSupportedLocales(Arrays.asList(ENGLISH, UK)); this.resolver.setSupportedLocales(Arrays.asList(ENGLISH, UK));
assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(UK); assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(UK);
} }
@Test @Test
public void resolvePreferredAgainstLanguageWithMultipleSupportedLocales() { void resolvePreferredAgainstLanguageWithMultipleSupportedLocales() {
this.resolver.setSupportedLocales(Arrays.asList(GERMAN, US)); this.resolver.setSupportedLocales(Arrays.asList(GERMAN, US));
assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(GERMAN); assertThat(this.resolver.resolveLocale(request(GERMANY, US, UK))).isEqualTo(GERMAN);
} }
@Test @Test
public void resolvePreferredNotSupportedWithDefault() { void resolvePreferredNotSupportedWithDefault() {
this.resolver.setSupportedLocales(Arrays.asList(US, JAPAN)); this.resolver.setSupportedLocales(Arrays.asList(US, JAPAN));
this.resolver.setDefaultLocale(Locale.JAPAN); this.resolver.setDefaultLocale(Locale.JAPAN);
@ -95,7 +95,7 @@ public class AcceptHeaderLocaleResolverTests {
} }
@Test @Test
public void defaultLocale() { void defaultLocale() {
this.resolver.setDefaultLocale(JAPANESE); this.resolver.setDefaultLocale(JAPANESE);
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
assertThat(this.resolver.resolveLocale(request)).isEqualTo(JAPANESE); assertThat(this.resolver.resolveLocale(request)).isEqualTo(JAPANESE);

View File

@ -35,123 +35,109 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException; import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
/** /**
* Unit tests for {@link CookieLocaleResolver}.
*
* @author Alef Arendsen * @author Alef Arendsen
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Rick Evans * @author Rick Evans
* @author Sam Brannen
*/ */
public class CookieLocaleResolverTests { class CookieLocaleResolverTests {
private MockHttpServletRequest request = new MockHttpServletRequest();
private MockHttpServletResponse response = new MockHttpServletResponse();
private CookieLocaleResolver resolver = new CookieLocaleResolver();
@Test @Test
public void testResolveLocale() { void resolveLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "nl"); Cookie cookie = new Cookie("LanguageKoekje", "nl");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
Locale loc = resolver.resolveLocale(request); Locale loc = resolver.resolveLocale(request);
assertThat(loc.getLanguage()).isEqualTo("nl"); assertThat(loc.getLanguage()).isEqualTo("nl");
} }
@Test @Test
public void testResolveLocaleContext() { void resolveLocaleContext() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "nl"); Cookie cookie = new Cookie("LanguageKoekje", "nl");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl"); assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull(); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
} }
@Test @Test
public void testResolveLocaleContextWithTimeZone() { void resolveLocaleContextWithTimeZone() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "nl GMT+1"); Cookie cookie = new Cookie("LanguageKoekje", "nl GMT+1");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl"); assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
} }
@Test @Test
public void testResolveLocaleContextWithInvalidLocale() { void resolveLocaleContextWithInvalidLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1"); Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
assertThatIllegalStateException().isThrownBy(() -> assertThatIllegalStateException().isThrownBy(() -> resolver.resolveLocaleContext(request))
resolver.resolveLocaleContext(request))
.withMessageContaining("LanguageKoekje") .withMessageContaining("LanguageKoekje")
.withMessageContaining("++ GMT+1"); .withMessageContaining("++ GMT+1");
} }
@Test @Test
public void testResolveLocaleContextWithInvalidLocaleOnErrorDispatch() { void resolveLocaleContextWithInvalidLocaleOnErrorDispatch() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.GERMAN); request.addPreferredLocale(Locale.GERMAN);
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, new ServletException()); request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, new ServletException());
Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1"); Cookie cookie = new Cookie("LanguageKoekje", "++ GMT+1");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+2")); resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+2"));
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale()).isEqualTo(Locale.GERMAN); assertThat(loc.getLocale()).isEqualTo(Locale.GERMAN);
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+2")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+2"));
} }
@Test @Test
public void testResolveLocaleContextWithInvalidTimeZone() { void resolveLocaleContextWithInvalidTimeZone() {
MockHttpServletRequest request = new MockHttpServletRequest();
Cookie cookie = new Cookie("LanguageKoekje", "nl X-MT"); Cookie cookie = new Cookie("LanguageKoekje", "nl X-MT");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
assertThatIllegalStateException().isThrownBy(() -> assertThatIllegalStateException().isThrownBy(() -> resolver.resolveLocaleContext(request))
resolver.resolveLocaleContext(request))
.withMessageContaining("LanguageKoekje") .withMessageContaining("LanguageKoekje")
.withMessageContaining("nl X-MT"); .withMessageContaining("nl X-MT");
} }
@Test @Test
public void testResolveLocaleContextWithInvalidTimeZoneOnErrorDispatch() { void resolveLocaleContextWithInvalidTimeZoneOnErrorDispatch() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, new ServletException()); request.setAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE, new ServletException());
Cookie cookie = new Cookie("LanguageKoekje", "nl X-MT"); Cookie cookie = new Cookie("LanguageKoekje", "nl X-MT");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+2")); resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+2"));
resolver.setCookieName("LanguageKoekje"); resolver.setCookieName("LanguageKoekje");
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl"); assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+2")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+2"));
} }
@Test @Test
public void testSetAndResolveLocale() { void setAndResolveLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocale(request, response, new Locale("nl", "")); resolver.setLocale(request, response, new Locale("nl", ""));
Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
@ -170,11 +156,7 @@ public class CookieLocaleResolverTests {
} }
@Test @Test
public void testSetAndResolveLocaleContext() { void setAndResolveLocaleContext() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", ""))); resolver.setLocaleContext(request, response, new SimpleLocaleContext(new Locale("nl", "")));
Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
@ -184,17 +166,12 @@ public class CookieLocaleResolverTests {
resolver = new CookieLocaleResolver(); resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl"); assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull(); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
} }
@Test @Test
public void testSetAndResolveLocaleContextWithTimeZone() { void setAndResolveLocaleContextWithTimeZone() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocaleContext(request, response, resolver.setLocaleContext(request, response,
new SimpleTimeZoneAwareLocaleContext(new Locale("nl", ""), TimeZone.getTimeZone("GMT+1"))); new SimpleTimeZoneAwareLocaleContext(new Locale("nl", ""), TimeZone.getTimeZone("GMT+1")));
@ -205,17 +182,12 @@ public class CookieLocaleResolverTests {
resolver = new CookieLocaleResolver(); resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale().getLanguage()).isEqualTo("nl"); assertThat(loc.getLocale().getLanguage()).isEqualTo("nl");
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
} }
@Test @Test
public void testSetAndResolveLocaleContextWithTimeZoneOnly() { void setAndResolveLocaleContextWithTimeZoneOnly() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocaleContext(request, response, resolver.setLocaleContext(request, response,
new SimpleTimeZoneAwareLocaleContext(null, TimeZone.getTimeZone("GMT+1"))); new SimpleTimeZoneAwareLocaleContext(null, TimeZone.getTimeZone("GMT+1")));
@ -227,17 +199,12 @@ public class CookieLocaleResolverTests {
resolver = new CookieLocaleResolver(); resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale()).isEqualTo(Locale.GERMANY); assertThat(loc.getLocale()).isEqualTo(Locale.GERMANY);
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
} }
@Test @Test
public void testSetAndResolveLocaleWithCountry() { void setAndResolveLocaleWithCountry() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocale(request, response, new Locale("de", "AT")); resolver.setLocale(request, response, new Locale("de", "AT"));
Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME); Cookie cookie = response.getCookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
@ -258,11 +225,7 @@ public class CookieLocaleResolverTests {
} }
@Test @Test
public void testSetAndResolveLocaleWithCountryAsLegacyJava() { void setAndResolveLocaleWithCountryAsLegacyJava() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLanguageTagCompliant(false); resolver.setLanguageTagCompliant(false);
resolver.setLocale(request, response, new Locale("de", "AT")); resolver.setLocale(request, response, new Locale("de", "AT"));
@ -284,11 +247,7 @@ public class CookieLocaleResolverTests {
} }
@Test @Test
public void testCustomCookie() { void customCookie() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setCookieName("LanguageKoek"); resolver.setCookieName("LanguageKoek");
resolver.setCookieDomain(".springframework.org"); resolver.setCookieDomain(".springframework.org");
resolver.setCookiePath("/mypath"); resolver.setCookiePath("/mypath");
@ -314,36 +273,27 @@ public class CookieLocaleResolverTests {
} }
@Test @Test
public void testResolveLocaleWithoutCookie() { void resolveLocaleWithoutCookie() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
CookieLocaleResolver resolver = new CookieLocaleResolver();
Locale loc = resolver.resolveLocale(request); Locale loc = resolver.resolveLocale(request);
assertThat(loc).isEqualTo(request.getLocale()); assertThat(loc).isEqualTo(request.getLocale());
} }
@Test @Test
public void testResolveLocaleContextWithoutCookie() { void resolveLocaleContextWithoutCookie() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
CookieLocaleResolver resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale()).isEqualTo(request.getLocale()); assertThat(loc.getLocale()).isEqualTo(request.getLocale());
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull(); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
} }
@Test @Test
public void testResolveLocaleWithoutCookieAndDefaultLocale() { void resolveLocaleWithoutCookieAndDefaultLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(Locale.GERMAN); resolver.setDefaultLocale(Locale.GERMAN);
Locale loc = resolver.resolveLocale(request); Locale loc = resolver.resolveLocale(request);
@ -351,79 +301,63 @@ public class CookieLocaleResolverTests {
} }
@Test @Test
public void testResolveLocaleContextWithoutCookieAndDefaultLocale() { void resolveLocaleContextWithoutCookieAndDefaultLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(Locale.GERMAN); resolver.setDefaultLocale(Locale.GERMAN);
resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+1")); resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+1"));
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale()).isEqualTo(Locale.GERMAN); assertThat(loc.getLocale()).isEqualTo(Locale.GERMAN);
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1")); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isEqualTo(TimeZone.getTimeZone("GMT+1"));
} }
@Test @Test
public void testResolveLocaleWithCookieWithoutLocale() { void resolveLocaleWithCookieWithoutLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, ""); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, "");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
Locale loc = resolver.resolveLocale(request); Locale loc = resolver.resolveLocale(request);
assertThat(loc).isEqualTo(request.getLocale()); assertThat(loc).isEqualTo(request.getLocale());
} }
@Test @Test
public void testResolveLocaleContextWithCookieWithoutLocale() { void resolveLocaleContextWithCookieWithoutLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, ""); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, "");
request.setCookies(cookie); request.setCookies(cookie);
CookieLocaleResolver resolver = new CookieLocaleResolver();
LocaleContext loc = resolver.resolveLocaleContext(request); LocaleContext loc = resolver.resolveLocaleContext(request);
assertThat(loc.getLocale()).isEqualTo(request.getLocale()); assertThat(loc.getLocale()).isEqualTo(request.getLocale());
boolean condition = loc instanceof TimeZoneAwareLocaleContext; assertThat(loc).isInstanceOf(TimeZoneAwareLocaleContext.class);
assertThat(condition).isTrue();
assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull(); assertThat(((TimeZoneAwareLocaleContext) loc).getTimeZone()).isNull();
} }
@Test @Test
public void testSetLocaleToNull() { void setLocaleToNull() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString()); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
request.setCookies(cookie); request.setCookies(cookie);
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocale(request, response, null); resolver.setLocale(request, response, null);
Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME); Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
assertThat(locale).isEqualTo(Locale.TAIWAN); assertThat(locale).isEqualTo(Locale.TAIWAN);
Cookie[] cookies = response.getCookies(); Cookie[] cookies = response.getCookies();
assertThat(cookies.length).isEqualTo(1); assertThat(cookies).hasSize(1);
Cookie localeCookie = cookies[0]; Cookie localeCookie = cookies[0];
assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME); assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
assertThat(localeCookie.getValue()).isEqualTo(""); assertThat(localeCookie.getValue()).isEqualTo("");
} }
@Test @Test
public void testSetLocaleContextToNull() { void setLocaleContextToNull() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString()); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
request.setCookies(cookie); request.setCookies(cookie);
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setLocaleContext(request, response, null); resolver.setLocaleContext(request, response, null);
Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME); Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
assertThat(locale).isEqualTo(Locale.TAIWAN); assertThat(locale).isEqualTo(Locale.TAIWAN);
@ -431,42 +365,36 @@ public class CookieLocaleResolverTests {
assertThat(timeZone).isNull(); assertThat(timeZone).isNull();
Cookie[] cookies = response.getCookies(); Cookie[] cookies = response.getCookies();
assertThat(cookies.length).isEqualTo(1); assertThat(cookies).hasSize(1);
Cookie localeCookie = cookies[0]; Cookie localeCookie = cookies[0];
assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME); assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
assertThat(localeCookie.getValue()).isEqualTo(""); assertThat(localeCookie.getValue()).isEqualTo("");
} }
@Test @Test
public void testSetLocaleToNullWithDefault() { void setLocaleToNullWithDefault() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString()); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
request.setCookies(cookie); request.setCookies(cookie);
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(Locale.CANADA_FRENCH); resolver.setDefaultLocale(Locale.CANADA_FRENCH);
resolver.setLocale(request, response, null); resolver.setLocale(request, response, null);
Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME); Locale locale = (Locale) request.getAttribute(CookieLocaleResolver.LOCALE_REQUEST_ATTRIBUTE_NAME);
assertThat(locale).isEqualTo(Locale.CANADA_FRENCH); assertThat(locale).isEqualTo(Locale.CANADA_FRENCH);
Cookie[] cookies = response.getCookies(); Cookie[] cookies = response.getCookies();
assertThat(cookies.length).isEqualTo(1); assertThat(cookies).hasSize(1);
Cookie localeCookie = cookies[0]; Cookie localeCookie = cookies[0];
assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME); assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
assertThat(localeCookie.getValue()).isEqualTo(""); assertThat(localeCookie.getValue()).isEqualTo("");
} }
@Test @Test
public void testSetLocaleContextToNullWithDefault() { void setLocaleContextToNullWithDefault() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString()); Cookie cookie = new Cookie(CookieLocaleResolver.DEFAULT_COOKIE_NAME, Locale.UK.toString());
request.setCookies(cookie); request.setCookies(cookie);
MockHttpServletResponse response = new MockHttpServletResponse();
CookieLocaleResolver resolver = new CookieLocaleResolver();
resolver.setDefaultLocale(Locale.CANADA_FRENCH); resolver.setDefaultLocale(Locale.CANADA_FRENCH);
resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+1")); resolver.setDefaultTimeZone(TimeZone.getTimeZone("GMT+1"));
resolver.setLocaleContext(request, response, null); resolver.setLocaleContext(request, response, null);
@ -476,7 +404,7 @@ public class CookieLocaleResolverTests {
assertThat(timeZone).isEqualTo(TimeZone.getTimeZone("GMT+1")); assertThat(timeZone).isEqualTo(TimeZone.getTimeZone("GMT+1"));
Cookie[] cookies = response.getCookies(); Cookie[] cookies = response.getCookies();
assertThat(cookies.length).isEqualTo(1); assertThat(cookies).hasSize(1);
Cookie localeCookie = cookies[0]; Cookie localeCookie = cookies[0];
assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME); assertThat(localeCookie.getName()).isEqualTo(CookieLocaleResolver.DEFAULT_COOKIE_NAME);
assertThat(localeCookie.getValue()).isEqualTo(""); assertThat(localeCookie.getValue()).isEqualTo("");

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2022 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.
@ -35,28 +35,30 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail; import static org.assertj.core.api.Assertions.fail;
/** /**
* Unit tests for various {@link LocaleResolver} implementations.
*
* @author Juergen Hoeller * @author Juergen Hoeller
* @since 20.03.2003 * @since 20.03.2003
*/ */
public class LocaleResolverTests { class LocaleResolverTests {
@Test @Test
public void testAcceptHeaderLocaleResolver() { void acceptHeaderLocaleResolver() {
doTest(new AcceptHeaderLocaleResolver(), false); doTest(new AcceptHeaderLocaleResolver(), false);
} }
@Test @Test
public void testFixedLocaleResolver() { void fixedLocaleResolver() {
doTest(new FixedLocaleResolver(Locale.UK), false); doTest(new FixedLocaleResolver(Locale.UK), false);
} }
@Test @Test
public void testCookieLocaleResolver() { void cookieLocaleResolver() {
doTest(new CookieLocaleResolver(), true); doTest(new CookieLocaleResolver(), true);
} }
@Test @Test
public void testSessionLocaleResolver() { void sessionLocaleResolver() {
doTest(new SessionLocaleResolver(), true); doTest(new SessionLocaleResolver(), true);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2019 the original author or authors. * Copyright 2002-2022 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.
@ -27,25 +27,29 @@ import org.springframework.web.testfixture.servlet.MockHttpServletResponse;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Unit tests for {@link SessionLocaleResolver}.
*
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Sam Brannen
*/ */
public class SessionLocaleResolverTests { class SessionLocaleResolverTests {
private MockHttpServletRequest request = new MockHttpServletRequest();
private MockHttpServletResponse response = new MockHttpServletResponse();
private SessionLocaleResolver resolver = new SessionLocaleResolver();
@Test @Test
public void testResolveLocale() { void resolveLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN);
SessionLocaleResolver resolver = new SessionLocaleResolver();
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN); assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
} }
@Test @Test
public void testSetAndResolveLocale() { void setAndResolveLocale() {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setLocale(request, response, Locale.GERMAN); resolver.setLocale(request, response, Locale.GERMAN);
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN); assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
@ -58,34 +62,26 @@ public class SessionLocaleResolverTests {
} }
@Test @Test
public void testResolveLocaleWithoutSession() throws Exception { void resolveLocaleWithoutSession() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
SessionLocaleResolver resolver = new SessionLocaleResolver();
assertThat(resolver.resolveLocale(request)).isEqualTo(request.getLocale()); assertThat(resolver.resolveLocale(request)).isEqualTo(request.getLocale());
} }
@Test @Test
public void testResolveLocaleWithoutSessionAndDefaultLocale() throws Exception { void resolveLocaleWithoutSessionAndDefaultLocale() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.GERMAN); resolver.setDefaultLocale(Locale.GERMAN);
assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN); assertThat(resolver.resolveLocale(request)).isEqualTo(Locale.GERMAN);
} }
@Test @Test
public void testSetLocaleToNullLocale() throws Exception { void setLocaleToNullLocale() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.addPreferredLocale(Locale.TAIWAN); request.addPreferredLocale(Locale.TAIWAN);
request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN); request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, Locale.GERMAN);
MockHttpServletResponse response = new MockHttpServletResponse();
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setLocale(request, response, null); resolver.setLocale(request, response, null);
Locale locale = (Locale) request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME); Locale locale = (Locale) request.getSession().getAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME);
assertThat(locale).isNull(); assertThat(locale).isNull();