Commit a540d48c authored by Changwan Ryu's avatar Changwan Ryu Committed by Commit Bot

Fix AcceptLanguageTest for N+

The test fails when non-English locale is used, or even when there is a
secondary language set in the language preferences.

Nougat introduced local lists, so checking the default locale isn't
enough to ensure that there isn't any secondary locale, and setting
the default locale does not remove the secondary locale.

This CL provides a separate code path for multiple locale check in N+.

Bug: 901230
Change-Id: I181378e79888a36d47db7c1c3ca360573fdec235
Reviewed-on: https://chromium-review.googlesource.com/c/1318670Reviewed-by: default avatarNate Fischer <ntfschr@chromium.org>
Commit-Queue: Changwan Ryu <changwan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605536}
parent eae4cef0
......@@ -77,8 +77,32 @@ public class AcceptLanguageTest {
return COMMA_AND_OPTIONAL_Q_VALUE.split(mActivityTestRule.maybeStripDoubleQuotes(raw));
}
private boolean isEnUsLocale() {
return "en-US".equals(Locale.getDefault().toLanguageTag());
@SuppressLint("NewApi")
private boolean isSingleLocale(String lang, String country) {
String languageTag = String.format("%s-%s", lang, country);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
// In N+, multiple locales can be set.
return languageTag.equals(LocaleList.getDefault().toLanguageTags());
} else {
return languageTag.equals(Locale.getDefault().toLanguageTag());
}
}
@SuppressLint("NewApi")
private void setSingleLocale(String lang, String country) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList.setDefault(new LocaleList(new Locale(lang, country)));
} else {
Locale.setDefault(new Locale(lang, country));
}
}
private void setLocaleForTesting(String lang, String country) {
if (!isSingleLocale(lang, country)) {
setSingleLocale(lang, country);
AwContents.updateDefaultLocale();
mAwContents.getSettings().updateAcceptLanguages();
}
}
/**
......@@ -88,13 +112,7 @@ public class AcceptLanguageTest {
@SmallTest
@Feature({"AndroidWebView"})
public void testAcceptLanguage() throws Throwable {
// Make sure that the current locale is en-US.
if (!isEnUsLocale()) {
Locale.setDefault(new Locale("en", "US"));
AwContents.updateDefaultLocale();
mAwContents.getSettings().updateAcceptLanguages();
}
Assert.assertTrue(isEnUsLocale());
setLocaleForTesting("en", "US");
mActivityTestRule.getAwSettingsOnUiThread(mAwContents).setJavaScriptEnabled(true);
......@@ -117,15 +135,14 @@ public class AcceptLanguageTest {
Assert.assertArrayEquals(new String[] {"en-US"}, acceptLanguagesJs);
// Test locale change at run time
Locale.setDefault(new Locale("de", "DE"));
AwContents.updateDefaultLocale();
mAwContents.getSettings().updateAcceptLanguages();
setLocaleForTesting("de", "DE");
mActivityTestRule.loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
acceptLanguages = getAcceptLanguages(
mActivityTestRule.getJavaScriptResultBodyTextContent(mAwContents, mContentsClient));
// Note that we extend the base language from language-region pair.
// Note that we extend the base language from language-region pair, and we put en-US and en
// at the end.
Assert.assertArrayEquals(new String[] {"de-DE", "de", "en-US", "en"}, acceptLanguages);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment