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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/physicalweb/PwsClientImplTest.java

Issue 2406203002: Use BCP47 compliant format for locale representation (Closed)
Patch Set: create to/forLanguageTag in LocaleUtils Created 4 years, 2 months 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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.chrome.browser.physicalweb; 5 package org.chromium.chrome.browser.physicalweb;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.test.InstrumentationTestCase; 8 import android.test.InstrumentationTestCase;
9 import android.test.suitebuilder.annotation.SmallTest; 9 import android.test.suitebuilder.annotation.SmallTest;
10 import android.text.TextUtils; 10 import android.text.TextUtils;
11 11
12 import org.chromium.base.LocaleUtils;
13
12 import java.util.Locale; 14 import java.util.Locale;
13 15
14 /** 16 /**
15 * Tests for the PwsClientImpl class. 17 * Tests for the PwsClientImpl class.
16 */ 18 */
17 public class PwsClientImplTest extends InstrumentationTestCase { 19 public class PwsClientImplTest extends InstrumentationTestCase {
18 private PwsClientImpl mPwsClientImpl; 20 private PwsClientImpl mPwsClientImpl;
19 21
20 @Override 22 @Override
21 protected void setUp() throws Exception { 23 protected void setUp() throws Exception {
22 super.setUp(); 24 super.setUp();
23 Context context = getInstrumentation().getTargetContext().getApplication Context(); 25 Context context = getInstrumentation().getTargetContext().getApplication Context();
24 mPwsClientImpl = new PwsClientImpl(context); 26 mPwsClientImpl = new PwsClientImpl(context);
25 } 27 }
26 28
27 @SmallTest 29 @SmallTest
28 public void testUserAgentNonEmpty() { 30 public void testUserAgentNonEmpty() {
29 assertFalse(TextUtils.isEmpty(mPwsClientImpl.getUserAgent())); 31 assertFalse(TextUtils.isEmpty(mPwsClientImpl.getUserAgent()));
30 } 32 }
31 33
32 @SmallTest 34 @SmallTest
33 public void testAcceptLanguageNonEmpty() { 35 public void testAcceptLanguageNonEmpty() {
34 assertFalse(TextUtils.isEmpty(mPwsClientImpl.getAcceptLanguage())); 36 assertFalse(TextUtils.isEmpty(mPwsClientImpl.updateAcceptLanguage()));
35 }
36
37 @SmallTest
38 public void testDefaultLocaleIsValid() {
39 // Ensure the current locale is of the form xx_XX, otherwise it will not be prepended
40 // correctly in prependToAcceptLanguagesIfNecessary.
41 String defaultLocale = Locale.getDefault().toString();
42 assertEquals(5, defaultLocale.length());
43 assertEquals('_', defaultLocale.charAt(2));
44 }
45
46 @SmallTest
47 public void testMakeLanguageTag() {
48 assertEquals("en-GB", PwsClientImpl.makeLanguageTag("en", "GB"));
49 assertEquals("fr-CA", PwsClientImpl.makeLanguageTag("fr", "CA"));
50 assertEquals("zh-TW", PwsClientImpl.makeLanguageTag("zh", "TW"));
51 }
52
53 @SmallTest
54 public void testLanguageTagSpecialCases() {
55 // Java mostly follows ISO-639-1 and ICU, except for the following three .
56 // See documentation on java.util.Locale constructor for more.
57 assertEquals("he-XX", PwsClientImpl.makeLanguageTag("iw", "XX"));
58 assertEquals("yi-XX", PwsClientImpl.makeLanguageTag("ji", "XX"));
59 assertEquals("id-XX", PwsClientImpl.makeLanguageTag("in", "XX"));
60 } 37 }
61 38
62 @SmallTest 39 @SmallTest
63 public void testLanguageTagIsIncludedInAcceptLanguageHeader() { 40 public void testLanguageTagIsIncludedInAcceptLanguageHeader() {
64 String defaultLocale = Locale.getDefault().toString(); 41 String defaultLocale = LocaleUtils.getDefaultLocale();
65 String languageCode = defaultLocale.substring(0, 2); 42 String[] languageTags = defaultLocale.split(",");
66 String countryCode = defaultLocale.substring(3);
67 String languageTag = PwsClientImpl.makeLanguageTag(languageCode, country Code);
68 43
69 // Ensure Accept-Language contains the full language tag. 44 // Ensure Accept-Language contains the full language tag.
70 String acceptLanguage = mPwsClientImpl.getAcceptLanguage(); 45 String acceptLanguage = mPwsClientImpl.updateAcceptLanguage();
71 assertTrue(acceptLanguage.contains(languageTag)); 46 for (String tag : languageTags) {
72 47 assertTrue(acceptLanguage.contains(tag));
73 // Ensure Accept-Language also contains the language code by itself. Inc lude the separator 48 // Ensure Accept-Language also contains the language code by itself.
74 // character so we don't match, for instance, the "en" in "en-US". 49 String languageCode;
75 assertTrue(acceptLanguage.startsWith(languageCode + ",") 50 if (tag.length() == 2 || tag.length() == 3) {
76 || acceptLanguage.contains(languageCode + ";") 51 languageCode = tag;
77 || acceptLanguage.equals(languageCode)); 52 } else if (tag.charAt(2) == '-') {
53 languageCode = tag.substring(0, 2);
54 } else { // length of the language code is 3.
55 languageCode = tag.substring(0, 3);
56 }
57 assertTrue(acceptLanguage.startsWith(languageCode + ",")
58 || acceptLanguage.contains(languageCode + ";")
59 || acceptLanguage.equals(languageCode));
60 }
78 } 61 }
79 62
80 @SmallTest 63 @SmallTest
81 public void testLanguageTagIsPrepended() { 64 public void testLanguageTagIsPrepended() {
82 String locale = new Locale("aa", "AA").toString(); 65 Locale locale = new Locale("aa", "AA");
66 String defaultLocale = LocaleUtils.getLocale(locale);
83 String languageList = "xx-XX,xx-YY,xx"; 67 String languageList = "xx-XX,xx-YY,xx";
84 68
85 // Should prepend the language tag "aa-AA" as well as the language code "aa". 69 // Should prepend the language tag "aa-AA" as well as the language code "aa".
86 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale, 70 String languageListWithTag =
87 languageList); 71 PwsClientImpl.prependToAcceptLanguagesIfNecessary(defaultLocale, languageList);
88 assertEquals("aa-AA,aa,xx-XX,xx-YY,xx", languageListWithTag); 72 assertEquals("aa-AA,aa,xx-XX,xx-YY,xx", languageListWithTag);
89 } 73 }
90 74
91 @SmallTest 75 @SmallTest
76 public void testLanguageOnlyTagIsPrepended() {
77 Locale locale = new Locale("aaa");
78 String defaultLocale = LocaleUtils.getLocale(locale);
79 String languageList = "xx-XX,xx-YY,xx";
80
81 // Should prepend the language code only language tag "aaa".
82 String languageListWithTag =
83 PwsClientImpl.prependToAcceptLanguagesIfNecessary(defaultLocale, languageList);
84 assertEquals("aaa,xx-XX,xx-YY,xx", languageListWithTag);
85 }
86
87 @SmallTest
88 public void testSpecialLengthCountryCodeIsPrepended() {
89 Locale locale = new Locale("aa", "000");
90 String defaultLocale = LocaleUtils.getLocale(locale);
91 String languageList = "xx-XX,xx-YY,xx";
92
93 // Should prepend the language tag "aa-AAA" as well as the language code "aa".
94 String languageListWithTag =
95 PwsClientImpl.prependToAcceptLanguagesIfNecessary(defaultLocale, languageList);
96 assertEquals("aa-000,aa,xx-XX,xx-YY,xx", languageListWithTag);
97 }
98
99 @SmallTest
92 public void testMultipleLanguageTagIsPrepended() { 100 public void testMultipleLanguageTagIsPrepended() {
93 String locale = "aa_AA,bb_BB"; 101 String locale = "aa-AA,bb-BB";
94 String languageList = "xx-XX,xx-YY,xx"; 102 String languageList = "xx-XX,xx-YY,xx";
95 103
96 // Should prepend the language tag "aa-AA" as well as the language code "aa". 104 // Should prepend the language tag "aa-AA" as well as the language code "aa".
97 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale, 105 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale,
98 languageList); 106 languageList);
99 assertEquals("aa-AA,aa,bb-BB,bb,xx-XX,xx-YY,xx", languageListWithTag); 107 assertEquals("aa-AA,aa,bb-BB,bb,xx-XX,xx-YY,xx", languageListWithTag);
100 108
101 // Make sure the language code is only inserted after the last languageT ag that 109 // Make sure the language code is only inserted after the last languageT ag that
102 // contains that language. 110 // contains that language.
103 locale = "aa_AA,bb_BB,bb_XX"; 111 locale = "aa-AA,bb-BB,bb-XX";
104 languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNecessary( locale, 112 languageListWithTag =
105 languageList); 113 PwsClientImpl.prependToAcceptLanguagesIfNecessary(locale, langua geList);
106 assertEquals("aa-AA,aa,bb-BB,bb-XX,bb,xx-XX,xx-YY,xx", languageListWithT ag); 114 assertEquals("aa-AA,aa,bb-BB,bb-XX,bb,xx-XX,xx-YY,xx", languageListWithT ag);
107 } 115 }
108 116
109 @SmallTest 117 @SmallTest
110 public void testLanguageTagIsPrependedWhenListContainsLanguageCode() { 118 public void testLanguageTagIsPrependedWhenListContainsLanguageCode() {
111 String locale = new Locale("xx", "XX").toString(); 119 Locale locale = new Locale("xx", "XX");
120 String defaultLocale = LocaleUtils.getLocale(locale);
112 String languageList = "xx-YY,xx"; 121 String languageList = "xx-YY,xx";
113 122
114 // Should prepend the language tag "xx-XX" but not the language code "xx " as it's already 123 // Should prepend the language tag "xx-XX" but not the language code "xx " as it's already
115 // included at the end of the list. 124 // included at the end of the list.
116 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale, 125 String languageListWithTag =
117 languageList); 126 PwsClientImpl.prependToAcceptLanguagesIfNecessary(defaultLocale, languageList);
118 assertEquals("xx-XX,xx-YY,xx", languageListWithTag); 127 assertEquals("xx-XX,xx-YY,xx", languageListWithTag);
119
120 // Test again with the language code "xx" in the middle of the list.
121 languageList = "xx-YY,xx-ZZ,xx";
122 languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNecessary( locale,
123 languageList);
124 assertEquals("xx-XX,xx-YY,xx-ZZ,xx", languageListWithTag);
125 }
126
127 @SmallTest
128 public void testInvalidLanguageTagNotPrepended() {
129 String locale = "not_valid";
130 String languageList = "xx-XX,xx";
131
132 // Language list should be unmodified since the language tag is invalid.
133 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale,
134 languageList);
135 assertEquals(languageList, languageListWithTag);
136 } 128 }
137 129
138 @SmallTest 130 @SmallTest
139 public void testLanguageTagNotPrependedWhenUnnecessary() { 131 public void testLanguageTagNotPrependedWhenUnnecessary() {
140 String locale = new Locale("xx", "XX").toString(); 132 Locale locale = new Locale("xx", "XX");
133 String defaultLocale = LocaleUtils.getLocale(locale);
141 String languageList = "xx-XX,xx-YY,xx"; 134 String languageList = "xx-XX,xx-YY,xx";
142 135
143 // Language list should be unmodified since the tag is already present. 136 // Language list should be unmodified since the tag is already present.
144 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale, 137 String languageListWithTag =
145 languageList); 138 PwsClientImpl.prependToAcceptLanguagesIfNecessary(defaultLocale, languageList);
146 assertEquals(languageList, languageListWithTag); 139 assertEquals(languageList, languageListWithTag);
147 } 140 }
148 141
149 @SmallTest 142 @SmallTest
150 public void testMultiLanguageTagNotPrependedWhenUnnecessary() { 143 public void testMultiLanguageTagNotPrependedWhenUnnecessary() {
151 String locale = "xx-XX,yy-YY"; 144 String locale = "xx-XX,yy-YY";
152 String languageList = "xx-XX,xx,yy-YY,yy"; 145 String languageList = "xx-XX,yy-YY,xx,yy";
153 146
154 // Language list should be unmodified since the tag is already present. 147 // Language list should be unmodified since the tag is already present. However, the order
148 // changes because a language-code-only language tag is acceptable now.
155 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale, 149 String languageListWithTag = PwsClientImpl.prependToAcceptLanguagesIfNec essary(locale,
156 languageList); 150 languageList);
157 assertEquals(languageList, languageListWithTag); 151 assertEquals(languageList, languageListWithTag);
158 } 152 }
159 153
160 @SmallTest 154 @SmallTest
161 public void testAcceptLanguageQvalues() { 155 public void testAcceptLanguageQvalues() {
162 String languageList = "xx-XX,xx-YY,xx,zz-ZZ,zz"; 156 String languageList = "xx-XX,xx-YY,xx,zz-ZZ,zz";
163 157
164 // Should insert q-values for each item except the first which implicitl y has q=1.0. 158 // Should insert q-values for each item except the first which implicitl y has q=1.0.
165 String acceptLanguage = PwsClientImpl.generateAcceptLanguageHeader(langu ageList); 159 String acceptLanguage = PwsClientImpl.generateAcceptLanguageHeader(langu ageList);
166 assertEquals("xx-XX,xx-YY;q=0.8,xx;q=0.6,zz-ZZ;q=0.4,zz;q=0.2", acceptLa nguage); 160 assertEquals("xx-XX,xx-YY;q=0.8,xx;q=0.6,zz-ZZ;q=0.4,zz;q=0.2", acceptLa nguage);
167 161
168 // When there are six or more items, the q-value should not go below 0.2 . 162 // When there are six or more items, the q-value should not go below 0.2 .
169 languageList = "xx-XA,xx-XB,xx-XC,xx-XD,xx-XE,xx-XF"; 163 languageList = "xx-XA,xx-XB,xx-XC,xx-XD,xx-XE,xx-XF";
170 acceptLanguage = PwsClientImpl.generateAcceptLanguageHeader(languageList ); 164 acceptLanguage = PwsClientImpl.generateAcceptLanguageHeader(languageList );
171 assertEquals("xx-XA,xx-XB;q=0.8,xx-XC;q=0.6,xx-XD;q=0.4,xx-XE;q=0.2,xx-X F;q=0.2", 165 assertEquals("xx-XA,xx-XB;q=0.8,xx-XC;q=0.6,xx-XD;q=0.4,xx-XE;q=0.2,xx-X F;q=0.2",
172 acceptLanguage); 166 acceptLanguage);
173 } 167 }
174 } 168 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698