| OLD | NEW |
| 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 } |
| OLD | NEW |