1
1
/*
2
- * Copyright 2002-2015 the original author or authors.
2
+ * Copyright 2002-2017 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
18
18
19
19
import java .util .Locale ;
20
20
import java .util .TimeZone ;
21
+ import javax .servlet .ServletException ;
21
22
import javax .servlet .http .Cookie ;
22
23
23
24
import org .junit .Test ;
28
29
import org .springframework .context .i18n .TimeZoneAwareLocaleContext ;
29
30
import org .springframework .mock .web .test .MockHttpServletRequest ;
30
31
import org .springframework .mock .web .test .MockHttpServletResponse ;
32
+ import org .springframework .web .util .WebUtils ;
31
33
32
34
import static org .junit .Assert .*;
33
35
@@ -45,7 +47,6 @@ public void testResolveLocale() {
45
47
request .setCookies (cookie );
46
48
47
49
CookieLocaleResolver resolver = new CookieLocaleResolver ();
48
- // yup, koekje is the Dutch name for Cookie ;-)
49
50
resolver .setCookieName ("LanguageKoekje" );
50
51
Locale loc = resolver .resolveLocale (request );
51
52
assertEquals (loc .getLanguage (), "nl" );
@@ -58,7 +59,6 @@ public void testResolveLocaleContext() {
58
59
request .setCookies (cookie );
59
60
60
61
CookieLocaleResolver resolver = new CookieLocaleResolver ();
61
- // yup, koekje is the Dutch name for Cookie ;-)
62
62
resolver .setCookieName ("LanguageKoekje" );
63
63
LocaleContext loc = resolver .resolveLocaleContext (request );
64
64
assertEquals ("nl" , loc .getLocale ().getLanguage ());
@@ -73,14 +73,82 @@ public void testResolveLocaleContextWithTimeZone() {
73
73
request .setCookies (cookie );
74
74
75
75
CookieLocaleResolver resolver = new CookieLocaleResolver ();
76
- // yup, koekje is the Dutch name for Cookie ;-)
77
76
resolver .setCookieName ("LanguageKoekje" );
78
77
LocaleContext loc = resolver .resolveLocaleContext (request );
79
78
assertEquals ("nl" , loc .getLocale ().getLanguage ());
80
79
assertTrue (loc instanceof TimeZoneAwareLocaleContext );
81
80
assertEquals (TimeZone .getTimeZone ("GMT+1" ), ((TimeZoneAwareLocaleContext ) loc ).getTimeZone ());
82
81
}
83
82
83
+ @ Test
84
+ public void testResolveLocaleContextWithInvalidLocale () {
85
+ MockHttpServletRequest request = new MockHttpServletRequest ();
86
+ Cookie cookie = new Cookie ("LanguageKoekje" , "n-x GMT+1" );
87
+ request .setCookies (cookie );
88
+
89
+ CookieLocaleResolver resolver = new CookieLocaleResolver ();
90
+ resolver .setCookieName ("LanguageKoekje" );
91
+ try {
92
+ resolver .resolveLocaleContext (request );
93
+ fail ("Should have thrown IllegalStateException" );
94
+ }
95
+ catch (IllegalStateException ex ) {
96
+ assertTrue (ex .getMessage ().contains ("LanguageKoekje" ));
97
+ assertTrue (ex .getMessage ().contains ("n-x GMT+1" ));
98
+ }
99
+ }
100
+
101
+ @ Test
102
+ public void testResolveLocaleContextWithInvalidLocaleOnErrorDispatch () {
103
+ MockHttpServletRequest request = new MockHttpServletRequest ();
104
+ request .addPreferredLocale (Locale .GERMAN );
105
+ request .setAttribute (WebUtils .ERROR_EXCEPTION_ATTRIBUTE , new ServletException ());
106
+ Cookie cookie = new Cookie ("LanguageKoekje" , "n-x GMT+1" );
107
+ request .setCookies (cookie );
108
+
109
+ CookieLocaleResolver resolver = new CookieLocaleResolver ();
110
+ resolver .setDefaultTimeZone (TimeZone .getTimeZone ("GMT+2" ));
111
+ resolver .setCookieName ("LanguageKoekje" );
112
+ LocaleContext loc = resolver .resolveLocaleContext (request );
113
+ assertEquals (Locale .GERMAN , loc .getLocale ());
114
+ assertTrue (loc instanceof TimeZoneAwareLocaleContext );
115
+ assertEquals (TimeZone .getTimeZone ("GMT+2" ), ((TimeZoneAwareLocaleContext ) loc ).getTimeZone ());
116
+ }
117
+
118
+ @ Test
119
+ public void testResolveLocaleContextWithInvalidTimeZone () {
120
+ MockHttpServletRequest request = new MockHttpServletRequest ();
121
+ Cookie cookie = new Cookie ("LanguageKoekje" , "nl X-MT" );
122
+ request .setCookies (cookie );
123
+
124
+ CookieLocaleResolver resolver = new CookieLocaleResolver ();
125
+ resolver .setCookieName ("LanguageKoekje" );
126
+ try {
127
+ resolver .resolveLocaleContext (request );
128
+ fail ("Should have thrown IllegalStateException" );
129
+ }
130
+ catch (IllegalStateException ex ) {
131
+ assertTrue (ex .getMessage ().contains ("LanguageKoekje" ));
132
+ assertTrue (ex .getMessage ().contains ("nl X-MT" ));
133
+ }
134
+ }
135
+
136
+ @ Test
137
+ public void testResolveLocaleContextWithInvalidTimeZoneOnErrorDispatch () {
138
+ MockHttpServletRequest request = new MockHttpServletRequest ();
139
+ request .setAttribute (WebUtils .ERROR_EXCEPTION_ATTRIBUTE , new ServletException ());
140
+ Cookie cookie = new Cookie ("LanguageKoekje" , "nl X-MT" );
141
+ request .setCookies (cookie );
142
+
143
+ CookieLocaleResolver resolver = new CookieLocaleResolver ();
144
+ resolver .setDefaultTimeZone (TimeZone .getTimeZone ("GMT+2" ));
145
+ resolver .setCookieName ("LanguageKoekje" );
146
+ LocaleContext loc = resolver .resolveLocaleContext (request );
147
+ assertEquals ("nl" , loc .getLocale ().getLanguage ());
148
+ assertTrue (loc instanceof TimeZoneAwareLocaleContext );
149
+ assertEquals (TimeZone .getTimeZone ("GMT+2" ), ((TimeZoneAwareLocaleContext ) loc ).getTimeZone ());
150
+ }
151
+
84
152
@ Test
85
153
public void testSetAndResolveLocale () {
86
154
MockHttpServletRequest request = new MockHttpServletRequest ();
0 commit comments