/* * Copyright 2009 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.i18n.server; import com.google.gwt.i18n.shared.GwtLocale; import com.google.gwt.i18n.shared.GwtLocaleFactory; import junit.framework.TestCase; import java.util.Arrays; import java.util.List; /** * Test GwtLocale. */ public class GwtLocaleTest extends TestCase { private GwtLocaleFactory factory = new GwtLocaleFactoryImpl(); public void testAliases() { GwtLocale en = factory.fromString("en"); List<GwtLocale> aliases = en.getAliases(); assertEquals(aliases.get(0), en); GwtLocale enLatn = factory.fromString("en_Latn"); assertContainsAndGetPosition(aliases, enLatn); assertTrue(en.usesSameScript(enLatn)); assertTrue(enLatn.inheritsFrom(en)); assertFalse(en.inheritsFrom(enLatn)); assertFalse(en.inheritsFrom(en)); GwtLocale pt = factory.fromString("pt"); aliases = pt.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("pt_BR")); GwtLocale iw = factory.fromString("iw"); aliases = iw.getAliases(); GwtLocale he = factory.fromString("he"); assertEquals(aliases.get(0), he); assertContainsAndGetPosition(aliases, factory.fromString("iw_Hebr")); aliases = he.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("iw_Hebr")); GwtLocale id = factory.fromString("id"); aliases = id.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("in")); GwtLocale mo = factory.fromString("mo"); aliases = mo.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("ro")); GwtLocale jv = factory.fromString("jv"); aliases = jv.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("jw")); GwtLocale ji = factory.fromString("ji"); aliases = ji.getAliases(); assertContainsAndGetPosition(aliases, factory.fromString("yi")); } public void testCanonicalForm() { GwtLocale zhCN = factory.fromString("zh_CN"); GwtLocale zhHansCN = factory.fromString("zh_Hans_CN"); GwtLocale zhHant = factory.fromString("zh_Hant"); GwtLocale zhTW = factory.fromString("zh_TW"); GwtLocale zhHantTW = factory.fromString("zh_Hant_TW"); GwtLocale zhHans = factory.fromString("zh_Hans"); assertEquals(zhCN, zhHansCN.getCanonicalForm()); assertEquals(zhTW, zhHantTW.getCanonicalForm()); assertEquals(zhCN, zhHans.getCanonicalForm()); assertEquals(zhTW, zhHant.getCanonicalForm()); GwtLocale paPK = factory.fromString("pa_PK"); GwtLocale paArabPK = factory.fromString("pa_Arab_PK"); assertEquals(paPK, paArabPK.getCanonicalForm()); } public void testCompare() { GwtLocale[] locales = new GwtLocale[] { factory.fromString("en_US_POSIX"), factory.fromString("en"), factory.fromString("es-419"), factory.fromString("en-gb"), factory.fromString("en-AU-OUTBACK"), factory.fromString("es_AR"), factory.fromString("en_US"), factory.fromString("en_Latn"), factory.fromString("es-ES"), }; Arrays.sort(locales); assertEquals("en", locales[0].getAsString()); assertEquals("en_AU_OUTBACK", locales[1].getAsString()); assertEquals("en_GB", locales[2].getAsString()); assertEquals("en_US", locales[3].getAsString()); assertEquals("en_US_POSIX", locales[4].getAsString()); assertEquals("en_Latn", locales[5].getAsString()); assertEquals("es_419", locales[6].getAsString()); assertEquals("es_AR", locales[7].getAsString()); assertEquals("es_ES", locales[8].getAsString()); // Test equals against some non-GwtLocale class assertFalse(locales[0].equals(factory)); } public void testDefault() { GwtLocale def1 = factory.getDefault(); GwtLocale def2 = factory.fromString("default"); assertSame(def1, def2); assertTrue(def1.isDefault()); assertEquals("", def1.getLanguageNotNull()); assertEquals("", def1.getScriptNotNull()); assertEquals("", def1.getRegionNotNull()); assertEquals("", def1.getVariantNotNull()); GwtLocale def3 = factory.fromString(null); assertSame(def1, def3); GwtLocale def4 = factory.fromComponents("", "", "", ""); assertSame(def1, def4); } public void testFromComponents() { GwtLocale test = factory.fromComponents("a", "b", "c", "d"); assertEquals("a", test.getLanguage()); assertEquals("B", test.getScript()); assertEquals("C", test.getRegion()); assertEquals("D", test.getVariant()); } public void testFromString() { GwtLocale ha = factory.fromString("ha_Arab_NG"); assertEquals("ha", ha.getLanguage()); assertEquals("Arab", ha.getScript()); assertEquals("NG", ha.getRegion()); assertNull(ha.getVariant()); GwtLocale us1 = factory.fromString("en-us"); GwtLocale us2 = factory.fromString("en_US"); assertSame(us1, us2); GwtLocale us3 = factory.fromString("EN_uS"); assertSame(us1, us3); assertEquals("en", us3.getLanguageNotNull()); assertNull(us3.getScript()); assertEquals("US", us3.getRegionNotNull()); assertNull(us3.getVariant()); GwtLocale en = factory.fromString("en-VARIANT"); assertEquals("en", en.getLanguage()); assertNull(en.getScript()); assertNull(en.getRegion()); assertEquals("VARIANT", en.getVariantNotNull()); en = factory.fromString("en_variant"); assertEquals("en", en.getLanguage()); assertNull(en.getScript()); assertNull(en.getRegion()); assertEquals("VARIANT", en.getVariant()); GwtLocale zh = factory.fromString("zh-min-nan-Hant-CN"); assertEquals("zh-min-nan", zh.getLanguage()); assertEquals("Hant", zh.getScriptNotNull()); assertEquals("CN", zh.getRegion()); assertNull(zh.getVariant()); assertFalse(ha.usesSameScript(zh)); zh = factory.fromString("zh_min_nan_Hant_CN"); assertEquals("zh-min-nan", zh.getLanguage()); GwtLocale variant4 = factory.fromString("en-1234"); assertNull(variant4.getScript()); assertEquals("1234", variant4.getVariant()); GwtLocale extLang = factory.fromString("en-ext"); assertEquals("en-ext", extLang.getLanguage()); try { factory.fromString("english_USA"); fail("Should have thrown IllegalArgumentException on english_USA"); } catch (IllegalArgumentException expected) { } } public void testInheritance() { GwtLocale en = factory.fromString("en_Latn_US_VARIANT"); List<GwtLocale> chain = en.getInheritanceChain(); assertEquals(12, chain.size()); assertEquals(en, chain.get(0)); assertEquals(factory.fromString("en_Latn_US"), chain.get(1)); assertEquals(factory.fromString("en_Latn_021"), chain.get(2)); assertEquals(factory.fromString("en_Latn_019"), chain.get(3)); assertEquals(factory.fromString("en_Latn_001"), chain.get(4)); assertEquals(factory.fromString("en_Latn"), chain.get(5)); assertEquals(factory.fromString("en_US"), chain.get(6)); assertEquals(factory.fromString("en_021"), chain.get(7)); assertEquals(factory.fromString("en_019"), chain.get(8)); assertEquals(factory.fromString("en_001"), chain.get(9)); assertEquals(factory.fromString("en"), chain.get(10)); assertEquals(factory.getDefault(), chain.get(11)); } public void testInstanceCache() { GwtLocale a = factory.fromString("en_US"); GwtLocale b = factory.fromString("en_US"); assertFalse(a.isDefault()); assertSame(a, b); assertEquals(a, b); assertEquals(a.hashCode(), b.hashCode()); } public void testPrivate() { GwtLocale priv = factory.fromString("x-mylang"); assertEquals("x-mylang", priv.getLanguage()); assertNull(priv.getScript()); assertNull(priv.getRegion()); assertNull(priv.getVariant()); assertFalse(priv.isDefault()); } public void testScriptAliases() { GwtLocale zhCN = factory.fromString("zh_CN"); List<GwtLocale> aliases = zhCN.getAliases(); assertEquals(2, aliases.size()); assertEquals(aliases.get(0), zhCN); assertContainsAndGetPosition(aliases, factory.fromString("zh_Hans_CN")); GwtLocale zhHant = factory.fromString("zh_Hant"); aliases = zhHant.getAliases(); assertEquals(aliases.get(0), factory.fromString("zh_TW")); assertContainsAndGetPosition(aliases, factory.fromString("zh_Hant_TW")); GwtLocale zhHans = factory.fromString("zh_Hans"); aliases = zhHans.getAliases(); assertEquals(aliases.get(0), zhCN); assertContainsAndGetPosition(aliases, factory.fromString("zh_Hans_CN")); assertContainsAndGetPosition(aliases, zhHans); GwtLocale paPK = factory.fromString("pa_PK"); GwtLocale paArabPK = factory.fromString("pa_Arab_PK"); aliases = paPK.getAliases(); assertContainsAndGetPosition(aliases, paArabPK); } public void testSearchList() { GwtLocale nbNO = factory.fromString("nb_NO"); List<GwtLocale> searchList = nbNO.getCompleteSearchList(); int idx_nb_154 = assertContainsAndGetPosition(searchList, factory.fromString("nb_154")); assertContainsAndGetPosition(searchList, factory.fromString("no_154_BOKMAL")); int idx_no = assertContainsAndGetPosition(searchList, factory.fromString("no_BOKMAL")); assertTrue("nb_154 should come before no_BOKMAL", idx_nb_154 < idx_no); int idx_default = assertContainsAndGetPosition(searchList, factory.getDefault()); assertEquals(searchList.size() - 1, idx_default); GwtLocale esMX = factory.fromString("es_MX"); searchList = esMX.getCompleteSearchList(); assertContainsAndGetPosition(searchList, factory.fromString("es_013")); assertContainsAndGetPosition(searchList, factory.fromString("es_419")); GwtLocale srCyrlBA = factory.fromString("sr_Cyrl_BA"); searchList = srCyrlBA.getCompleteSearchList(); assertContainsAndGetPosition(searchList, factory.fromString("sr_Cyrl")); assertContainsAndGetPosition(searchList, factory.fromString("sr_BA")); assertContainsAndGetPosition(searchList, factory.fromString("sr")); assertContainsAndGetPosition(searchList, factory.getDefault()); GwtLocale noNynorsk = factory.fromString("no_NYNORSK"); searchList = noNynorsk.getCompleteSearchList(); assertContainsAndGetPosition(searchList, factory.fromString("nn")); assertContainsAndGetPosition(searchList, factory.fromString("no")); GwtLocale zhTW = factory.fromString("zh_TW"); searchList = zhTW.getCompleteSearchList(); int hantPos = assertContainsAndGetPosition(searchList, factory.fromString("zh_Hant")); int zhPos = assertContainsAndGetPosition(searchList, factory.fromString("zh")); assertNotContains(searchList, factory.fromString("zh_Hans")); assertTrue("zh_Hant should appear before zh in zh_TW searchlist " + searchList, hantPos < zhPos); idx_default = assertContainsAndGetPosition(searchList, factory.getDefault()); assertEquals(searchList.size() - 1, idx_default); GwtLocale pa = factory.fromString("pa"); GwtLocale paPK = factory.fromString("pa_PK"); GwtLocale paArab = factory.fromString("pa_Arab"); GwtLocale paGuru = factory.fromString("pa_Guru"); searchList = paPK.getCompleteSearchList(); int arabPos = assertContainsAndGetPosition(searchList, paArab); int paPos = assertContainsAndGetPosition(searchList, pa); assertNotContains(searchList, paGuru); assertTrue("pa_Arab should appear before pa in pa_PK searchlist " + searchList, arabPos < paPos); } private <T> int assertContainsAndGetPosition(List<T> list, T value) { int idx = list.indexOf(value); assertTrue("List " + list + " should have contained " + value, idx >= 0); return idx; } private <T> void assertNotContains(List<T> list, T value) { assertFalse("List " + list + " should not have contained " + value, list.contains(value)); } }