1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */ 2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* 5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ******************************************************************************* 6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2003-2014, International Business Machines Corporation and * 7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved. * 8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ******************************************************************************* 9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.collator; 12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Arrays; 14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Collections; 15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.HashMap; 16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.HashSet; 17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Iterator; 18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Locale; 19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Map; 20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.MissingResourceException; 21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Set; 22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 23f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test; 24f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert 25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk; 26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.Collator; 27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.Collator.CollatorFactory; 28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.ULocale; 29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class CollationServiceTest extends TestFmwk { 31f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Test 32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void TestRegister() { 33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // register a singleton 34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator frcol = Collator.getInstance(ULocale.FRANCE); 35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator uscol = Collator.getInstance(ULocale.US); 36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { // try override en_US collator 38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Object key = Collator.registerInstance(frcol, ULocale.US); 39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator ncol = Collator.getInstance(ULocale.US); 40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!frcol.equals(ncol)) { 41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("register of french collator for en_US failed"); 42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // coverage 45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator test = Collator.getInstance(ULocale.GERMANY); // CollatorFactory.handleCreate 46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!test.getLocale(ULocale.VALID_LOCALE).equals(ULocale.GERMAN)) { 47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("Collation from Germany is really " + test.getLocale(ULocale.VALID_LOCALE)); 48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!Collator.unregister(key)) { 51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("failed to unregister french collator"); 52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ncol = Collator.getInstance(ULocale.US); 54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!uscol.equals(ncol)) { 55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("collator after unregister does not match original"); 56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale fu_FU = new ULocale("fu_FU_FOO"); 60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { // try create collator for new locale 62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator fucol = Collator.getInstance(fu_FU); 63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Object key = Collator.registerInstance(frcol, fu_FU); 64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator ncol = Collator.getInstance(fu_FU); 65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!frcol.equals(ncol)) { 66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("register of fr collator for fu_FU failed"); 67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale[] locales = Collator.getAvailableULocales(); 70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean found = false; 71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < locales.length; ++i) { 72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (locales[i].equals(fu_FU)) { 73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin found = true; 74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin break; 75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!found) { 78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("new locale fu_FU not reported as supported locale"); 79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try{ 81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String name = Collator.getDisplayName(fu_FU); 82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!"fu (FU, FOO)".equals(name) 83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin && !"fu_FU_FOO".equals(name) /* no LocaleDisplayNamesImpl */) { 84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("found " + name + " for fu_FU"); 85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }catch(MissingResourceException ex){ 87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin warnln("Could not load locale data."); 88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try{ 90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String name = Collator.getDisplayName(fu_FU, fu_FU); 91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!"fu (FU, FOO)".equals(name) 92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin && !"fu_FU_FOO".equals(name) /* no LocaleDisplayNamesImpl */) { 93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("found " + name + " for fu_FU"); 94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }catch(MissingResourceException ex){ 96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin warnln("Could not load locale data."); 97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!Collator.unregister(key)) { 100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("failed to unregister french collator"); 101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ncol = Collator.getInstance(fu_FU); 103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!fucol.equals(ncol)) { 104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("collator after unregister does not match original fu_FU"); 105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { 109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // coverage after return to default 110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale[] locales = Collator.getAvailableULocales(); 111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < locales.length; ++i) { 113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (locales[i].equals(fu_FU)) { 114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("new locale fu_FU not reported as supported locale"); 115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin break; 116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator ncol = Collator.getInstance(ULocale.US); 120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!ncol.getLocale(ULocale.VALID_LOCALE).equals(ULocale.US)) { 121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("Collation from US is really " + ncol.getLocale(ULocale.VALID_LOCALE)); 122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 126f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Test 127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void TestRegisterFactory() { 128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin class CollatorInfo { 130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale locale; 131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator collator; 132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Map displayNames; // locale -> string 133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorInfo(ULocale locale, Collator collator, Map displayNames) { 135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.locale = locale; 136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.collator = collator; 137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.displayNames = displayNames; 138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String getDisplayName(ULocale displayLocale) { 141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String name = null; 142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (displayNames != null) { 143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin name = (String)displayNames.get(displayLocale); 144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (name == null) { 146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin name = locale.getDisplayName(displayLocale); 147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return name; 149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin class TestFactory extends CollatorFactory { 153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private Map map; 154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private Set ids; 155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin TestFactory(CollatorInfo[] info) { 157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin map = new HashMap(); 158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < info.length; ++i) { 159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorInfo ci = info[i]; 160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin map.put(ci.locale, ci); 161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public Collator createCollator(ULocale loc) { 165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorInfo ci = (CollatorInfo)map.get(loc); 166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (ci != null) { 167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return ci.collator; 168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return null; 170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public String getDisplayName(ULocale objectLocale, ULocale displayLocale) { 173aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorInfo ci = (CollatorInfo)map.get(objectLocale); 174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (ci != null) { 175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return ci.getDisplayName(displayLocale); 176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return null; 178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public Set getSupportedLocaleIDs() { 181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (ids == null) { 182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin HashSet set = new HashSet(); 183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Iterator iter = map.keySet().iterator(); 184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin while (iter.hasNext()) { 185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale locale = (ULocale)iter.next(); 186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String id = locale.toString(); 187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin set.add(id); 188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ids = Collections.unmodifiableSet(set); 190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return ids; 192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin class TestFactoryWrapper extends CollatorFactory { 196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorFactory delegate; 197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 198aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin TestFactoryWrapper(CollatorFactory delegate) { 199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin this.delegate = delegate; 200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public Collator createCollator(ULocale loc) { 203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return delegate.createCollator(loc); 204aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 205aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 206aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // use CollatorFactory getDisplayName(ULocale, ULocale) for coverage 207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public Set getSupportedLocaleIDs() { 209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return delegate.getSupportedLocaleIDs(); 210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale fu_FU = new ULocale("fu_FU"); 214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale fu_FU_FOO = new ULocale("fu_FU_FOO"); 215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Map fuFUNames = new HashMap(); 217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin fuFUNames.put(fu_FU, "ze leetle bunny Fu-Fu"); 218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin fuFUNames.put(fu_FU_FOO, "zee leetel bunny Foo-Foo"); 219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin fuFUNames.put(ULocale.US, "little bunny Foo Foo"); 220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator frcol = Collator.getInstance(ULocale.FRANCE); 222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /* Collator uscol = */Collator.getInstance(ULocale.US); 223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator gecol = Collator.getInstance(ULocale.GERMANY); 224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator jpcol = Collator.getInstance(ULocale.JAPAN); 225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator fucol = Collator.getInstance(fu_FU); 226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin CollatorInfo[] info = { 228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new CollatorInfo(ULocale.US, frcol, null), 229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new CollatorInfo(ULocale.FRANCE, gecol, null), 230aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new CollatorInfo(fu_FU, jpcol, fuFUNames), 231aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }; 232aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin TestFactory factory = null; 233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try{ 234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin factory = new TestFactory(info); 235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }catch(MissingResourceException ex){ 236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin warnln("Could not load locale data."); 237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // coverage 239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { 240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin TestFactoryWrapper wrapper = new TestFactoryWrapper(factory); // in java, gc lets us easily multiply reference! 241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Object key = Collator.registerFactory(wrapper); 242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String name = null; 243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin try{ 244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin name = Collator.getDisplayName(fu_FU, fu_FU_FOO); 245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }catch(MissingResourceException ex){ 246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin warnln("Could not load locale data."); 247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 248aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin logln("*** default name: " + name); 249aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator.unregister(key); 250aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 251aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale bar_BAR = new ULocale("bar_BAR"); 252aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator col = Collator.getInstance(bar_BAR); 253aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale valid = col.getLocale(ULocale.VALID_LOCALE); 254aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String validName = valid.getName(); 255aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if(validName.length() != 0 && !validName.equals("root")) { 256aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("Collation from bar_BAR is really \"" + validName + "\" but should be root"); 257aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 258aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 259aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 260aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin int n1 = checkAvailable("before registerFactory"); 261aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 262aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin { 263aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Object key = Collator.registerFactory(factory); 264aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 265aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin int n2 = checkAvailable("after registerFactory"); 266aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 267aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Collator ncol = Collator.getInstance(ULocale.US); 268aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!frcol.equals(ncol)) { 269aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("frcoll for en_US failed"); 270aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 271aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 272aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ncol = Collator.getInstance(fu_FU_FOO); 273aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!jpcol.equals(ncol)) { 274aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("jpcol for fu_FU_FOO failed, got: " + ncol); 275aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 276aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 277aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale[] locales = Collator.getAvailableULocales(); 278aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean found = false; 279aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < locales.length; ++i) { 280aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (locales[i].equals(fu_FU)) { 281aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin found = true; 282aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin break; 283aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 284aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 285aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!found) { 286aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("new locale fu_FU not reported as supported locale"); 287aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 288aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 289aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String name = Collator.getDisplayName(fu_FU); 290aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!"little bunny Foo Foo".equals(name)) { 291aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("found " + name + " for fu_FU"); 292aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 293aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 294aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin name = Collator.getDisplayName(fu_FU, fu_FU_FOO); 295aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!"zee leetel bunny Foo-Foo".equals(name)) { 296aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("found " + name + " for fu_FU in fu_FU_FOO"); 297aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 298aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 299aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!Collator.unregister(key)) { 300aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("failed to unregister factory"); 301aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 302aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 303aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin int n3 = checkAvailable("after unregister"); 304aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertTrue("register increases count", n2>n1); 305aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertTrue("unregister restores count", n3==n1); 306aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 307aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ncol = Collator.getInstance(fu_FU); 308aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!fucol.equals(ncol)) { 309aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("collator after unregister does not match original fu_FU"); 310aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 311aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 312aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 313aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 314aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin /** 315aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Check the integrity of the results of Collator.getAvailableULocales(). 316aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Return the number of items returned. 317aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */ 318aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin int checkAvailable(String msg) { 319aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin Locale locs[] = Collator.getAvailableLocales(); 320aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!assertTrue("getAvailableLocales != null", locs!=null)) return -1; 321aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin checkArray(msg, locs, null); 322aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale ulocs[] = Collator.getAvailableULocales(); 323aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!assertTrue("getAvailableULocales != null", ulocs!=null)) return -1; 324aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin checkArray(msg, ulocs, null); 325aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // This is not true because since ULocale objects with script code cannot be 326aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // converted to Locale objects 327aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin //assertTrue("getAvailableLocales().length == getAvailableULocales().length", locs.length == ulocs.length); 328aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return locs.length; 329aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 330aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 331aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private static final String KW[] = { 332aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "collation" 333aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }; 334aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 335aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private static final String KWVAL[] = { 336aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "phonebook", 337aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "stroke" 338aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }; 339aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 340f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Test 341aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void TestSeparateTrees() { 342aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String kw[] = Collator.getKeywords(); 343aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!assertTrue("getKeywords != null", kw!=null)) return; 344aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin checkArray("getKeywords", kw, KW); 345aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 346aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String kwval[] = Collator.getKeywordValues(KW[0]); 347aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!assertTrue("getKeywordValues != null", kwval!=null)) return; 348aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin checkArray("getKeywordValues", kwval, KWVAL); 349aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 350aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean isAvailable[] = new boolean[1]; 351aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale equiv = Collator.getFunctionalEquivalent(KW[0], 352aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new ULocale("de"), 353aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin isAvailable); 354aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (assertTrue("getFunctionalEquivalent(de)!=null", equiv!=null)) { 355aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertEquals("getFunctionalEquivalent(de)", "root", equiv.toString()); 356aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 357aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertTrue("getFunctionalEquivalent(de).isAvailable==true", 358aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin isAvailable[0] == true); 359aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 360aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin equiv = Collator.getFunctionalEquivalent(KW[0], 361aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin new ULocale("de_DE"), 362aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin isAvailable); 363aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (assertTrue("getFunctionalEquivalent(de_DE)!=null", equiv!=null)) { 364aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertEquals("getFunctionalEquivalent(de_DE)", "root", equiv.toString()); 365aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 366aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertTrue("getFunctionalEquivalent(de_DE).isAvailable==false", 367aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin isAvailable[0] == false); 368aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 369aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin equiv = Collator.getFunctionalEquivalent(KW[0], new ULocale("zh_Hans")); 370aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (assertTrue("getFunctionalEquivalent(zh_Hans)!=null", equiv!=null)) { 371aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin assertEquals("getFunctionalEquivalent(zh_Hans)", "zh", equiv.toString()); 372aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 373aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 374aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 375f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Test 376aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void TestGetFunctionalEquivalent() { 377aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String kw[] = Collator.getKeywords(); 378aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin final String DATA[] = { 379aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv", "sv", "t", 380aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=direct", "sv", "t", 381aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=traditional", "sv", "t", 382aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=gb2312han", "sv", "t", 383aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=stroke", "sv", "t", 384aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=pinyin", "sv", "t", 385aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=standard", "sv@collation=standard", "t", 386aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=reformed", "sv", "t", 387aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv@collation=big5han", "sv", "t", 388aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI", "sv", "f", 389aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=direct", "sv", "f", 390aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=traditional", "sv", "f", 391aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=gb2312han", "sv", "f", 392aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=stroke", "sv", "f", 393aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=pinyin", "sv", "f", 394aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=standard", "sv@collation=standard", "f", 395aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=reformed", "sv", "f", 396aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "sv_FI@collation=big5han", "sv", "f", 397aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl", "root", "t", 398aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl@collation=direct", "root", "t", 399aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE", "root", "f", 400aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=direct", "root", "f", 401aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=traditional", "root", "f", 402aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=gb2312han", "root", "f", 403aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=stroke", "root", "f", 404aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=pinyin", "root", "f", 405aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=big5han", "root", "f", 406aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "nl_BE@collation=phonebook", "root", "f", 407aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "en_US_VALLEYGIRL","root","f" 408aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }; 409aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin final int DATA_COUNT=(DATA.length/3); 410aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 411aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for(int i=0;i<DATA_COUNT;i++) { 412aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean isAvailable[] = new boolean[1]; 413aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale input = new ULocale(DATA[(i*3)+0]); 414aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale expect = new ULocale(DATA[(i*3)+1]); 415aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean expectAvailable = DATA[(i*3)+2].equals("t"); 416aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale actual = Collator.getFunctionalEquivalent(kw[0],input,isAvailable); 417aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if(!actual.equals(expect) || (expectAvailable!=isAvailable[0])) { 418aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("#" + i + ": Collator.getFunctionalEquivalent(" + input + ")=" + actual + ", avail " + new Boolean(isAvailable[0]) + ", " + 419aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin "expected " + expect + " avail " + new Boolean(expectAvailable)); 420aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } else { 421aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin logln("#" + i + ": Collator.getFunctionalEquivalent(" + input + ")=" + actual + ", avail " + new Boolean(isAvailable[0])); 422aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 423aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 424aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 425aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 426aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// public void PrintFunctionalEquivalentList() { 427aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// ULocale[] locales = Collator.getAvailableULocales(); 428aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// String[] keywords = Collator.getKeywords(); 429aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// logln("Collation"); 430aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// logln("Possible keyword=values pairs:"); 431aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// for (int i = 0; i < Collator.getKeywords().length; ++i) { 432aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// String[] values = Collator.getKeywordValues(keywords[i]); 433aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// for (int j = 0; j < values.length; ++j) { 434aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// System.out.println(keywords[i] + "=" + values[j]); 435aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 436aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 437aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// logln("Differing Collators:"); 438aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// boolean[] isAvailable = {true}; 439aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// for (int k = 0; k < locales.length; ++k) { 440aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// logln(locales[k].getDisplayName(ULocale.ENGLISH) + " [" +locales[k] + "]"); 441aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// for (int i = 0; i < Collator.getKeywords().length; ++i) { 442aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// ULocale base = Collator.getFunctionalEquivalent(keywords[i],locales[k]); 443aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// String[] values = Collator.getKeywordValues(keywords[i]); 444aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// for (int j = 0; j < Collator.getKeywordValues(keywords[i]).length;++j) { 445aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// ULocale other = Collator.getFunctionalEquivalent(keywords[i], 446aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// new ULocale(locales[k] + "@" + keywords[i] + "=" + values[j]), 447aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// isAvailable); 448aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// if (isAvailable[0] && !other.equals(base)) { 449aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// logln("\t" + keywords[i] + "=" + values[j] + ";\t" + base + ";\t" + other); 450aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 451aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 452aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 453aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 454aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin// } 455aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 456aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin private static boolean arrayContains(String[] array, String s) { 457aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < array.length; ++i) { 458aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (s.equals(array[i])) { 459aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return true; 460aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 461aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 462aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin return false; 463aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 464aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 465f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert @Test 466aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin public void TestGetKeywordValues(){ 467aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin final String[][] PREFERRED = { 468aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"und", "standard", "eor", "search"}, 469aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"en_US", "standard", "eor", "search"}, 470aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"en_029", "standard", "eor", "search"}, 471aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"de_DE", "standard", "phonebook", "search", "eor"}, 472aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"de_Latn_DE", "standard", "phonebook", "search", "eor"}, 473aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh", "pinyin", "stroke", "eor", "search", "standard"}, 474aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh_Hans", "pinyin", "stroke", "eor", "search", "standard"}, 475aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh_CN", "pinyin", "stroke", "eor", "search", "standard"}, 476aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh_Hant", "stroke", "pinyin", "eor", "search", "standard"}, 477aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh_TW", "stroke", "pinyin", "eor", "search", "standard"}, 478aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zh__PINYIN", "pinyin", "stroke", "eor", "search", "standard"}, 479aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"es_ES", "standard", "search", "traditional", "eor"}, 480aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"es__TRADITIONAL", "traditional", "search", "standard", "eor"}, 481aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"und@collation=phonebook", "standard", "eor", "search"}, 482aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"de_DE@collation=big5han", "standard", "phonebook", "search", "eor"}, 483aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin {"zzz@collation=xxx", "standard", "eor", "search"}, 484aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin }; 485aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 486aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int i = 0; i < PREFERRED.length; i++) { 487aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String locale = PREFERRED[i][0]; 488aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin ULocale loc = new ULocale(locale); 489aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String[] expected = PREFERRED[i]; 490aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String[] pref = Collator.getKeywordValuesForLocale("collation", loc, true); 491aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int j = 1; j < expected.length; ++j) { 492aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!arrayContains(pref, expected[j])) { 493aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("Keyword value " + expected[j] + " missing for locale: " + locale); 494aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 495aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 496aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin 497aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // Collator.getKeywordValues return the same contents for both commonlyUsed 498aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin // true and false. 499aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin String[] all = Collator.getKeywordValuesForLocale("collation", loc, false); 500aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean matchAll = false; 501aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (pref.length == all.length) { 502aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin matchAll = true; 503aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int j = 0; j < pref.length; j++) { 504aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin boolean foundMatch = false; 505aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin for (int k = 0; k < all.length; k++) { 506aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (pref[j].equals(all[k])) { 507aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin foundMatch = true; 508aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin break; 509aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 510aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 511aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!foundMatch) { 512aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin matchAll = false; 513aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin break; 514aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 515aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 516aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 517aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin if (!matchAll) { 518aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin errln("FAIL: All values for locale " + loc 519aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin + " got:" + Arrays.toString(all) + " expected:" + Arrays.toString(pref)); 520aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 521aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 522aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin } 523aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin} 524