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