1375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath/* 2375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * Copyright (C) 2014 Google Inc. 3375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * 4375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * use this file except in compliance with the License. You may obtain a copy of 6375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * the License at 7375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * 8375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 9375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * 10375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * Unless required by applicable law or agreed to in writing, software 11375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * License for the specific language governing permissions and limitations under 14375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath * the License. 15375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath */ 16375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 17375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathpackage libcore.java.util; 18375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 19386d30705bc91f8dd82843544f033595478b083bNarayan Kamathimport java.util.Collections; 20375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.HashMap; 21375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.HashSet; 22375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.Locale; 23375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.Map; 24375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.Set; 25375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport java.util.TreeMap; 26375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport junit.framework.TestCase; 27375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathimport libcore.icu.ICU; 28375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 29375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamathpublic class LocaleInternalsTest extends TestCase { 309c853c5b9ebbb0ef60a013ae10ee411d70dfa832Piotr Jastrzebski/* 31375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath public void test_serializeExtensions() { 32375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Map<Character, String> extensions = new TreeMap<Character, String>(); 33375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 34375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath extensions.put('x', "fooo-baar-baaz"); 35375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("x-fooo-baar-baaz", Locale.serializeExtensions(extensions)); 36375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 37375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath extensions.put('y', "gaaa-caar-caaz"); 38375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath // Must show up in lexical order. 39375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("x-fooo-baar-baaz-y-gaaa-caar-caaz", 40375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.serializeExtensions(extensions)); 41375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath } 42375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 43375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath public void test_parseSerializedExtensions() { 44375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Map<Character, String> extensions = new HashMap<Character, String>(); 45375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 46375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseSerializedExtensions("x-foo", extensions); 47375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("foo", extensions.get('x')); 48375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 49375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath extensions.clear(); 50375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseSerializedExtensions("x-foo-y-bar-z-baz", extensions); 51375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("foo", extensions.get('x')); 52375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("bar", extensions.get('y')); 53375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("baz", extensions.get('z')); 54375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 55375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath extensions.clear(); 56375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseSerializedExtensions("x-fooo-baar-baaz", extensions); 57375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("fooo-baar-baaz", extensions.get('x')); 58375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 59375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath extensions.clear(); 60375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseSerializedExtensions("x-fooo-baar-baaz-y-gaaa-caar-caaz", extensions); 61375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("fooo-baar-baaz", extensions.get('x')); 62375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("gaaa-caar-caaz", extensions.get('y')); 63375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath } 64375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 65375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath public void test_parseUnicodeExtension() { 66375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Map<String, String> keywords = new HashMap<String, String>(); 67375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Set<String> attributes = new HashSet<String>(); 68375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 69375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath // Only attributes. 70375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("foooo".split("-"), keywords, attributes); 71375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("foooo")); 72386d30705bc91f8dd82843544f033595478b083bNarayan Kamath assertEquals(Collections.EMPTY_SET, keywords.keySet()); 73375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 74375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath attributes.clear(); 75375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords.clear(); 76375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("foooo-baa-baaabaaa".split("-"), 77375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords, attributes); 78375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("foooo")); 79375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("baa")); 80375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("baaabaaa")); 81386d30705bc91f8dd82843544f033595478b083bNarayan Kamath assertEquals(Collections.EMPTY_SET, keywords.keySet()); 82375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 83375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath // Only keywords 84375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath attributes.clear(); 85375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords.clear(); 86375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("ko-koko".split("-"), keywords, attributes); 87375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.isEmpty()); 88375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("koko", keywords.get("ko")); 89375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 90375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath attributes.clear(); 91375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords.clear(); 92375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("ko-koko-kokoko".split("-"), keywords, attributes); 93375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.isEmpty()); 94375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("koko-kokoko", keywords.get("ko")); 95375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 96375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath attributes.clear(); 97375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords.clear(); 98375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("ko-koko-kokoko-ba-baba-bababa".split("-"), 99375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords, attributes); 100375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.isEmpty()); 101375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("koko-kokoko", keywords.get("ko")); 102375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("baba-bababa", keywords.get("ba")); 103375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 104375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath // A mixture of attributes and keywords. 105375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath attributes.clear(); 106375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords.clear(); 107375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.parseUnicodeExtension("attri1-attri2-k1-type1-type1-k2-type2".split("-"), 108375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath keywords, attributes); 109375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("attri1")); 110375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertTrue(attributes.contains("attri2")); 111375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("type1-type1", keywords.get("k1")); 112375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("type2", keywords.get("k2")); 113375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath } 114375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 115375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath public void test_setDefault_setsICUDefaultLocale() { 116375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.setDefault(Locale.GERMANY); 117375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals("de_DE", ICU.getDefaultLocale()); 118375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 119375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath try { 120375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.setDefault(null); 121375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath fail(); 122375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath } catch (NullPointerException expected) { 123375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath assertEquals(Locale.GERMANY, Locale.getDefault()); 124375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath } 125375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath 126375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath Locale.setDefault(new Locale("bogus", "LOCALE")); 127386d30705bc91f8dd82843544f033595478b083bNarayan Kamath assertEquals("und", ICU.getDefaultLocale()); 1289c853c5b9ebbb0ef60a013ae10ee411d70dfa832Piotr Jastrzebski } */ 129375ada15ae1724e447075277eeae33a4331eaedfNarayan Kamath} 130