diff options
author | Narayan Kamath <narayan@google.com> | 2014-08-08 12:07:05 +0100 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2014-08-08 12:10:38 +0100 |
commit | 544adffddd26dcaa63255396bcfff8c935a28872 (patch) | |
tree | ffcfd713e201982df8f90141efb299d65bdc8b46 /luni | |
parent | b00b6b6ee612e57097cf878dd7b41fbeece11b58 (diff) | |
download | libcore-544adffddd26dcaa63255396bcfff8c935a28872.zip libcore-544adffddd26dcaa63255396bcfff8c935a28872.tar.gz libcore-544adffddd26dcaa63255396bcfff8c935a28872.tar.bz2 |
Variants are case sensitive.
Yet we were incorrectly upper-casing them inside forLanguageTag.
bug: 16811867
Change-Id: I088161c4c7769908f35b9f2b7d945fb1cd1fd7ac
Diffstat (limited to 'luni')
-rw-r--r-- | luni/src/main/java/java/util/Locale.java | 4 | ||||
-rw-r--r-- | luni/src/test/java/libcore/java/util/LocaleTest.java | 15 |
2 files changed, 13 insertions, 6 deletions
diff --git a/luni/src/main/java/java/util/Locale.java b/luni/src/main/java/java/util/Locale.java index da3e6a5..9cd89ec 100644 --- a/luni/src/main/java/java/util/Locale.java +++ b/luni/src/main/java/java/util/Locale.java @@ -2080,7 +2080,7 @@ public final class Locale implements Cloneable, Serializable { /** * Scans elements of {@code subtags} in the range {@code [startIndex, endIndex)} * and appends valid variant subtags upto the first invalid subtag (if any) to - * {@code normalizedVariants}. All appended variant subtags are converted to uppercase. + * {@code normalizedVariants}. */ private static void extractVariantSubtags(String[] subtags, int startIndex, int endIndex, List<String> normalizedVariants) { @@ -2088,7 +2088,7 @@ public final class Locale implements Cloneable, Serializable { final String subtag = subtags[i]; if (Builder.isValidVariantSubtag(subtag)) { - normalizedVariants.add(subtag.toUpperCase(Locale.ROOT)); + normalizedVariants.add(subtag); } else { break; } diff --git a/luni/src/test/java/libcore/java/util/LocaleTest.java b/luni/src/test/java/libcore/java/util/LocaleTest.java index 23a4f28..c72ecd7 100644 --- a/luni/src/test/java/libcore/java/util/LocaleTest.java +++ b/luni/src/test/java/libcore/java/util/LocaleTest.java @@ -664,14 +664,14 @@ public class LocaleTest extends junit.framework.TestCase { assertEquals("en", l.getLanguage()); assertEquals("Latn", l.getScript()); assertEquals("US", l.getCountry()); - assertEquals("FOOOO", l.getVariant()); + assertEquals("foooo", l.getVariant()); // Variant with multiple subtags. l = fromLanguageTag("en-Latn-US-foooo-gfffh", useBuilder); assertEquals("en", l.getLanguage()); assertEquals("Latn", l.getScript()); assertEquals("US", l.getCountry()); - assertEquals("FOOOO_GFFFH", l.getVariant()); + assertEquals("foooo_gfffh", l.getVariant()); // Variant with 3 subtags. POSIX shouldn't be recognized // as a region or a script. @@ -701,7 +701,7 @@ public class LocaleTest extends junit.framework.TestCase { assertEquals("en", l.getLanguage()); assertEquals("Latn", l.getScript()); assertEquals("GB", l.getCountry()); - assertEquals("FOOOO", l.getVariant()); + assertEquals("foooo", l.getVariant()); assertEquals("fo-bar-baaz", l.getExtension('g')); // Multiple extensions @@ -709,7 +709,7 @@ public class LocaleTest extends junit.framework.TestCase { assertEquals("en", l.getLanguage()); assertEquals("Latn", l.getScript()); assertEquals("US", l.getCountry()); - assertEquals("FOOOO", l.getVariant()); + assertEquals("foooo", l.getVariant()); assertEquals("fo-bar", l.getExtension('g')); assertEquals("go-gaz", l.getExtension('h')); @@ -1139,4 +1139,11 @@ public class LocaleTest extends junit.framework.TestCase { assertEquals("", enochian.getScript()); assertEquals("", enochian.getVariant()); } + + // Test case from http://b/16811867 + public void testVariantsCaseSensitive() { + final Locale locale = new Locale("en", "US", "variant"); + assertEquals("variant", locale.getVariant()); + assertEquals(locale, Locale.forLanguageTag(locale.toLanguageTag())); + } } |