1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
3aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2003-2015, International Business Machines Corporation and    *
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved.                                                *
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.util;
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Arrays;
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.HashSet;
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk;
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.impl.ICUResourceBundle;
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.lang.UScript;
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.UnicodeSet;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.UnicodeSetIterator;
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.ICUException;
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.LocaleData;
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.ULocale;
213a45e58d9461ee00f295ca8a6a29ef0860559e7ePaul Duffinimport org.junit.runner.RunWith;
223a45e58d9461ee00f295ca8a6a29ef0860559e7ePaul Duffinimport android.icu.junit.IcuTestFmwkRunner;
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @author ram
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * To change the template for this generated type comment go to
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Window>Preferences>Java>Code Generation>Code and Comments
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
303a45e58d9461ee00f295ca8a6a29ef0860559e7ePaul Duffin@RunWith(IcuTestFmwkRunner.class)
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class LocaleDataTest extends TestFmwk{
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public static void main(String[] args) throws Exception{
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        new LocaleDataTest().run(args);
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    private ULocale[] availableLocales = null;
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public LocaleDataTest(){
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    protected void init(){
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        availableLocales = ICUResourceBundle.getAvailableULocales();
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestPaperSize(){
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for(int i = 0; i < availableLocales.length; i++){
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale locale = availableLocales[i];
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            LocaleData.PaperSize paperSize = LocaleData.getPaperSize(locale);
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // skip testing of "in" .. deprecated code for Indonesian
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            String lang = locale.getLanguage();
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if(lang.equals("in")){
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                continue;
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale fullLoc = ULocale.addLikelySubtags(locale);
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if(fullLoc.toString().indexOf("_BZ") >= 0 || fullLoc.toString().indexOf("_CA") >= 0 ||
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_CL") >= 0 || fullLoc.toString().indexOf("_CO") >= 0 ||
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_CR") >= 0 || fullLoc.toString().indexOf("_GT") >= 0 ||
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_MX") >= 0 || fullLoc.toString().indexOf("_NI") >= 0 ||
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_PA") >= 0 || fullLoc.toString().indexOf("_PH") >= 0 ||
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_PR") >= 0 || fullLoc.toString().indexOf("_SV") >= 0 ||
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    fullLoc.toString().indexOf("_US") >= 0 || fullLoc.toString().indexOf("_VE") >= 0 ){
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(paperSize.getHeight()!= 279 || paperSize.getWidth() != 216 ){
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("PaperSize did not return the expected value for locale "+ locale+
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            " Expected height: 279 width: 216."+
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            " Got height: "+paperSize.getHeight()+" width: "+paperSize.getWidth()
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            );
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }else{
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    logln("PaperSize returned the expected values for locale " + locale);
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }else{
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(paperSize.getHeight()!= 297 || paperSize.getWidth() != 210 ){
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("PaperSize did not return the expected value for locale "+ locale +
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            " Expected height: 297 width: 210."+
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            " Got height: "+paperSize.getHeight() +" width: "+paperSize.getWidth()
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            );
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }else{
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    logln("PaperSize returned the expected values for locale " + locale);
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestMeasurementSystem(){
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for(int i=0; i<availableLocales.length; i++){
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale locale = availableLocales[i];
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            LocaleData.MeasurementSystem ms = LocaleData.getMeasurementSystem(locale);
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // skip testing of "in" .. deprecated code for Indonesian
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            String lang = locale.getLanguage();
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if(lang.equals("in")){
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                continue;
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale fullLoc = ULocale.addLikelySubtags(locale);
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if(fullLoc.toString().indexOf("_US") >= 0 || fullLoc.toString().indexOf("_MM") >= 0 || fullLoc.toString().indexOf("_LR") >= 0){
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(ms == LocaleData.MeasurementSystem.US){
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    logln("Got the expected measurement system for locale: " + locale);
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }else{
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Did not get the expected measurement system for locale: "+ locale);
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } else if(fullLoc.toString().indexOf("_GB") >= 0){
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(ms == LocaleData.MeasurementSystem.UK){
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    logln("Got the expected measurement system for locale: " + locale);
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }else{
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Did not get the expected measurement system for locale: "+ locale);
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }else{
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(ms == LocaleData.MeasurementSystem.SI){
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    logln("Got the expected measurement system for locale: " + locale);
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }else{
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Did not get the expected measurement system for locale: "+ locale);
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // Simple test case for checking exemplar character type coverage
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestEnglishExemplarCharacters() {
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        final char[] testChars = {
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                0x61,   // standard
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                0xE1,   // auxiliary
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                0x41,   // index
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                0,      // filler for deprecated currency exemplar
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                0x2D,   // punctuation
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        };
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        LocaleData ld = LocaleData.getInstance(ULocale.ENGLISH);
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (int type = 0; type < LocaleData.ES_COUNT; type++) {
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            UnicodeSet exSet = ld.getExemplarSet(0, type);
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (exSet != null) {
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (testChars[type] > 0 && !exSet.contains(testChars[type])) {
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Character '" + testChars[type] + "' is not included in exemplar type " + type);
128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ld.getExemplarSet(0, LocaleData.ES_COUNT); // out of bounds value
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            throw new ICUException("Test failure; should throw exception");
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertEquals("", "java.lang.ArrayIndexOutOfBoundsException", e.getCause().getClass().getName());
136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // Bundle together a UnicodeSet (of expemplars) and ScriptCode combination.
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //   We keep a set of combinations that have already been tested, to
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //   avoid repeated (time consuming) retesting of the same data.
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //   Instances of this class must be well behaved as members of a set.
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    static class ExemplarGroup {
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        private int[] scs;
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        private UnicodeSet set;
147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ExemplarGroup(UnicodeSet s, int[] scriptCodes) {
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            set = s;
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            scs = scriptCodes;
151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        public int hashCode() {
153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            int hash = 0;
154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (int i=0; i<scs.length && i<4; i++) {
155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                hash = (hash<<8)+scs[i];
156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return hash;
158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        public boolean equals(Object other) {
160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ExemplarGroup o = (ExemplarGroup)other;
161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            boolean r = Arrays.equals(scs, o.scs) &&
162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    set.equals(o.set);
163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return r;
164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestExemplarSet(){
168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        HashSet  testedExemplars = new HashSet();
169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int equalCount = 0;
170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for(int i=0; i<availableLocales.length; i++){
171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale locale = availableLocales[i];
172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            int[] scriptCodes = UScript.getCode(locale);
173aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (scriptCodes==null) {
174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                // I hate the JDK's solution for deprecated language codes.
175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                // Why does the Locale constructor change the string I passed to it ?
176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                // such a broken hack !!!!!
177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                // so in effect I can never test the script code for Indonesian :(
178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(locale.toString().indexOf(("in"))<0){
179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("UScript.getCode returned null for locale: " + locale);
180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                continue;
182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            UnicodeSet exemplarSets[] = new UnicodeSet[2];
184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (int k=0; k<2; ++k) {   // for casing option in (normal, caseInsensitive)
185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                int option = (k==0) ? 0 : UnicodeSet.CASE;
186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                UnicodeSet exemplarSet = LocaleData.getExemplarSet(locale, option);
187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                exemplarSets[k] = exemplarSet;
188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                ExemplarGroup exGrp = new ExemplarGroup(exemplarSet, scriptCodes);
189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (!testedExemplars.contains(exGrp)) {
190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    testedExemplars.add(exGrp);
191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    UnicodeSet[] sets = new UnicodeSet[scriptCodes.length];
192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    // create the UnicodeSets for the script
193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    for(int j=0; j < scriptCodes.length; j++){
194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        sets[j] = new UnicodeSet("[:" + UScript.getShortName(scriptCodes[j]) + ":]");
195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    boolean existsInScript = false;
197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    UnicodeSetIterator iter = new UnicodeSetIterator(exemplarSet);
198aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    // iterate over the
199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    while (!existsInScript && iter.nextRange()) {
200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        if (iter.codepoint != UnicodeSetIterator.IS_STRING) {
201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            for(int j=0; j<sets.length; j++){
202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                if(sets[j].contains(iter.codepoint, iter.codepointEnd)){
203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    existsInScript = true;
204aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    break;
205aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                }
206aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            }
207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        } else {
208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            for(int j=0; j<sets.length; j++){
209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                if(sets[j].contains(iter.string)){
210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    existsInScript = true;
211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    break;
212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                }
213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            }
214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if(existsInScript == false){
217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        errln("ExemplarSet containment failed for locale : "+ locale);
218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // This is expensive, so only do it if it will be visible
222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (isVerbose()) {
223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar " + exemplarSets[0]);
224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar(case-folded) " + exemplarSets[1]);
225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertTrue(locale.toString() + " case-folded is a superset",
227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    exemplarSets[1].containsAll(exemplarSets[0]));
228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (exemplarSets[1].equals(exemplarSets[0])) {
229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                ++equalCount;
230aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
231aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
232aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // Note: The case-folded set should sometimes be a strict superset
233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // and sometimes be equal.
234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue("case-folded is sometimes a strict superset, and sometimes equal",
235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                equalCount > 0 && equalCount < availableLocales.length);
236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestExemplarSet2(){
238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int equalCount = 0;
239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        HashSet  testedExemplars = new HashSet();
240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for(int i=0; i<availableLocales.length; i++){
241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale locale = availableLocales[i];
242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            LocaleData ld = LocaleData.getInstance(locale);
243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            int[] scriptCodes = UScript.getCode(locale);
244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (scriptCodes==null) {
245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if(locale.toString().indexOf(("in"))<0){
246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("UScript.getCode returned null for locale: "+ locale);
247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
248aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                continue;
249aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
250aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            UnicodeSet exemplarSets[] = new UnicodeSet[4];
251aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
252aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (int k=0; k<2; ++k) {  // for casing option in (normal, uncased)
253aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                int option = (k==0) ? 0 : UnicodeSet.CASE;
254aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                for(int h=0; h<2; ++h){
255aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    int type = (h==0) ? LocaleData.ES_STANDARD : LocaleData.ES_AUXILIARY;
256aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
257aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    UnicodeSet exemplarSet = ld.getExemplarSet(option, type);
258aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    exemplarSets[k*2+h] = exemplarSet;
259aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
260aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    ExemplarGroup exGrp = new ExemplarGroup(exemplarSet, scriptCodes);
261aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (!testedExemplars.contains(exGrp)) {
262aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        testedExemplars.add(exGrp);
263aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        UnicodeSet[] sets = new UnicodeSet[scriptCodes.length];
264aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        // create the UnicodeSets for the script
265aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        for(int j=0; j < scriptCodes.length; j++){
266aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            sets[j] = new UnicodeSet("[:" + UScript.getShortName(scriptCodes[j]) + ":]");
267aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
268aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        boolean existsInScript = false;
269aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        UnicodeSetIterator iter = new UnicodeSetIterator(exemplarSet);
270aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        // iterate over the
271aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        while (!existsInScript && iter.nextRange()) {
272aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            if (iter.codepoint != UnicodeSetIterator.IS_STRING) {
273aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                for(int j=0; j<sets.length; j++){
274aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    if(sets[j].contains(iter.codepoint, iter.codepointEnd)){
275aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                        existsInScript = true;
276aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                        break;
277aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    }
278aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                }
279aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            } else {
280aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                for(int j=0; j<sets.length; j++){
281aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    if(sets[j].contains(iter.string)){
282aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                        existsInScript = true;
283aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                        break;
284aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                    }
285aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                                }
286aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            }
287aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
288aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        // TODO: How to verify LocaleData.ES_AUXILIARY ???
289aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        if(existsInScript == false && h == 0){
290aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                            errln("ExemplarSet containment failed for locale,option,type : "+ locale + ", " + option + ", " + type);
291aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        }
292aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
293aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
294aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
295aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            // This is expensive, so only do it if it will be visible
296aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (isVerbose()) {
297aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar(ES_STANDARD)" + exemplarSets[0]);
298aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar(ES_AUXILIARY) " + exemplarSets[1]);
299aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar(case-folded,ES_STANDARD) " + exemplarSets[2]);
300aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                logln(locale.toString() + " exemplar(case-folded,ES_AUXILIARY) " + exemplarSets[3]);
301aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
302aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertTrue(locale.toString() + " case-folded is a superset",
303aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    exemplarSets[2].containsAll(exemplarSets[0]));
304aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            assertTrue(locale.toString() + " case-folded is a superset",
305aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    exemplarSets[3].containsAll(exemplarSets[1]));
306aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (exemplarSets[2].equals(exemplarSets[0])) {
307aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                ++equalCount;
308aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
309aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (exemplarSets[3].equals(exemplarSets[1])) {
310aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                ++equalCount;
311aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
312aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
313aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // Note: The case-folded set should sometimes be a strict superset
314aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // and sometimes be equal.
315aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue("case-folded is sometimes a strict superset, and sometimes equal",
316aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                equalCount > 0 && equalCount < availableLocales.length * 2);
317aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
318aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
319aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // Test case created for checking type coverage of static getExemplarSet method.
320aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    // See #9785, #9794 and #9795
321aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestExemplarSetTypes() {
322aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        final String[] testLocales = {
323aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "am",   // No auxiliary / index exemplars as of ICU 50
324aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "en",
325aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "th",   // #9785
326aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "foo",  // Bogus locale
327aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        };
328aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
329aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        final int[] testTypes = {
330aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                LocaleData.ES_STANDARD,
331aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                LocaleData.ES_AUXILIARY,
332aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                LocaleData.ES_INDEX,
333aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                LocaleData.ES_CURRENCY,
334aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                LocaleData.ES_PUNCTUATION,
335aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        };
336aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
337aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        final String[] testTypeNames = {
338aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "ES_STANDARD",
339aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "ES_AUXILIARY",
340aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "ES_INDEX",
341aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "ES_CURRENCY",
342aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                "ES_PUNCTUATION",
343aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        };
344aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
345aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (String locstr : testLocales) {
346aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ULocale loc = new ULocale(locstr);
347aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            for (int i = 0; i < testTypes.length; i++) {
348aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                try {
349aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    UnicodeSet set = LocaleData.getExemplarSet(loc, 0, testTypes[i]);
350aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    if (set == null) {
351aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        // Not sure null is really OK (#9795)
352aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        logln(loc + "(" + testTypeNames[i] + ") returned null");
353aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    } else if (set.isEmpty()) {
354aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        // This is probably reasonable when data is absent
355aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                        logln(loc + "(" + testTypeNames[i] + ") returned an empty set");
356aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    }
357aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } catch (Exception e) {
358aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln(loc + "(" + testTypeNames[i] + ") Exception:" + e.getMessage());
359aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
360aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
361aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
362aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
363aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
364aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestCoverage(){
365aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        LocaleData ld = LocaleData.getInstance();
366aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        boolean t = ld.getNoSubstitute();
367aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ld.setNoSubstitute(t);
368aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("LocaleData get/set NoSubstitute",
369aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                t,
370aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                ld.getNoSubstitute());
371aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
372aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln(ld.getDelimiter(LocaleData.QUOTATION_START));
373aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln(ld.getDelimiter(LocaleData.QUOTATION_END));
374aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln(ld.getDelimiter(LocaleData.ALT_QUOTATION_START));
375aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln(ld.getDelimiter(LocaleData.ALT_QUOTATION_END));
376aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
377aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
378aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestFallback(){
379aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        LocaleData fr_FR = LocaleData.getInstance(ULocale.FRANCE);
380aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        LocaleData fr_CH = LocaleData.getInstance(new ULocale("fr_CH"));
381aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
382aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // This better not crash when only some values are overridden
383aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("Start quotes are not equal", fr_FR.getDelimiter(LocaleData.QUOTATION_START), fr_CH.getDelimiter(LocaleData.QUOTATION_START));
384aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals("End quotes are not equals", fr_FR.getDelimiter(LocaleData.QUOTATION_END), fr_CH.getDelimiter(LocaleData.QUOTATION_END));
385aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotEquals("Alt start quotes are equal", fr_FR.getDelimiter(LocaleData.ALT_QUOTATION_START), fr_CH.getDelimiter(LocaleData.ALT_QUOTATION_START));
386aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertNotEquals("Alt end quotes are equals", fr_FR.getDelimiter(LocaleData.ALT_QUOTATION_END), fr_CH.getDelimiter(LocaleData.ALT_QUOTATION_END));
387aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
388aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
389aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestLocaleDisplayPattern(){
390aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ULocale locale = ULocale.ENGLISH;
391aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        LocaleData ld = LocaleData.getInstance(locale);
392aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String pattern = ld.getLocaleDisplayPattern();
393aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String separator = ld.getLocaleSeparator();
394aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("LocaleDisplayPattern for locale " + locale + ": " + pattern);
395aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!pattern.equals("{0} ({1})")) {
396aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Unexpected LocaleDisplayPattern for locale: "+ locale);
397aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
398aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("LocaleSeparator for locale " + locale + ": " + separator);
399aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!separator.equals(", ")) {
400aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Unexpected LocaleSeparator for locale: "+ locale);
401aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
402aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
403aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        locale = ULocale.CHINESE;
404aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ld = LocaleData.getInstance(locale);
405aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pattern = ld.getLocaleDisplayPattern();
406aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        separator = ld.getLocaleSeparator();
407aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("LocaleDisplayPattern for locale " + locale + ": " + pattern);
408aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!pattern.equals("{0}\uFF08{1}\uFF09")) {
409aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Unexpected LocaleDisplayPattern for locale: "+ locale);
410aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
411aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("LocaleSeparator for locale " + locale + ": " + separator);
412aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!separator.equals("\u3001")) {
413aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Unexpected LocaleSeparator for locale: "+ locale);
414aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
415aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
416aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for(int i = 0; i < availableLocales.length; i++){
417aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            locale = availableLocales[i];
418aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            ld = LocaleData.getInstance(locale);
419aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln(locale.toString() + " LocaleDisplayPattern:" + ld.getLocaleDisplayPattern());
420aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln(locale.toString() + " LocaleSeparator:" + ld.getLocaleSeparator());
421aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
422aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
423aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
424