17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 3f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert * Copyright (C) 2003-2015, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.util; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.ICUResourceBundle; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.lang.UScript; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSetIterator; 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ICUException; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.LocaleData; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author ram 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * To change the template for this generated type comment go to 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Window>Preferences>Java>Code Generation>Code and Comments 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class LocaleDataTest extends TestFmwk{ 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception{ 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new LocaleDataTest().run(args); 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private ULocale[] availableLocales = null; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public LocaleDataTest(){ 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert protected void init(){ 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert availableLocales = ICUResourceBundle.getAvailableULocales(); 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPaperSize(){ 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i = 0; i < availableLocales.length; i++){ 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = availableLocales[i]; 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.PaperSize paperSize = LocaleData.getPaperSize(locale); 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // skip testing of "in" .. deprecated code for Indonesian 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String lang = locale.getLanguage(); 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(lang.equals("in")){ 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale fullLoc = ULocale.addLikelySubtags(locale); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(fullLoc.toString().indexOf("_BZ") >= 0 || fullLoc.toString().indexOf("_CA") >= 0 || 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_CL") >= 0 || fullLoc.toString().indexOf("_CO") >= 0 || 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_CR") >= 0 || fullLoc.toString().indexOf("_GT") >= 0 || 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_MX") >= 0 || fullLoc.toString().indexOf("_NI") >= 0 || 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_PA") >= 0 || fullLoc.toString().indexOf("_PH") >= 0 || 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_PR") >= 0 || fullLoc.toString().indexOf("_SV") >= 0 || 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert fullLoc.toString().indexOf("_US") >= 0 || fullLoc.toString().indexOf("_VE") >= 0 ){ 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(paperSize.getHeight()!= 279 || paperSize.getWidth() != 216 ){ 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("PaperSize did not return the expected value for locale "+ locale+ 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Expected height: 279 width: 216."+ 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Got height: "+paperSize.getHeight()+" width: "+paperSize.getWidth() 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PaperSize returned the expected values for locale " + locale); 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(paperSize.getHeight()!= 297 || paperSize.getWidth() != 210 ){ 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("PaperSize did not return the expected value for locale "+ locale + 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Expected height: 297 width: 210."+ 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " Got height: "+paperSize.getHeight() +" width: "+paperSize.getWidth() 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ); 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("PaperSize returned the expected values for locale " + locale); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestMeasurementSystem(){ 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<availableLocales.length; i++){ 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = availableLocales[i]; 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.MeasurementSystem ms = LocaleData.getMeasurementSystem(locale); 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // skip testing of "in" .. deprecated code for Indonesian 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String lang = locale.getLanguage(); 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(lang.equals("in")){ 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale fullLoc = ULocale.addLikelySubtags(locale); 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(fullLoc.toString().indexOf("_US") >= 0 || fullLoc.toString().indexOf("_MM") >= 0 || fullLoc.toString().indexOf("_LR") >= 0){ 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(ms == LocaleData.MeasurementSystem.US){ 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Got the expected measurement system for locale: " + locale); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get the expected measurement system for locale: "+ locale); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 93f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert } else if(fullLoc.toString().indexOf("_GB") >= 0){ 94f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert if(ms == LocaleData.MeasurementSystem.UK){ 95f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert logln("Got the expected measurement system for locale: " + locale); 96f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert }else{ 97f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert errln("Did not get the expected measurement system for locale: "+ locale); 98f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert } 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(ms == LocaleData.MeasurementSystem.SI){ 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Got the expected measurement system for locale: " + locale); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }else{ 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Did not get the expected measurement system for locale: "+ locale); 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Simple test case for checking exemplar character type coverage 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestEnglishExemplarCharacters() { 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final char[] testChars = { 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x61, // standard 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xE1, // auxiliary 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x41, // index 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0, // filler for deprecated currency exemplar 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0x2D, // punctuation 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData ld = LocaleData.getInstance(ULocale.ENGLISH); 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int type = 0; type < LocaleData.ES_COUNT; type++) { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet exSet = ld.getExemplarSet(0, type); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (exSet != null) { 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (testChars[type] > 0 && !exSet.contains(testChars[type])) { 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Character '" + testChars[type] + "' is not included in exemplar type " + type); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ld.getExemplarSet(0, LocaleData.ES_COUNT); // out of bounds value 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throw new ICUException("Test failure; should throw exception"); 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IllegalArgumentException e) { 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("", "java.lang.ArrayIndexOutOfBoundsException", e.getCause().getClass().getName()); 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Bundle together a UnicodeSet (of expemplars) and ScriptCode combination. 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // We keep a set of combinations that have already been tested, to 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // avoid repeated (time consuming) retesting of the same data. 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Instances of this class must be well behaved as members of a set. 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static class ExemplarGroup { 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private int[] scs; 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private UnicodeSet set; 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ExemplarGroup(UnicodeSet s, int[] scriptCodes) { 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set = s; 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert scs = scriptCodes; 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int hashCode() { 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int hash = 0; 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i=0; i<scs.length && i<4; i++) { 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert hash = (hash<<8)+scs[i]; 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return hash; 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public boolean equals(Object other) { 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ExemplarGroup o = (ExemplarGroup)other; 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean r = Arrays.equals(scs, o.scs) && 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert set.equals(o.set); 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return r; 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestExemplarSet(){ 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert HashSet testedExemplars = new HashSet(); 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int equalCount = 0; 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<availableLocales.length; i++){ 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = availableLocales[i]; 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scriptCodes = UScript.getCode(locale); 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (scriptCodes==null) { 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // I hate the JDK's solution for deprecated language codes. 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Why does the Locale constructor change the string I passed to it ? 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // such a broken hack !!!!! 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // so in effect I can never test the script code for Indonesian :( 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(locale.toString().indexOf(("in"))<0){ 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UScript.getCode returned null for locale: " + locale); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet exemplarSets[] = new UnicodeSet[2]; 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int k=0; k<2; ++k) { // for casing option in (normal, caseInsensitive) 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int option = (k==0) ? 0 : UnicodeSet.CASE; 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet exemplarSet = LocaleData.getExemplarSet(locale, option); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exemplarSets[k] = exemplarSet; 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ExemplarGroup exGrp = new ExemplarGroup(exemplarSet, scriptCodes); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!testedExemplars.contains(exGrp)) { 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testedExemplars.add(exGrp); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet[] sets = new UnicodeSet[scriptCodes.length]; 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // create the UnicodeSets for the script 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j < scriptCodes.length; j++){ 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sets[j] = new UnicodeSet("[:" + UScript.getShortName(scriptCodes[j]) + ":]"); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean existsInScript = false; 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSetIterator iter = new UnicodeSetIterator(exemplarSet); 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // iterate over the 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (!existsInScript && iter.nextRange()) { 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iter.codepoint != UnicodeSetIterator.IS_STRING) { 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j<sets.length; j++){ 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sets[j].contains(iter.codepoint, iter.codepointEnd)){ 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert existsInScript = true; 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j<sets.length; j++){ 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sets[j].contains(iter.string)){ 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert existsInScript = true; 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(existsInScript == false){ 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ExemplarSet containment failed for locale : "+ locale); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This is expensive, so only do it if it will be visible 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (isVerbose()) { 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar " + exemplarSets[0]); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar(case-folded) " + exemplarSets[1]); 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(locale.toString() + " case-folded is a superset", 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exemplarSets[1].containsAll(exemplarSets[0])); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (exemplarSets[1].equals(exemplarSets[0])) { 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++equalCount; 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Note: The case-folded set should sometimes be a strict superset 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // and sometimes be equal. 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("case-folded is sometimes a strict superset, and sometimes equal", 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert equalCount > 0 && equalCount < availableLocales.length); 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestExemplarSet2(){ 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int equalCount = 0; 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert HashSet testedExemplars = new HashSet(); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<availableLocales.length; i++){ 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = availableLocales[i]; 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData ld = LocaleData.getInstance(locale); 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] scriptCodes = UScript.getCode(locale); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (scriptCodes==null) { 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(locale.toString().indexOf(("in"))<0){ 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("UScript.getCode returned null for locale: "+ locale); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert continue; 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet exemplarSets[] = new UnicodeSet[4]; 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int k=0; k<2; ++k) { // for casing option in (normal, uncased) 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int option = (k==0) ? 0 : UnicodeSet.CASE; 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int h=0; h<2; ++h){ 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int type = (h==0) ? LocaleData.ES_STANDARD : LocaleData.ES_AUXILIARY; 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet exemplarSet = ld.getExemplarSet(option, type); 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exemplarSets[k*2+h] = exemplarSet; 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ExemplarGroup exGrp = new ExemplarGroup(exemplarSet, scriptCodes); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!testedExemplars.contains(exGrp)) { 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert testedExemplars.add(exGrp); 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet[] sets = new UnicodeSet[scriptCodes.length]; 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // create the UnicodeSets for the script 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j < scriptCodes.length; j++){ 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sets[j] = new UnicodeSet("[:" + UScript.getShortName(scriptCodes[j]) + ":]"); 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean existsInScript = false; 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSetIterator iter = new UnicodeSetIterator(exemplarSet); 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // iterate over the 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert while (!existsInScript && iter.nextRange()) { 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (iter.codepoint != UnicodeSetIterator.IS_STRING) { 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j<sets.length; j++){ 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sets[j].contains(iter.codepoint, iter.codepointEnd)){ 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert existsInScript = true; 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int j=0; j<sets.length; j++){ 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(sets[j].contains(iter.string)){ 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert existsInScript = true; 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert break; 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: How to verify LocaleData.ES_AUXILIARY ??? 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if(existsInScript == false && h == 0){ 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ExemplarSet containment failed for locale,option,type : "+ locale + ", " + option + ", " + type); 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This is expensive, so only do it if it will be visible 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (isVerbose()) { 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar(ES_STANDARD)" + exemplarSets[0]); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar(ES_AUXILIARY) " + exemplarSets[1]); 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar(case-folded,ES_STANDARD) " + exemplarSets[2]); 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " exemplar(case-folded,ES_AUXILIARY) " + exemplarSets[3]); 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(locale.toString() + " case-folded is a superset", 2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exemplarSets[2].containsAll(exemplarSets[0])); 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(locale.toString() + " case-folded is a superset", 3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert exemplarSets[3].containsAll(exemplarSets[1])); 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (exemplarSets[2].equals(exemplarSets[0])) { 3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++equalCount; 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (exemplarSets[3].equals(exemplarSets[1])) { 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ++equalCount; 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Note: The case-folded set should sometimes be a strict superset 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // and sometimes be equal. 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue("case-folded is sometimes a strict superset, and sometimes equal", 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert equalCount > 0 && equalCount < availableLocales.length * 2); 3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Test case created for checking type coverage of static getExemplarSet method. 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // See #9785, #9794 and #9795 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestExemplarSetTypes() { 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[] testLocales = { 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "am", // No auxiliary / index exemplars as of ICU 50 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "en", 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "th", // #9785 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "foo", // Bogus locale 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final int[] testTypes = { 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.ES_STANDARD, 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.ES_AUXILIARY, 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.ES_INDEX, 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.ES_CURRENCY, 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData.ES_PUNCTUATION, 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String[] testTypeNames = { 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ES_STANDARD", 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ES_AUXILIARY", 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ES_INDEX", 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ES_CURRENCY", 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ES_PUNCTUATION", 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (String locstr : testLocales) { 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale loc = new ULocale(locstr); 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < testTypes.length; i++) { 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert UnicodeSet set = LocaleData.getExemplarSet(loc, 0, testTypes[i]); 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (set == null) { 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Not sure null is really OK (#9795) 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(loc + "(" + testTypeNames[i] + ") returned null"); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else if (set.isEmpty()) { 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This is probably reasonable when data is absent 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(loc + "(" + testTypeNames[i] + ") returned an empty set"); 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) { 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln(loc + "(" + testTypeNames[i] + ") Exception:" + e.getMessage()); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCoverage(){ 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData ld = LocaleData.getInstance(); 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean t = ld.getNoSubstitute(); 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ld.setNoSubstitute(t); 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("LocaleData get/set NoSubstitute", 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert t, 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ld.getNoSubstitute()); 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(ld.getDelimiter(LocaleData.QUOTATION_START)); 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(ld.getDelimiter(LocaleData.QUOTATION_END)); 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(ld.getDelimiter(LocaleData.ALT_QUOTATION_START)); 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(ld.getDelimiter(LocaleData.ALT_QUOTATION_END)); 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestFallback(){ 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData fr_FR = LocaleData.getInstance(ULocale.FRANCE); 376f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert LocaleData fr_CH = LocaleData.getInstance(new ULocale("fr_CH")); 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This better not crash when only some values are overridden 379f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert assertEquals("Start quotes are not equal", fr_FR.getDelimiter(LocaleData.QUOTATION_START), fr_CH.getDelimiter(LocaleData.QUOTATION_START)); 380f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert assertEquals("End quotes are not equals", fr_FR.getDelimiter(LocaleData.QUOTATION_END), fr_CH.getDelimiter(LocaleData.QUOTATION_END)); 381f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert assertNotEquals("Alt start quotes are equal", fr_FR.getDelimiter(LocaleData.ALT_QUOTATION_START), fr_CH.getDelimiter(LocaleData.ALT_QUOTATION_START)); 382f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert assertNotEquals("Alt end quotes are equals", fr_FR.getDelimiter(LocaleData.ALT_QUOTATION_END), fr_CH.getDelimiter(LocaleData.ALT_QUOTATION_END)); 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestLocaleDisplayPattern(){ 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ULocale locale = ULocale.ENGLISH; 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LocaleData ld = LocaleData.getInstance(locale); 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String pattern = ld.getLocaleDisplayPattern(); 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String separator = ld.getLocaleSeparator(); 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("LocaleDisplayPattern for locale " + locale + ": " + pattern); 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!pattern.equals("{0} ({1})")) { 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unexpected LocaleDisplayPattern for locale: "+ locale); 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("LocaleSeparator for locale " + locale + ": " + separator); 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!separator.equals(", ")) { 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unexpected LocaleSeparator for locale: "+ locale); 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert locale = ULocale.CHINESE; 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ld = LocaleData.getInstance(locale); 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert pattern = ld.getLocaleDisplayPattern(); 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert separator = ld.getLocaleSeparator(); 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("LocaleDisplayPattern for locale " + locale + ": " + pattern); 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!pattern.equals("{0}\uFF08{1}\uFF09")) { 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unexpected LocaleDisplayPattern for locale: "+ locale); 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("LocaleSeparator for locale " + locale + ": " + separator); 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!separator.equals("\u3001")) { 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Unexpected LocaleSeparator for locale: "+ locale); 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i = 0; i < availableLocales.length; i++){ 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert locale = availableLocales[i]; 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ld = LocaleData.getInstance(locale); 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " LocaleDisplayPattern:" + ld.getLocaleDisplayPattern()); 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln(locale.toString() + " LocaleSeparator:" + ld.getLocaleSeparator()); 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 420