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:29:21 +0100 |
commit | 4ddaa41a0b03823742021992d2da86b78f5af034 (patch) | |
tree | 7e3984a20d5bad01816820d0c9b38f51088f3a24 | |
parent | 5be551c3ea07aef05208a4353bed47da2b55d70c (diff) | |
download | libcore-4ddaa41a0b03823742021992d2da86b78f5af034.zip libcore-4ddaa41a0b03823742021992d2da86b78f5af034.tar.gz libcore-4ddaa41a0b03823742021992d2da86b78f5af034.tar.bz2 |
Variants are case sensitive.
Yet we were incorrectly upper-casing them inside forLanguageTag.
bug: 16811867
(cherry picked from commit 544adffddd26dcaa63255396bcfff8c935a28872)
Change-Id: Ide9d9632a3e357728685dd0cde127f025d34113b
-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 d5c2d02..09fb6e0 100644 --- a/luni/src/main/java/java/util/Locale.java +++ b/luni/src/main/java/java/util/Locale.java @@ -2071,7 +2071,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) { @@ -2079,7 +2079,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())); + } } |