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