summaryrefslogtreecommitdiffstats
path: root/luni
diff options
context:
space:
mode:
authorNarayan Kamath <narayan@google.com>2014-08-08 12:07:05 +0100
committerNarayan Kamath <narayan@google.com>2014-08-08 12:10:38 +0100
commit544adffddd26dcaa63255396bcfff8c935a28872 (patch)
treeffcfd713e201982df8f90141efb299d65bdc8b46 /luni
parentb00b6b6ee612e57097cf878dd7b41fbeece11b58 (diff)
downloadlibcore-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.java4
-rw-r--r--luni/src/test/java/libcore/java/util/LocaleTest.java15
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()));
+ }
}