Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: android_webview/javatests/src/org/chromium/android_webview/test/AcceptLanguageTest.java

Issue 2559243003: Extend with a language code in http accept languages
Patch Set: Rebased, fixed nits and handed over this CL :( Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.android_webview.test; 5 package org.chromium.android_webview.test;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.os.Build; 8 import android.os.Build;
9 import android.os.LocaleList; 9 import android.os.LocaleList;
10 import android.test.suitebuilder.annotation.SmallTest; 10 import android.test.suitebuilder.annotation.SmallTest;
11 import android.text.TextUtils; 11 import android.text.TextUtils;
12 12
13 import org.chromium.android_webview.AwContents; 13 import org.chromium.android_webview.AwContents;
14 import org.chromium.android_webview.test.util.JSUtils; 14 import org.chromium.android_webview.test.util.JSUtils;
15 import org.chromium.base.LocaleUtils; 15 import org.chromium.base.LocaleUtils;
16 import org.chromium.base.test.util.Feature; 16 import org.chromium.base.test.util.Feature;
17 import org.chromium.base.test.util.MinAndroidSdkLevel; 17 import org.chromium.base.test.util.MinAndroidSdkLevel;
18 import org.chromium.net.test.EmbeddedTestServer; 18 import org.chromium.net.test.EmbeddedTestServer;
19 19
20 import java.util.Arrays;
21 import java.util.Locale; 20 import java.util.Locale;
22 import java.util.regex.Pattern; 21 import java.util.regex.Pattern;
23 22
24 /** 23 /**
25 * Tests for Accept Language implementation. 24 * Tests for Accept Language implementation.
26 */ 25 */
27 public class AcceptLanguageTest extends AwTestBase { 26 public class AcceptLanguageTest extends AwTestBase {
28 private TestAwContentsClient mContentsClient; 27 private TestAwContentsClient mContentsClient;
29 private AwContents mAwContents; 28 private AwContents mAwContents;
30 29
(...skipping 16 matching lines...) Expand all
47 46
48 private static final Pattern COMMA_AND_OPTIONAL_Q_VALUE = 47 private static final Pattern COMMA_AND_OPTIONAL_Q_VALUE =
49 Pattern.compile("(?:;q=[^,]+)?(?:,|$)"); 48 Pattern.compile("(?:;q=[^,]+)?(?:,|$)");
50 49
51 /** 50 /**
52 * Extract the languages from the Accept-Language header. 51 * Extract the languages from the Accept-Language header.
53 * 52 *
54 * The Accept-Language header can have more than one language along with opt ional quality 53 * The Accept-Language header can have more than one language along with opt ional quality
55 * factors for each, e.g. 54 * factors for each, e.g.
56 * 55 *
57 * "de-DE,en-US;q=0.8,en-UK;q=0.5" 56 * "de-DE,de;q=0.8,en-US;q=0.6,en-GB;q=0.4,en;q=0.2"
58 * 57 *
59 * This function extracts only the language strings from the Accept-Language header, so 58 * This function extracts only the language strings from the Accept-Language header, so
60 * the example above would yield the following: 59 * the example above would yield the following:
61 * 60 *
62 * ["de-DE", "en-US", "en-UK"] 61 * ["de-DE", "de", "en-US", "en-GB", "en"]
63 * 62 *
64 * @param raw String containing the raw Accept-Language header 63 * @param raw String containing the raw Accept-Language header
65 * @return A list of languages as Strings. 64 * @return A list of languages as Strings.
66 */ 65 */
67 private String[] getAcceptLanguages(String raw) { 66 private String[] getAcceptLanguages(String raw) {
68 return COMMA_AND_OPTIONAL_Q_VALUE.split(maybeStripDoubleQuotes(raw)); 67 return COMMA_AND_OPTIONAL_Q_VALUE.split(maybeStripDoubleQuotes(raw));
69 } 68 }
70 69
71 /** 70 /**
72 * Verify that the Accept Language string is correct. 71 * Verify that the Accept Language string is correct.
(...skipping 11 matching lines...) Expand all
84 String[] acceptLanguages = getAcceptLanguages( 83 String[] acceptLanguages = getAcceptLanguages(
85 JSUtils.executeJavaScriptAndWaitForResult( 84 JSUtils.executeJavaScriptAndWaitForResult(
86 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(), 85 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(),
87 "document.body.textContent")); 86 "document.body.textContent"));
88 assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguages[0]); 87 assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguages[0]);
89 88
90 String[] acceptLanguagesJs = getAcceptLanguages( 89 String[] acceptLanguagesJs = getAcceptLanguages(
91 JSUtils.executeJavaScriptAndWaitForResult( 90 JSUtils.executeJavaScriptAndWaitForResult(
92 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(), 91 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(),
93 "navigator.languages.join(',')")); 92 "navigator.languages.join(',')"));
94 assertEquals(acceptLanguagesJs.length, acceptLanguages.length); 93 assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguagesJs[0]) ;
95 for (int i = 0; i < acceptLanguagesJs.length; ++i) {
96 assertEquals(acceptLanguagesJs[i], acceptLanguages[i]);
97 }
98 94
99 // Test locale change at run time 95 // Test locale change at run time.
100 Locale.setDefault(new Locale("de", "DE")); 96 Locale.setDefault(new Locale("de", "DE"));
101 mAwContents.updateDefaultLocale(); 97 mAwContents.updateDefaultLocale();
102 mAwContents.getSettings().updateAcceptLanguages(); 98 mAwContents.getSettings().updateAcceptLanguages();
103 99
104 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ; 100 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
105 101
106 acceptLanguages = getAcceptLanguages( 102 acceptLanguages = getAcceptLanguages(
107 JSUtils.executeJavaScriptAndWaitForResult( 103 JSUtils.executeJavaScriptAndWaitForResult(
108 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(), 104 this, mAwContents, mContentsClient.getOnEvaluateJavaScri ptResultHelper(),
109 "document.body.textContent")); 105 "document.body.textContent"));
110 assertEquals(LocaleUtils.getDefaultLocaleString(), acceptLanguages[0]); 106 assertEquals("de-DE,de", acceptLanguages[0] + "," + acceptLanguages[1]);
111 } 107 }
112 108
113 /** 109 /**
114 * Verify that the Accept Languages string is correct. 110 * Verify that the Accept Languages string is correct.
115 * When default locales do not contain "en-US" or "en-us", 111 * When default locales do not contain "en-US" or "en-us",
116 * "en-US" should be added with lowest priority. 112 * "en-US" should be added with lowest priority.
117 */ 113 */
118 @SmallTest 114 @SmallTest
119 @MinAndroidSdkLevel(Build.VERSION_CODES.N) 115 @MinAndroidSdkLevel(Build.VERSION_CODES.N)
120 @SuppressLint("NewApi") 116 @SuppressLint("NewApi")
121 @Feature({"AndroidWebView"}) 117 @Feature({"AndroidWebView"})
122 public void testAcceptLanguagesWithenUS() throws Throwable { 118 public void testAcceptLanguages() throws Throwable {
123 getAwSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true); 119 getAwSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true);
120 String url = mTestServer.getURL("/echoheader?Accept-Language");
121 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
124 122
125 // This should yield a lightly formatted page with the contents of the A ccept-Language 123 String[] acceptLanguagesJs = getAcceptLanguages(JSUtils.executeJavaScrip tAndWaitForResult(
126 // header, e.g. "en-US" or "de-DE,en-US;q=0.8", as the only text content . 124 this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResult Helper(),
127 String url = mTestServer.getURL("/echoheader?Accept-Language"); 125 "navigator.languages.join(',')"));
126 assertEquals(
127 LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", ac ceptLanguagesJs));
128
129 // Test locales that contain "en-US" change at run time.
130 LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale( "en", "US")));
131 mAwContents.updateDefaultLocale();
132 mAwContents.getSettings().updateAcceptLanguages();
133
128 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ; 134 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
129 135
130 String[] acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptA ndWaitForResult( 136 String[] acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptA ndWaitForResult(
131 this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResult Helper(), 137 this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResult Helper(),
132 "document.body.textContent")); 138 "document.body.textContent"));
133 assertEquals( 139 assertEquals("de-DE,de,en-US,en", TextUtils.join(",", acceptLanguages));
134 LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", ac ceptLanguages));
135 140
136 String[] acceptLanguagesJs = getAcceptLanguages(JSUtils.executeJavaScrip tAndWaitForResult( 141 // Test locales that do not contain "en-US" change at run time, "en-US" should be added with
137 this, mAwContents, mContentsClient.getOnEvaluateJavaScriptResult Helper(), 142 // lower priority.
138 "navigator.languages.join(',')")); 143 LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale( "ja", "JP")));
139 assertEquals(acceptLanguagesJs.length, acceptLanguages.length);
140 for (int i = 0; i < acceptLanguagesJs.length; ++i) {
141 assertEquals(acceptLanguagesJs[i], acceptLanguages[i]);
142 }
143
144 // Test locales that contain "en-US" change at run time
145 LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale( "en", "US")));
146 mAwContents.updateDefaultLocale(); 144 mAwContents.updateDefaultLocale();
147 mAwContents.getSettings().updateAcceptLanguages(); 145 mAwContents.getSettings().updateAcceptLanguages();
148 146
149 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ; 147 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
150 148
151 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this, 149 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this,
152 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (), 150 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (),
153 "document.body.textContent")); 151 "document.body.textContent"));
154 assertEquals( 152 assertEquals("de-DE,de,ja-JP,ja,en-US,en", TextUtils.join(",", acceptLan guages));
155 LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", ac ceptLanguages));
156 153
157 // Test locales that contain "en-us" change at run time 154 // Test language code is inserted only after the last language tag that contains that
158 LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale( "en", "us"))); 155 // language.
156 LocaleList.setDefault(new LocaleList(new Locale("en", "GB"), new Locale( "en", "US")));
159 mAwContents.updateDefaultLocale(); 157 mAwContents.updateDefaultLocale();
160 mAwContents.getSettings().updateAcceptLanguages(); 158 mAwContents.getSettings().updateAcceptLanguages();
161 159
162 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ; 160 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
163 161
164 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this, 162 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this,
165 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (), 163 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (),
166 "document.body.textContent")); 164 "document.body.textContent"));
167 assertEquals( 165 assertEquals("en-GB,en-US,en", TextUtils.join(",", acceptLanguages));
168 LocaleUtils.getDefaultLocaleListString(), TextUtils.join(",", ac ceptLanguages));
169 166
170 // Test locales that do not contain "en-us" or "en-US" change at run tim e 167 LocaleList.setDefault(new LocaleList(new Locale("en", "GB"), new Locale( "ja", "JP")));
171 LocaleList.setDefault(new LocaleList(new Locale("de", "DE"), new Locale( "ja", "JP")));
172 mAwContents.updateDefaultLocale(); 168 mAwContents.updateDefaultLocale();
173 mAwContents.getSettings().updateAcceptLanguages(); 169 mAwContents.getSettings().updateAcceptLanguages();
174 170
175 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ; 171 loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url) ;
176 172
177 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this, 173 acceptLanguages = getAcceptLanguages(JSUtils.executeJavaScriptAndWaitFor Result(this,
178 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (), 174 mAwContents, mContentsClient.getOnEvaluateJavaScriptResultHelper (),
179 "document.body.textContent")); 175 "document.body.textContent"));
180 String[] acceptLangs = Arrays.copyOfRange(acceptLanguages, 0, acceptLang uages.length - 1); 176 assertEquals("en-GB,ja-JP,ja,en-US,en", TextUtils.join(",", acceptLangua ges));
181 assertEquals(LocaleUtils.getDefaultLocaleListString(), TextUtils.join(", ", acceptLangs));
182 } 177 }
183 } 178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698