/*
**********************************************************************
* Copyright (c) 2004-2012, International Business Machines
* Corporation and others.  All Rights Reserved.
**********************************************************************
* Author: Alan Liu
* Created: January 14 2004
* Since: ICU 2.8
**********************************************************************
*/
package com.ibm.icu.dev.test.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.text.BreakIterator;
import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.DecimalFormat;
import com.ibm.icu.text.LocaleDisplayNames;
import com.ibm.icu.text.LocaleDisplayNames.DialectHandling;
import com.ibm.icu.text.NumberFormat;
import com.ibm.icu.text.NumberFormat.SimpleNumberFormatFactory;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.IllformedLocaleException;
import com.ibm.icu.util.LocaleData;
import com.ibm.icu.util.ULocale;
import com.ibm.icu.util.ULocale.Builder;
import com.ibm.icu.util.ULocale.Category;
import com.ibm.icu.util.UResourceBundle;
import com.ibm.icu.util.VersionInfo;

public class ULocaleTest extends TestFmwk {

    private static final boolean JAVA7_OR_LATER = (VersionInfo.javaVersion().compareTo(VersionInfo.getInstance(1, 7)) >= 0);

    public static void main(String[] args) throws Exception {
        new ULocaleTest().run(args);
    }

    public void TestCalendar() {
        // TODO The CalendarFactory mechanism is not public,
        // so we can't test it yet.  If it becomes public,
        // enable this code.

        // class CFactory implements CalendarFactory {
        //     Locale loc;
        //     Calendar proto;
        //     public CFactory(Locale locale, Calendar prototype) {
        //         loc = locale;
        //         proto = prototype;
        //     }
        //     public Calendar create(TimeZone tz, Locale locale) {
        //         // ignore tz -- not relevant to this test
        //         return locale.equals(loc) ?
        //             (Calendar) proto.clone() : null;
        //     }
        //     public String factoryName() {
        //         return "CFactory";
        //     }
        // };

        checkService("en_US_BROOKLYN", new ServiceFacade() {
                public Object create(ULocale req) {
                    return Calendar.getInstance(req);
                }
                // }, null, new Registrar() {
                //     public Object register(ULocale loc, Object prototype) {
                //         CFactory f = new CFactory(loc, (Calendar) prototype);
                //         return Calendar.register(f, loc);
                //     }
                //     public boolean unregister(Object key) {
                //         return Calendar.unregister(key);
                //     }
            });
    }

    // Currency getLocale API is obsolete in 3.2.  Since it now returns ULocale.ROOT,
    // and this is not equal to the requested locale zh_TW_TAIPEI, the
    // checkService call would always fail.  So we now omit the test.
    /*
    public void TestCurrency() {
        checkService("zh_TW_TAIPEI", new ServiceFacade() {
                public Object create(ULocale req) {
                    return Currency.getInstance(req);
                }
            }, null, new Registrar() {
                    public Object register(ULocale loc, Object prototype) {
                        return Currency.registerInstance((Currency) prototype, loc);
                    }
                    public boolean unregister(Object key) {
                        return Currency.unregister(key);
                    }
                });
    }
    */

    public void TestBreakIterator() {
        checkService("ja_JP_OSAKA", new ServiceFacade() {
                public Object create(ULocale req) {
                    return BreakIterator.getWordInstance(req);
                }
            }, null, new Registrar() {
                    public Object register(ULocale loc, Object prototype) {
                        return BreakIterator.registerInstance(
                                                              (BreakIterator) prototype,
                                                              loc, BreakIterator.KIND_WORD);
                    }
                    public boolean unregister(Object key) {
                        return BreakIterator.unregister(key);
                    }
                });
    }

    public void TestDateFormat() {
        checkService("de_CH_ZURICH", new ServiceFacade() {
                public Object create(ULocale req) {
                    return DateFormat.getDateInstance(DateFormat.DEFAULT, req);
                }
            }, new Subobject() {
                    public Object get(Object parent) {
                        return ((SimpleDateFormat) parent).getDateFormatSymbols();
                    }
                }, null);
    }

    public void TestNumberFormat() {
        class NFactory extends SimpleNumberFormatFactory {
            NumberFormat proto;
            ULocale locale;
            public NFactory(ULocale loc, NumberFormat fmt) {
                super(loc);
                this.locale = loc;
                this.proto = fmt;
            }
            public NumberFormat createFormat(ULocale loc, int formatType) {
                return (NumberFormat) (locale.equals(loc) ?
                                       proto.clone() : null);
            }
        }

        checkService("fr_FR_NICE", new ServiceFacade() {
                public Object create(ULocale req) {
                    return NumberFormat.getInstance(req);
                }
            }, new Subobject() {
                    public Object get(Object parent) {
                        return ((DecimalFormat) parent).getDecimalFormatSymbols();
                    }
                }, new Registrar() {
                        public Object register(ULocale loc, Object prototype) {
                            NFactory f = new NFactory(loc, (NumberFormat) prototype);
                            return NumberFormat.registerFactory(f);
                        }
                        public boolean unregister(Object key) {
                            return NumberFormat.unregister(key);
                        }
                    });
    }

    public void TestSetULocaleKeywords() {
        ULocale uloc = new ULocale("en_Latn_US");
        uloc = uloc.setKeywordValue("Foo", "FooValue");
        if (!"en_Latn_US@foo=FooValue".equals(uloc.getName())) {
            errln("failed to add foo keyword, got: " + uloc.getName());
        }
        uloc = uloc.setKeywordValue("Bar", "BarValue");
        if (!"en_Latn_US@bar=BarValue;foo=FooValue".equals(uloc.getName())) {
            errln("failed to add bar keyword, got: " + uloc.getName());
        }
        uloc = uloc.setKeywordValue("BAR", "NewBarValue");
        if (!"en_Latn_US@bar=NewBarValue;foo=FooValue".equals(uloc.getName())) {
            errln("failed to change bar keyword, got: " + uloc.getName());
        }
        uloc = uloc.setKeywordValue("BaR", null);
        if (!"en_Latn_US@foo=FooValue".equals(uloc.getName())) {
            errln("failed to delete bar keyword, got: " + uloc.getName());
        }
        uloc = uloc.setKeywordValue(null, null);
        if (!"en_Latn_US".equals(uloc.getName())) {
            errln("failed to delete all keywords, got: " + uloc.getName());
        }
    }

    /*
     * ticket#5060
     */
    public void TestJavaLocaleCompatibility() {
        Locale backupDefault = Locale.getDefault();
        ULocale orgUlocDefault = ULocale.getDefault();

        // Java Locale for ja_JP with Japanese calendar
        Locale jaJPJP = new Locale("ja", "JP", "JP");
        Locale jaJP = new Locale("ja", "JP");
        // Java Locale for th_TH with Thai digits
        Locale thTHTH = new Locale("th", "TH", "TH");
 
        Calendar cal = Calendar.getInstance(jaJPJP);
        String caltype = cal.getType();
        if (!caltype.equals("japanese")) {
            errln("FAIL: Invalid calendar type: " + caltype + " /expected: japanese");
        }

        cal = Calendar.getInstance(jaJP);
        caltype = cal.getType();
        if (!caltype.equals("gregorian")) {
            errln("FAIL: Invalid calendar type: " + caltype + " /expected: gregorian");
        }

        // Default locale
        Locale.setDefault(jaJPJP);
        ULocale defUloc = ULocale.getDefault();
        if (JAVA7_OR_LATER) {
            if (!defUloc.toString().equals("ja_JP_JP@calendar=japanese")) {
                errln("FAIL: Invalid default ULocale: " + defUloc + " /expected: ja_JP_JP@calendar=japanese");
            }
        } else {
            if (!defUloc.toString().equals("ja_JP@calendar=japanese")) {
                errln("FAIL: Invalid default ULocale: " + defUloc + " /expected: ja_JP@calendar=japanese");
            }
        }
        // Check calendar type
        cal = Calendar.getInstance();
        caltype = cal.getType();
        if (!caltype.equals("japanese")) {
            errln("FAIL: Invalid calendar type: " + caltype + " /expected: japanese");
        }
        Locale.setDefault(backupDefault);

        // Set default via ULocale
        ULocale ujaJP_calJP = new ULocale("ja_JP@calendar=japanese");
        ULocale.setDefault(ujaJP_calJP);
        if (!JAVA7_OR_LATER && !Locale.getDefault().equals(jaJPJP)) {
            errln("FAIL: ULocale#setDefault failed to set Java Locale ja_JP_JP /actual: " + Locale.getDefault());
        }
        // Ticket#6672 - missing keywords
        defUloc = ULocale.getDefault();
        if (!defUloc.equals(ujaJP_calJP)) {
            errln("FAIL: ULocale#getDefault returned " + defUloc + " /expected: ja_JP@calendar=japanese");
        }
        // Set a incompatible base locale via Locale#setDefault
        Locale.setDefault(Locale.US);
        defUloc = ULocale.getDefault();
        if (defUloc.equals(ujaJP_calJP)) {
            errln("FAIL: ULocale#getDefault returned " + defUloc + " /expected: " + ULocale.forLocale(Locale.US));
        }

        Locale.setDefault(backupDefault);

        // We also want to map ICU locale ja@calendar=japanese to Java ja_JP_JP
        ULocale.setDefault(new ULocale("ja@calendar=japanese"));
        if (!JAVA7_OR_LATER && !Locale.getDefault().equals(jaJPJP)) {
            errln("FAIL: ULocale#setDefault failed to set Java Locale ja_JP_JP /actual: " + Locale.getDefault());
        }
        Locale.setDefault(backupDefault);

        // Java no_NO_NY
        Locale noNONY = new Locale("no", "NO", "NY");
        Locale.setDefault(noNONY);
        defUloc = ULocale.getDefault();
        if (!defUloc.toString().equals("nn_NO")) {
            errln("FAIL: Invalid default ULocale: " + defUloc + " /expected: nn_NO");
        }
        Locale.setDefault(backupDefault);

        // Java th_TH_TH -> ICU th_TH@numbers=thai
        ULocale.setDefault(new ULocale("th@numbers=thai"));
        if (!JAVA7_OR_LATER && !Locale.getDefault().equals(thTHTH)) {
            errln("FAIL: ULocale#setDefault failed to set Java Locale th_TH_TH /actual: " + Locale.getDefault());
        }
        Locale.setDefault(backupDefault);

        // Set default via ULocale
        ULocale.setDefault(new ULocale("nn_NO"));
        if (!JAVA7_OR_LATER && !Locale.getDefault().equals(noNONY)) {
            errln("FAIL: ULocale#setDefault failed to set Java Locale no_NO_NY /actual: " + Locale.getDefault());
        }
        Locale.setDefault(backupDefault);        

        // We also want to map ICU locale nn to Java no_NO_NY
        ULocale.setDefault(new ULocale("nn"));
        if (!JAVA7_OR_LATER && !Locale.getDefault().equals(noNONY)) {
            errln("FAIL: ULocale#setDefault failed to set Java Locale no_NO_NY /actual: " + Locale.getDefault());
        }
        Locale.setDefault(backupDefault);

        // Make sure default ULocale is restored
        if (!ULocale.getDefault().equals(orgUlocDefault)) {
            errln("FAIL: Original default ULocale is not restored - " + ULocale.getDefault() + ", expected(orginal) - " + orgUlocDefault);
        }
    }
    
    // ================= Infrastructure =================

    /**
     * Compare two locale IDs.  If they are equal, return 0.  If `string'
     * starts with `prefix' plus an additional element, that is, string ==
     * prefix + '_' + x, then return 1.  Otherwise return a value < 0.
     */
    static int loccmp(String string, String prefix) {
        int slen = string.length(),
            plen = prefix.length();
        /* 'root' is "less than" everything */
        if (prefix.equals("root")) {
            return string.equals("root") ? 0 : 1;
        }
        // ON JAVA (only -- not on C -- someone correct me if I'm wrong)
        // consider "" to be an alternate name for "root".
        if (plen == 0) {
            return slen == 0 ? 0 : 1;
        }
        if (!string.startsWith(prefix)) return -1; /* mismatch */
        if (slen == plen) return 0;
        if (string.charAt(plen) == '_') return 1;
        return -2; /* false match, e.g. "en_USX" cmp "en_US" */
    }

    /**
     * Check the relationship between requested locales, and report problems.
     * The caller specifies the expected relationships between requested
     * and valid (expReqValid) and between valid and actual (expValidActual).
     * Possible values are:
     * "gt" strictly greater than, e.g., en_US > en
     * "ge" greater or equal,      e.g., en >= en
     * "eq" equal,                 e.g., en == en
     */
    void checklocs(String label,
                   String req,
                   Locale validLoc,
                   Locale actualLoc,
                   String expReqValid,
                   String expValidActual) {
        String valid = validLoc.toString();
        String actual = actualLoc.toString();
        int reqValid = loccmp(req, valid);
        int validActual = loccmp(valid, actual);
    boolean reqOK = (expReqValid.equals("gt") && reqValid > 0) ||
        (expReqValid.equals("ge") && reqValid >= 0) ||
        (expReqValid.equals("eq") && reqValid == 0);
    boolean valOK = (expValidActual.equals("gt") && validActual > 0) ||
        (expValidActual.equals("ge") && validActual >= 0) ||
        (expValidActual.equals("eq") && validActual == 0);
        if (reqOK && valOK) {
            logln("Ok: " + label + "; req=" + req + ", valid=" + valid +
                  ", actual=" + actual);
        } else {
            errln("FAIL: " + label + "; req=" + req + ", valid=" + valid +
                  ", actual=" + actual +
          (reqOK ? "" : "\n  req !" + expReqValid + " valid") +
          (valOK ? "" : "\n  val !" + expValidActual + " actual"));
        }
    }

    /**
     * Interface used by checkService defining a protocol to create an
     * object, given a requested locale.
     */
    interface ServiceFacade {
        Object create(ULocale requestedLocale);
    }

    /**
     * Interface used by checkService defining a protocol to get a
     * contained subobject, given its parent object.
     */
    interface Subobject {
        Object get(Object parent);
    }

    /**
     * Interface used by checkService defining a protocol to register
     * and unregister a service object prototype.
     */
    interface Registrar {
        Object register(ULocale loc, Object prototype);
        boolean unregister(Object key);
    }

    /**
     * Use reflection to call getLocale() on the given object to
     * determine both the valid and the actual locale.  Verify these
     * for correctness.
     */
    void checkObject(String requestedLocale, Object obj,
                     String expReqValid, String expValidActual) {
        Class[] getLocaleParams = new Class[] { ULocale.Type.class };
        try {
            Class cls = obj.getClass();
            Method getLocale = cls.getMethod("getLocale", getLocaleParams);
            ULocale valid = (ULocale) getLocale.invoke(obj, new Object[] {
                ULocale.VALID_LOCALE });
            ULocale actual = (ULocale) getLocale.invoke(obj, new Object[] {
                ULocale.ACTUAL_LOCALE });
            checklocs(cls.getName(), requestedLocale,
                      valid.toLocale(), actual.toLocale(),
                      expReqValid, expValidActual);
        }

        // Make the following exceptions _specific_ -- do not
        // catch(Exception), since that will catch the exception
        // that errln throws.
        catch(NoSuchMethodException e1) {
        // no longer an error, Currency has no getLocale
            // errln("FAIL: reflection failed: " + e1);
        } catch(SecurityException e2) {
            errln("FAIL: reflection failed: " + e2);
        } catch(IllegalAccessException e3) {
            errln("FAIL: reflection failed: " + e3);
        } catch(IllegalArgumentException e4) {
            errln("FAIL: reflection failed: " + e4);
        } catch(InvocationTargetException e5) {
        // no longer an error, Currency has no getLocale
            // errln("FAIL: reflection failed: " + e5);
        }
    }

    /**
     * Verify the correct getLocale() behavior for the given service.
     * @param requestedLocale the locale to request.  This MUST BE
     * FAKE.  In other words, it should be something like
     * en_US_FAKEVARIANT so this method can verify correct fallback
     * behavior.
     * @param svc a factory object that can create the object to be
     * tested.  This isn't necessary here (one could just pass in the
     * object) but is required for the overload of this method that
     * takes a Registrar.
     */
    void checkService(String requestedLocale, ServiceFacade svc) {
        checkService(requestedLocale, svc, null, null);
    }

    /**
     * Verify the correct getLocale() behavior for the given service.
     * @param requestedLocale the locale to request.  This MUST BE
     * FAKE.  In other words, it should be something like
     * en_US_FAKEVARIANT so this method can verify correct fallback
     * behavior.
     * @param svc a factory object that can create the object to be
     * tested.
     * @param sub an object that can be used to retrieve a subobject
     * which should also be tested.  May be null.
     * @param reg an object that supplies the registration and
     * unregistration functionality to be tested.  May be null.
     */
    void checkService(String requestedLocale, ServiceFacade svc,
                      Subobject sub, Registrar reg) {
        ULocale req = new ULocale(requestedLocale);
        Object obj = svc.create(req);
        checkObject(requestedLocale, obj, "gt", "ge");
        if (sub != null) {
            Object subobj = sub.get(obj);
            checkObject(requestedLocale, subobj, "gt", "ge");
        }
        if (reg != null) {
            logln("Info: Registering service");
            Object key = reg.register(req, obj);
            Object objReg = svc.create(req);
            checkObject(requestedLocale, objReg, "eq", "eq");
            if (sub != null) {
                Object subobj = sub.get(obj);
                // Assume subobjects don't come from services, so
                // their metadata should be structured normally.
                checkObject(requestedLocale, subobj, "gt", "ge");
            }
            logln("Info: Unregistering service");
            if (!reg.unregister(key)) {
                errln("FAIL: unregister failed");
            }
            Object objUnreg = svc.create(req);
            checkObject(requestedLocale, objUnreg, "gt", "ge");
        }
    }
    private static final int LOCALE_SIZE = 9;
    private static final String[][] rawData2 = new String[][]{
        /* language code */
        {   "en",   "fr",   "ca",   "el",   "no",   "zh",   "de",   "es",  "ja"    },
        /* script code */
        {   "",     "",     "",     "",     "",     "Hans", "", "", ""  },
        /* country code */
        {   "US",   "FR",   "ES",   "GR",   "NO",   "CN", "DE", "", "JP"    },
        /* variant code */
        {   "",     "",     "",     "",     "NY",   "", "", "", ""      },
        /* full name */
        {   "en_US",    "fr_FR",    "ca_ES",
            "el_GR",    "no_NO_NY", "zh_Hans_CN",
            "de_DE@collation=phonebook", "es@collation=traditional",  "ja_JP@calendar=japanese" },
        /* ISO-3 language */
        {   "eng",  "fra",  "cat",  "ell",  "nor",  "zho", "deu", "spa", "jpn"   },
        /* ISO-3 country */
        {   "USA",  "FRA",  "ESP",  "GRC",  "NOR",  "CHN", "DEU", "", "JPN"   },
        /* LCID */
        {   "409", "40c", "403", "408", "814",  "804", "407", "a", "411"     },

        /* display language (English) */
        {   "English",  "French",   "Catalan", "Greek",    "Norwegian", "Chinese", "German", "Spanish", "Japanese"    },
        /* display script code (English) */
        {   "",     "",     "",     "",     "",     "Simplified Han", "", "", ""       },
        /* display country (English) */
        {   "United States",    "France",   "Spain",  "Greece",   "Norway", "China", "Germany", "", "Japan"       },
        /* display variant (English) */
        {   "",     "",     "",     "",     "NY",  "", "", "", ""       },
        /* display name (English) */
        {   "English (United States)", "French (France)", "Catalan (Spain)",
            "Greek (Greece)", "Norwegian (Norway, NY)", "Chinese (Simplified Han, China)",
            "German (Germany, Collation=Phonebook Order)", "Spanish (Collation=Traditional)", "Japanese (Japan, Calendar=Japanese Calendar)" },

        /* display language (French) */
        {   "anglais",  "fran\\u00E7ais",   "catalan", "grec",    "norv\\u00E9gien",    "chinois", "allemand", "espagnol", "japonais"     },
        /* display script code (French) */
        {   "",     "",     "",     "",     "",     "Hans", "", "", ""         },
        /* display country (French) */
        {   "\\u00C9tats-Unis",    "France",   "Espagne",  "Gr\\u00E8ce",   "Norv\\u00E8ge",    "Chine", "Allemagne", "", "Japon"       },
        /* display variant (French) */
        {   "",     "",     "",     "",     "NY",   "", "", "", ""       },
        /* display name (French) */
        {   "anglais (\\u00C9tats-Unis)", "fran\\u00E7ais (France)", "catalan (Espagne)",
            "grec (Gr\\u00E8ce)", "norv\\u00E9gien (Norv\\u00E8ge, NY)",  "chinois (Hans, Chine)",
            "allemand (Allemagne, Ordonnancement=Ordre de l'annuaire)", "espagnol (Ordonnancement=Ordre traditionnel)", "japonais (Japon, Calendrier=Calendrier japonais)" },

        /* display language (Catalan) */
        {   "angl\\u00E8s", "franc\\u00E8s", "catal\\u00E0", "grec",  "noruec", "xin\\u00E9s", "alemany", "espanyol", "japon\\u00E8s"    },
        /* display script code (Catalan) */
        {   "",     "",     "",     "",     "",     "Hans", "", "", ""         },
        /* display country (Catalan) */
        {   "Estats Units", "Fran\\u00E7a", "Espanya",  "Gr\\u00E8cia", "Noruega",  "Xina", "Alemanya", "", "Jap\\u00F3"    },
        /* display variant (Catalan) */
        {   "", "", "",                    "", "NY",    "", "", "", ""    },
        /* display name (Catalan) */
        {   "angl\\u00E8s (Estats Units)", "franc\\u00E8s (Fran\\u00E7a)", "catal\\u00E0 (Espanya)",
            "grec (Gr\\u00E8cia)", "noruec (Noruega, NY)", "xin\\u00E9s (Hans, Xina)",
            "alemany (Alemanya, COLLATION=PHONEBOOK)", "espanyol (COLLATION=TRADITIONAL)", "japon\\u00E8s (Jap\\u00F3, CALENDAR=JAPANESE)" },

        /* display language (Greek) */
        {
            "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac",
            "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac",
            "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac",
            "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac",
            "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac",
            "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC",
            "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC",
            "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC",
            "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03AC"
        },
        /* display script code (Greek) */
        {   "",     "",     "",     "",     "",     "Hans", "", "", ""         },
        /* display country (Greek) */
        {
            "\\u0397\\u03bd\\u03c9\\u03bc\\u03ad\\u03bd\\u03b5\\u03c2 \\u03a0\\u03bf\\u03bb\\u03b9\\u03c4\\u03b5\\u03af\\u03b5\\u03c2",
            "\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1",
            "\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1",
            "\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1",
            "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1",
            "\\u039A\\u03AF\\u03BD\\u03B1",
            "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03AF\\u03B1",
            "",
            "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03AF\\u03B1"
        },
        /* display variant (Greek) */
        {   "", "", "", "", "NY", "", "", "", ""    }, /* TODO: currently there is no translation for NY in Greek fix this test when we have it */
        /* display name (Greek) */
        {
            "\\u0391\\u03b3\\u03b3\\u03bb\\u03b9\\u03ba\\u03ac (\\u0397\\u03bd\\u03c9\\u03bc\\u03ad\\u03bd\\u03b5\\u03c2 \\u03a0\\u03bf\\u03bb\\u03b9\\u03c4\\u03b5\\u03af\\u03b5\\u03c2)",
            "\\u0393\\u03b1\\u03bb\\u03bb\\u03b9\\u03ba\\u03ac (\\u0393\\u03b1\\u03bb\\u03bb\\u03af\\u03b1)",
            "\\u039a\\u03b1\\u03c4\\u03b1\\u03bb\\u03b1\\u03bd\\u03b9\\u03ba\\u03ac (\\u0399\\u03c3\\u03c0\\u03b1\\u03bd\\u03af\\u03b1)",
            "\\u0395\\u03bb\\u03bb\\u03b7\\u03bd\\u03b9\\u03ba\\u03ac (\\u0395\\u03bb\\u03bb\\u03ac\\u03b4\\u03b1)",
            "\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03b9\\u03ba\\u03ac (\\u039d\\u03bf\\u03c1\\u03b2\\u03b7\\u03b3\\u03af\\u03b1, NY)",
            "\\u039A\\u03B9\\u03BD\\u03B5\\u03B6\\u03B9\\u03BA\\u03AC (Hans, \\u039A\\u03AF\\u03BD\\u03B1)",
            "\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC (\\u0393\\u03B5\\u03C1\\u03BC\\u03B1\\u03BD\\u03AF\\u03B1, COLLATION=PHONEBOOK)",
            "\\u0399\\u03C3\\u03C0\\u03B1\\u03BD\\u03B9\\u03BA\\u03AC (COLLATION=TRADITIONAL)",
            "\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03B9\\u03BA\\u03AC (\\u0399\\u03B1\\u03C0\\u03C9\\u03BD\\u03AF\\u03B1, CALENDAR=JAPANESE)"
        }
    };
//    private static final int ENGLISH = 0;
//    private static final int FRENCH = 1;
//    private static final int CATALAN = 2;
//    private static final int GREEK = 3;
//    private static final int NORWEGIAN = 4;
    private static final int LANG = 0;
    private static final int SCRIPT = 1;
    private static final int CTRY = 2;
    private static final int VAR = 3;
    private static final int NAME = 4;
//    private static final int LANG3 = 5;
//    private static final int CTRY3 = 6;
//    private static final int LCID = 7;
//    private static final int DLANG_EN = 8;
//    private static final int DSCRIPT_EN = 9;
//    private static final int DCTRY_EN = 10;
//    private static final int DVAR_EN = 11;
//    private static final int DNAME_EN = 12;
//    private static final int DLANG_FR = 13;
//    private static final int DSCRIPT_FR = 14;
//    private static final int DCTRY_FR = 15;
//    private static final int DVAR_FR = 16;
//    private static final int DNAME_FR = 17;
//    private static final int DLANG_CA = 18;
//    private static final int DSCRIPT_CA = 19;
//    private static final int DCTRY_CA = 20;
//    private static final int DVAR_CA = 21;
//    private static final int DNAME_CA = 22;
//    private static final int DLANG_EL = 23;
//    private static final int DSCRIPT_EL = 24;
//    private static final int DCTRY_EL = 25;
//    private static final int DVAR_EL = 26;
//    private static final int DNAME_EL = 27;

    public void TestBasicGetters() {
        int i;
        logln("Testing Basic Getters\n");
        for (i = 0; i < LOCALE_SIZE; i++) {
            String testLocale=(rawData2[NAME][i]);
            logln("Testing "+ testLocale+".....\n");

            String lang =ULocale.getLanguage(testLocale);
            if (0 !=lang.compareTo(rawData2[LANG][i]))    {
                errln("  Language code mismatch: "+lang+" versus "+  rawData2[LANG][i]);
            }

            String ctry=ULocale.getCountry(testLocale);
            if (0 !=ctry.compareTo(rawData2[CTRY][i]))    {
                errln("  Country code mismatch: "+ctry+" versus "+  rawData2[CTRY][i]);
            }

            String var=ULocale.getVariant(testLocale);
            if (0 !=var.compareTo(rawData2[VAR][i]))    {
                errln("  Variant code mismatch: "+var+" versus "+  rawData2[VAR][i]);
            }

            String name = ULocale.getName(testLocale);
            if (0 !=name.compareTo(rawData2[NAME][i]))    {
                errln("  Name mismatch: "+name+" versus "+  rawData2[NAME][i]);
            }

        }
    }

    public void TestPrefixes() {
        // POSIX ids are no longer handled by getName, so POSIX failures are ignored
        final String [][] testData = new String[][]{
            /* null canonicalize() column means "expect same as getName()" */
            {"sv", "", "FI", "AL", "sv-fi-al", "sv_FI_AL", null},
            {"en", "", "GB", "", "en-gb", "en_GB", null},
            {"i-hakka", "", "MT", "XEMXIJA", "i-hakka_MT_XEMXIJA", "i-hakka_MT_XEMXIJA", null},
            {"i-hakka", "", "CN", "", "i-hakka_CN", "i-hakka_CN", null},
            {"i-hakka", "", "MX", "", "I-hakka_MX", "i-hakka_MX", null},
            {"x-klingon", "", "US", "SANJOSE", "X-KLINGON_us_SANJOSE", "x-klingon_US_SANJOSE", null},

            {"de", "", "", "1901", "de-1901", "de__1901", null},
            {"mr", "", "", "", "mr.utf8", "mr.utf8", "mr"},
            {"de", "", "TV", "", "de-tv.koi8r", "de_TV.koi8r", "de_TV"},
            {"x-piglatin", "", "ML", "", "x-piglatin_ML.MBE", "x-piglatin_ML.MBE", "x-piglatin_ML"},  /* Multibyte English */
            {"i-cherokee", "","US", "", "i-Cherokee_US.utf7", "i-cherokee_US.utf7", "i-cherokee_US"},
            {"x-filfli", "", "MT", "FILFLA", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA.gb-18030", "x-filfli_MT_FILFLA"},
            {"no", "", "NO", "NY_B", "no-no-ny.utf32@B", "no_NO_NY.utf32@B", "no_NO_NY_B"},
            {"no", "", "NO", "B",  "no-no.utf32@B", "no_NO.utf32@B", "no_NO_B"},
            {"no", "", "",   "NY", "no__ny", "no__NY", null},
            {"no", "", "",   "NY", "no@ny", "no@ny", "no__NY"},
            {"el", "Latn", "", "", "el-latn", "el_Latn", null},
            {"en", "Cyrl", "RU", "", "en-cyrl-ru", "en_Cyrl_RU", null},
            {"zh", "Hant", "TW", "STROKE", "zh-hant_TW_STROKE", "zh_Hant_TW_STROKE", "zh_Hant_TW@collation=stroke"},
            {"zh", "Hant", "CN", "STROKE", "zh-hant_CN_STROKE", "zh_Hant_CN_STROKE", "zh_Hant_CN@collation=stroke"},
            {"zh", "Hant", "TW", "PINYIN", "zh-hant_TW_PINYIN", "zh_Hant_TW_PINYIN", "zh_Hant_TW@collation=pinyin"},
            {"qq", "Qqqq", "QQ", "QQ", "qq_Qqqq_QQ_QQ", "qq_Qqqq_QQ_QQ", null},
            {"qq", "Qqqq", "", "QQ", "qq_Qqqq__QQ", "qq_Qqqq__QQ", null},
            {"ab", "Cdef", "GH", "IJ", "ab_cdef_gh_ij", "ab_Cdef_GH_IJ", null}, /* total garbage */

            // odd cases
            {"", "", "", "", "@FOO=bar", "@foo=bar", null},
            {"", "", "", "", "_@FOO=bar", "@foo=bar", null},
            {"", "", "", "", "__@FOO=bar", "@foo=bar", null},
            {"", "", "", "FOO", "__foo@FOO=bar", "__FOO@foo=bar", null}, // we have some of these prefixes
        };

        String loc, buf,buf1;
        final String [] testTitles = {
            "ULocale.getLanguage()",
            "ULocale.getScript()",
            "ULocale.getCountry()",
            "ULocale.getVariant()",
            "name",
            "ULocale.getName()",
            "canonicalize()",
        };
        ULocale uloc;

        for(int row=0;row<testData.length;row++) {
            loc = testData[row][NAME];
            logln("Test #"+row+": "+loc);

            uloc = new ULocale(loc);

            for(int n=0;n<=(NAME+2);n++) {
                if(n==NAME) continue;

                switch(n) {
                case LANG:
                    buf  = ULocale.getLanguage(loc);
                    buf1 = uloc.getLanguage();
                    break;

                case SCRIPT:
                    buf  = ULocale.getScript(loc);
                    buf1 = uloc.getScript();
                    break;

                case CTRY:
                    buf  = ULocale.getCountry(loc);
                    buf1 = uloc.getCountry();
                    break;

                case VAR:
                    buf  = ULocale.getVariant(loc);
                    buf1 = buf;
                    break;

                case NAME+1:
                    buf  = ULocale.getName(loc);
                    buf1 = uloc.getName();
                    break;

                case NAME+2:
                    buf = ULocale.canonicalize(loc);
                    buf1 = ULocale.createCanonical(loc).getName();
                    break;

                default:
                    buf = "**??";
                    buf1 = buf;
                }

                logln("#"+row+": "+testTitles[n]+" on "+loc+": -> ["+buf+"]");

                String expected = testData[row][n];
                if (expected == null && n == (NAME+2)) {
                    expected = testData[row][NAME+1];
                }

                // ignore POSIX failures in getName, we don't spec behavior in this case
                if (n == NAME+1 &&
                    (expected.indexOf('.') != -1 ||
                     expected.indexOf('@') != -1)) {
                    continue;
                }

                if(buf.compareTo(expected)!=0) {
                    errln("#"+row+": "+testTitles[n]+" on "+loc+": -> ["+buf+"] (expected '"+expected+"'!)");
                }
                if(buf1.compareTo(expected)!=0) {
                    errln("#"+row+": "+testTitles[n]+" on ULocale object "+loc+": -> ["+buf1+"] (expected '"+expected+"'!)");
                }
            }
        }
    }

    public void TestObsoleteNames(){
        final String[][] tests = new String[][]{
            /* locale, language3, language2, Country3, country2 */
            { "eng_USA", "eng", "en", "USA", "US" },
            { "kok",  "kok", "kok", "", "" },
            { "in",  "ind", "in", "", "" },
            { "id",  "ind", "id", "", "" }, /* NO aliasing */
            { "sh",  "srp", "sh", "", "" },
            { "zz_CS",  "", "zz", "SCG", "CS" },
            { "zz_FX",  "", "zz", "FXX", "FX" },
            { "zz_RO",  "", "zz", "ROU", "RO" },
            { "zz_TP",  "", "zz", "TMP", "TP" },
            { "zz_TL",  "", "zz", "TLS", "TL" },
            { "zz_ZR",  "", "zz", "ZAR", "ZR" },
            { "zz_FXX",  "", "zz", "FXX", "FX" }, /* no aliasing. Doesn't go to PS(PSE). */
            { "zz_ROM",  "", "zz", "ROU", "RO" },
            { "zz_ROU",  "", "zz", "ROU", "RO" },
            { "zz_ZAR",  "", "zz", "ZAR", "ZR" },
            { "zz_TMP",  "", "zz", "TMP", "TP" },
            { "zz_TLS",  "", "zz", "TLS", "TL" },
            { "zz_YUG",  "", "zz", "YUG", "YU" },
            { "mlt_PSE", "mlt", "mt", "PSE", "PS" },
            { "iw", "heb", "iw", "", "" },
            { "ji", "yid", "ji", "", "" },
            { "jw", "jaw", "jw", "", "" },
            { "sh", "srp", "sh", "", "" },
            { "", "", "", "", "" }
        };

        for(int i=0;i<tests.length;i++){
            String locale = tests[i][0];
            logln("** Testing : "+ locale);
            String buff, buff1;
            ULocale uloc  = new ULocale(locale);

            buff = ULocale.getISO3Language(locale);
            if(buff.compareTo(tests[i][1])!=0){
                errln("FAIL: ULocale.getISO3Language("+locale+")=="+
                      buff+",\t expected "+tests[i][1]);
            }else{
                logln("   ULocale.getISO3Language("+locale+")=="+buff);
            }

            buff1 = uloc.getISO3Language();
            if(buff1.compareTo(tests[i][1])!=0){
                errln("FAIL: ULocale.getISO3Language("+locale+")=="+
                      buff+",\t expected "+tests[i][1]);
            }else{
                logln("   ULocale.getISO3Language("+locale+")=="+buff);
            }

            buff = ULocale.getLanguage(locale);
            if(buff.compareTo(tests[i][2])!=0){
                errln("FAIL: ULocale.getLanguage("+locale+")=="+
                      buff+",\t expected "+tests[i][2]);
            }else{
                logln("   ULocale.getLanguage("+locale+")=="+buff);
            }

            buff = ULocale.getISO3Country(locale);
            if(buff.compareTo(tests[i][3])!=0){
                errln("FAIL: ULocale.getISO3Country("+locale+")=="+
                      buff+",\t expected "+tests[i][3]);
            }else{
                logln("   ULocale.getISO3Country("+locale+")=="+buff);
            }

            buff1 = uloc.getISO3Country();
            if(buff1.compareTo(tests[i][3])!=0){
                errln("FAIL: ULocale.getISO3Country("+locale+")=="+
                      buff+",\t expected "+tests[i][3]);
            }else{
                logln("   ULocale.getISO3Country("+locale+")=="+buff);
            }

            buff = ULocale.getCountry(locale);
            if(buff.compareTo(tests[i][4])!=0){
                errln("FAIL: ULocale.getCountry("+locale+")=="+
                      buff+",\t expected "+tests[i][4]);
            }else{
                logln("   ULocale.getCountry("+locale+")=="+buff);
            }
        }

        if (ULocale.getLanguage("iw_IL").compareTo( ULocale.getLanguage("he_IL"))==0) {
            errln("he,iw ULocale.getLanguage mismatch");
        }

        String buff = ULocale.getLanguage("kok_IN");
        if(buff.compareTo("kok")!=0){
            errln("ULocale.getLanguage(\"kok\") failed. Expected: kok Got: "+buff);
        }
    }
    public void TestCanonicalization(){
        final String[][]testCases = new String[][]{
            { "ca_ES_PREEURO", "ca_ES_PREEURO", "ca_ES@currency=ESP" },
            { "de_AT_PREEURO", "de_AT_PREEURO", "de_AT@currency=ATS" },
            { "de_DE_PREEURO", "de_DE_PREEURO", "de_DE@currency=DEM" },
            { "de_LU_PREEURO", "de_LU_PREEURO", "de_LU@currency=EUR" },
            { "el_GR_PREEURO", "el_GR_PREEURO", "el_GR@currency=GRD" },
            { "en_BE_PREEURO", "en_BE_PREEURO", "en_BE@currency=BEF" },
            { "en_IE_PREEURO", "en_IE_PREEURO", "en_IE@currency=IEP" },
            { "es_ES_PREEURO", "es_ES_PREEURO", "es_ES@currency=ESP" },
            { "eu_ES_PREEURO", "eu_ES_PREEURO", "eu_ES@currency=ESP" },
            { "fi_FI_PREEURO", "fi_FI_PREEURO", "fi_FI@currency=FIM" },
            { "fr_BE_PREEURO", "fr_BE_PREEURO", "fr_BE@currency=BEF" },
            { "fr_FR_PREEURO", "fr_FR_PREEURO", "fr_FR@currency=FRF" },
            { "fr_LU_PREEURO", "fr_LU_PREEURO", "fr_LU@currency=LUF" },
            { "ga_IE_PREEURO", "ga_IE_PREEURO", "ga_IE@currency=IEP" },
            { "gl_ES_PREEURO", "gl_ES_PREEURO", "gl_ES@currency=ESP" },
            { "it_IT_PREEURO", "it_IT_PREEURO", "it_IT@currency=ITL" },
            { "nl_BE_PREEURO", "nl_BE_PREEURO", "nl_BE@currency=BEF" },
            { "nl_NL_PREEURO", "nl_NL_PREEURO", "nl_NL@currency=NLG" },
            { "pt_PT_PREEURO", "pt_PT_PREEURO", "pt_PT@currency=PTE" },
            { "de__PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" },
            { "de_PHONEBOOK", "de__PHONEBOOK", "de@collation=phonebook" },
            { "en_GB_EURO", "en_GB_EURO", "en_GB@currency=EUR" },
            { "en_GB@EURO", null, "en_GB@currency=EUR" }, /* POSIX ID */
            { "es__TRADITIONAL", "es__TRADITIONAL", "es@collation=traditional" },
            { "hi__DIRECT", "hi__DIRECT", "hi@collation=direct" },
            { "ja_JP_TRADITIONAL", "ja_JP_TRADITIONAL", "ja_JP@calendar=japanese" },
            { "th_TH_TRADITIONAL", "th_TH_TRADITIONAL", "th_TH@calendar=buddhist" },
            { "zh_TW_STROKE", "zh_TW_STROKE", "zh_TW@collation=stroke" },
            { "zh__PINYIN", "zh__PINYIN", "zh@collation=pinyin" },
            { "zh@collation=pinyin", "zh@collation=pinyin", "zh@collation=pinyin" },
            { "zh_CN@collation=pinyin", "zh_CN@collation=pinyin", "zh_CN@collation=pinyin" },
            { "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin", "zh_CN_CA@collation=pinyin" },
            { "en_US_POSIX", "en_US_POSIX", "en_US_POSIX" },
            { "hy_AM_REVISED", "hy_AM_REVISED", "hy_AM_REVISED" },
            { "no_NO_NY", "no_NO_NY", "no_NO_NY" /* not: "nn_NO" [alan ICU3.0] */ },
            { "no@ny", null, "no__NY" /* not: "nn" [alan ICU3.0] */ }, /* POSIX ID */
            { "no-no.utf32@B", null, "no_NO_B" /* not: "nb_NO_B" [alan ICU3.0] */ }, /* POSIX ID */
            { "qz-qz@Euro", null, "qz_QZ@currency=EUR" }, /* qz-qz uses private use iso codes */
            { "en-BOONT", "en__BOONT", "en__BOONT" }, /* registered name */
            { "de-1901", "de__1901", "de__1901" }, /* registered name */
            { "de-1906", "de__1906", "de__1906" }, /* registered name */
            { "sr-SP-Cyrl", "sr_SP_CYRL", "sr_Cyrl_RS" }, /* .NET name */
            { "sr-SP-Latn", "sr_SP_LATN", "sr_Latn_RS" }, /* .NET name */
            { "sr_YU_CYRILLIC", "sr_YU_CYRILLIC", "sr_Cyrl_RS" }, /* Linux name */
            { "uz-UZ-Cyrl", "uz_UZ_CYRL", "uz_Cyrl_UZ" }, /* .NET name */
            { "uz-UZ-Latn", "uz_UZ_LATN", "uz_Latn_UZ" }, /* .NET name */
            { "zh-CHS", "zh_CHS", "zh_Hans" }, /* .NET name */
            { "zh-CHT", "zh_CHT", "zh_Hant" }, /* .NET name This may change back to zh_Hant */

            /* posix behavior that used to be performed by getName */
            { "mr.utf8", null, "mr" },
            { "de-tv.koi8r", null, "de_TV" },
            { "x-piglatin_ML.MBE", null, "x-piglatin_ML" },
            { "i-cherokee_US.utf7", null, "i-cherokee_US" },
            { "x-filfli_MT_FILFLA.gb-18030", null, "x-filfli_MT_FILFLA" },
            { "no-no-ny.utf8@B", null, "no_NO_NY_B" /* not: "nn_NO" [alan ICU3.0] */ }, /* @ ignored unless variant is empty */

            /* fleshing out canonicalization */
            /* sort keywords, ';' is separator so not present at end in canonical form */
            { "en_Hant_IL_VALLEY_GIRL@currency=EUR;calendar=Japanese;", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
            /* already-canonical ids are not changed */
            { "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR", "en_Hant_IL_VALLEY_GIRL@calendar=Japanese;currency=EUR" },
            /* PRE_EURO and EURO conversions don't affect other keywords */
            /* not in spec
               { "es_ES_PREEURO@CALendar=Japanese", "es_ES_PREEURO@calendar=Japanese", "es_ES@calendar=Japanese;currency=ESP" },
               { "es_ES_EURO@SHOUT=zipeedeedoodah", "es_ES_EURO@shout=zipeedeedoodah", "es_ES@currency=EUR;shout=zipeedeedoodah" },
            */
            /* currency keyword overrides PRE_EURO and EURO currency */
            /* not in spec
               { "es_ES_PREEURO@currency=EUR", "es_ES_PREEURO@currency=EUR", "es_ES@currency=EUR" },
               { "es_ES_EURO@currency=ESP", "es_ES_EURO@currency=ESP", "es_ES@currency=ESP" },
            */
            /* norwegian is just too weird, if we handle things in their full generality */
            /* this is a negative test to show that we DO NOT handle 'lang=no,var=NY' specially. */
            { "no-Hant-GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$", "no_Hant_GB_NY@currency=$$$" /* not: "nn_Hant_GB@currency=$$$" [alan ICU3.0] */ },

            /* test cases reflecting internal resource bundle usage */
            /* root is just a language */
            { "root@kw=foo", "root@kw=foo", "root@kw=foo" },
            /* level 2 canonicalization should not touch basename when there are keywords and it is null */
            { "@calendar=gregorian", "@calendar=gregorian", "@calendar=gregorian" },
        };

        for(int i = 0; i< testCases.length;i++){
            String[] testCase = testCases[i];
            String source = testCase[0];
            String level1Expected = testCase[1];
            String level2Expected = testCase[2];

            if (level1Expected != null) { // null means we have no expectations for how this case is handled
                String level1 = ULocale.getName(source);
                if (!level1.equals(level1Expected)) {
                    errln("ULocale.getName error for: '" + source +
                          "' expected: '" + level1Expected + "' but got: '" + level1 + "'");
                } else {
                    logln("Ulocale.getName for: '" + source + "' returned: '" + level1 + "'");
                }
            } else {
                logln("ULocale.getName skipped: '" + source + "'");
            }

            if (level2Expected != null) {
                String level2 = ULocale.canonicalize(source);
                if(!level2.equals(level2Expected)){
                    errln("ULocale.getName error for: '" + source +
                          "' expected: '" + level2Expected + "' but got: '" + level2 + "'");
                } else {
                    logln("Ulocale.canonicalize for: '" + source + "' returned: '" + level2 + "'");
                }
            } else {
                logln("ULocale.canonicalize skipped: '" + source + "'");
            }
        }
    }

    public void TestGetAvailable(){
        ULocale[] locales = ULocale.getAvailableLocales();
        if(locales.length<10){
            errln("Did not get the correct result from getAvailableLocales");
        }
        if(!locales[locales.length-1].equals("zu_ZA")){
            errln("Did not get the expected result");
        }
    }

    public void TestDisplayNames() {
        // consistency check, also check that all data is available
        {
            ULocale[] locales = ULocale.getAvailableLocales();
            for (int i = 0; i < locales.length; ++i) {
                ULocale l = locales[i];
                String name = l.getDisplayName();

                logln(l + " --> " + name +
                      ", " + l.getDisplayName(ULocale.GERMAN) +
                      ", " + l.getDisplayName(ULocale.FRANCE));

                String language = l.getDisplayLanguage();
                String script = l.getDisplayScriptInContext();
                String country = l.getDisplayCountry();
                String variant = l.getDisplayVariant();

                checkName(name, language, script, country, variant, ULocale.getDefault());

                for (int j = 0; j < locales.length; ++j) {
                    ULocale dl = locales[j];

                    name = l.getDisplayName(dl);
                    language = l.getDisplayLanguage(dl);
                    script = l.getDisplayScriptInContext(dl);
                    country = l.getDisplayCountry(dl);
                    variant = l.getDisplayVariant(dl);

                    if (!checkName(name, language, script, country, variant, dl)) {
                        break;
                    }
                }
            }
        }
        // spot check
        {
            ULocale[] locales = {
                ULocale.US, ULocale.GERMANY, ULocale.FRANCE
            };
            String[] names = {
                "Chinese (China)", "Chinesisch (China)", "chinois (Chine)"
            };
            String[] names2 = {
                    "Simplified Chinese (China)", "Chinesisch (vereinfacht) (China)", "chinois simplifi\u00E9 (Chine)"
                };
            ULocale locale = new ULocale("zh_CN");
            ULocale locale2 = new ULocale("zh_Hans_CN");
            
            for (int i = 0; i < locales.length; ++i) {
                String name = locale.getDisplayName(locales[i]);
                if (!names[i].equals(name)) {
                    errln("expected '" + names[i] + "' but got '" + name + "'");
                }
            }
            for (int i = 0; i < locales.length; ++i) {
                String name = locale2.getDisplayNameWithDialect(locales[i]);
                if (!names2[i].equals(name)) {
                    errln("expected '" + names2[i] + "' but got '" + name + "'");
                }
            }
        }
    }

    private boolean checkName(String name, String language, String script, String country, String variant, ULocale dl) {
        if (language.length() > 0 && name.indexOf(language) == -1) {
            errln("loc: " + dl + " name '" + name + "' does not contain language '" + language + "'");
            return false;
        }
        if (script.length() > 0 && name.indexOf(script) == -1) {
            errln("loc: " + dl + " name '" + name + "' does not contain script '" + script + "'");
            return false;
        }
        if (country.length() > 0 && name.indexOf(country) == -1) {
            errln("loc: " + dl + " name '" + name + "' does not contain country '" + country + "'");
            return false;
        }
        if (variant.length() > 0 && name.indexOf(variant) == -1) {
            errln("loc: " + dl + " name '" + name + "' does not contain variant '" + variant + "'");
            return false;
        }
        return true;
    }

    public void TestCoverage() {
        {
            //Cover displayXXX
            int i, j;
            String localeID="zh_CN";
            String name, language, script, country, variant;
            logln("Covering APIs with signature displayXXX(String, String)");
            for (i = 0; i < LOCALE_SIZE; i++) {
                //localeID String
                String testLocale=(rawData2[NAME][i]);

                logln("Testing "+ testLocale+".....");
                name = ULocale.getDisplayName(localeID, testLocale);
                language = ULocale.getDisplayLanguage(localeID, testLocale);
                script = ULocale.getDisplayScriptInContext(localeID, testLocale);
                country = ULocale.getDisplayCountry(localeID, testLocale);
                variant = ULocale.getDisplayVariant(localeID, testLocale);

                if (!checkName(name, language, script, country, variant, new ULocale(testLocale))) {
                    break;
                }
            }

            logln("Covering APIs with signature displayXXX(String, ULocale)\n");
            for (j = 0; j < LOCALE_SIZE; j++) {
                String testLocale=(rawData2[NAME][j]);
                ULocale loc = new ULocale(testLocale);

                logln("Testing "+ testLocale+".....");
                name = ULocale.getDisplayName(localeID, loc);
                language = ULocale.getDisplayLanguage(localeID, loc);
                script = ULocale.getDisplayScriptInContext(localeID, loc);
                country = ULocale.getDisplayCountry(localeID, loc);
                variant = ULocale.getDisplayVariant(localeID, loc);

                if (!checkName(name, language, script, country, variant, loc)) {
                    break;
                }
            }
        }
        ULocale loc1 = new ULocale("en_US_BROOKLYN");
        ULocale loc2 = new ULocale("en","US","BROOKLYN");
        if (!loc2.equals(loc1)){
            errln("ULocale.ULocale(String a, String b, String c)");
        }
        
        ULocale loc3 = new ULocale("en_US");
        ULocale loc4 = new ULocale("en","US");
        if (!loc4.equals(loc3)){
            errln("ULocale.ULocale(String a, String b)");
        }
        
        ULocale loc5 = (ULocale) loc4.clone();
        if (!loc5.equals(loc4)){
            errln("ULocale.clone should get the same ULocale");
        }
        ULocale.getISOCountries(); // To check the result ?!
    }

    public void TestBamBm() {
        // "bam" shouldn't be there since the official code is 'bm'
        String[] isoLanguages = ULocale.getISOLanguages();
        for (int i = 0; i < isoLanguages.length; ++i) {
            if ("bam".equals(isoLanguages[i])) {
                errln("found bam");
            }
            if (i > 0 && isoLanguages[i].compareTo(isoLanguages[i-1]) <= 0) {
                errln("language list out of order: '" + isoLanguages[i] + " <= " + isoLanguages[i-1]);
            }
        }
    }

    public void TestDisplayKeyword() {
        //prepare testing data
        initHashtable();
        String[] data = {"en_US@collation=direct;calendar=islamic-civil",
             "zh_Hans@collation=pinyin;calendar=chinese",
             "foo_Bar_BAZ@collation=traditional;calendar=buddhist"};

        for (int i = 0; i < data.length; i++) {
            String localeID = data[i];
            logln("");
            logln("Testing locale " + localeID + " ...");
            ULocale loc = new ULocale(localeID);

            Iterator it = loc.getKeywords();
            Iterator it2 = ULocale.getKeywords(localeID);
            //it and it2 are not equal here. No way to verify their equivalence yet.
            while(it.hasNext()) {
                String key = (String)it.next();
                String key2 = (String)it2.next();
                if (!key.equals(key2)) {
                    errln("FAIL: static and non-static getKeywords returned different results.");
                }

                //To verify display of Keyword
                // display the above key in English
                String s0 = ULocale.getDisplayKeyword(key); //display in default locale
                String s1 = ULocale.getDisplayKeyword(key, ULocale.US);
                String s2 = ULocale.getDisplayKeyword(key, "en_US");
                if (!s1.equals(s2)) {
                    errln ("FAIL: one of the getDisplayKeyword methods failed.");
                }
                if (ULocale.getDefault().equals(ULocale.US) && !s1.equals(s0)) {
                    errln ("FAIL: getDisplayKeyword methods failed for the default locale.");
                }
                if (!s1.equals(h[0].get(key))) {
                    warnln("Locale " + localeID + " getDisplayKeyword for key: " + key +
                          " in English expected \"" + h[0].get(key) + "\" saw \"" + s1 + "\" instead");
                } else {
                    logln("OK: getDisplayKeyword for key: " + key + " in English got " + s1);
                }

                // display the key in S-Chinese
                s1 = ULocale.getDisplayKeyword(key, ULocale.CHINA);
                s2 = ULocale.getDisplayKeyword(key, "zh_Hans");
                if (!s1.equals(s2)) {
                    errln ("one of the getDisplayKeyword methods failed.");
                }
                if (!s1.equals(h[1].get(key))) {
                    warnln("Locale " + localeID + " getDisplayKeyword for key: " + key +
                          " in Chinese expected \"" + h[1].get(key) + "\" saw \"" + s1 + "\" instead");
                } else {
                    logln("OK: getDisplayKeyword for key: " + key + " in Chinese got " + s1);
                }

                //To verify display of Keyword values
                String type = loc.getKeywordValue(key);
                // display type in English
                String ss0 = loc.getDisplayKeywordValue(key);
                String ss1 = loc.getDisplayKeywordValue(key, ULocale.US);
                String ss2 = ULocale.getDisplayKeywordValue(localeID, key, "en_US");
                String ss3 = ULocale.getDisplayKeywordValue(localeID, key, ULocale.US);
                if (!ss1.equals(ss2) || !ss1.equals(ss3)) {
                    errln ("FAIL: one of the getDisplayKeywordValue methods failed.");
                }
                if (ULocale.getDefault().equals(ULocale.US) && !ss1.equals(ss0)) {
                    errln ("FAIL: getDisplayKeyword methods failed for the default locale.");
                }
                if (!ss1.equals(h[0].get(type))) {
                    warnln(" Locale " + localeID + " getDisplayKeywordValue for key: " + key +
                          " in English expected \"" + h[0].get(type) + "\" saw \"" + ss1 + "\" instead");
                } else {
                    logln("OK: getDisplayKeywordValue for key: " + key + " in English got " + ss1);
                }

                // display type in Chinese
                ss0 = loc.getDisplayKeywordValue(key);
                ss1 = loc.getDisplayKeywordValue(key, ULocale.CHINA);
                ss2 = ULocale.getDisplayKeywordValue(localeID, key, "zh_Hans");
                ss3 = ULocale.getDisplayKeywordValue(localeID, key, ULocale.CHINA);
                if (!ss1.equals(ss2) || !ss1.equals(ss3)) {
                    warnln ("one of the getDisplayKeywordValue methods failed.");
                }
                if (!ss1.equals(h[1].get(type))) {
                    warnln("Locale " + localeID + " getDisplayKeywordValue for key: " + key +
                          " in Chinese expected \"" + h[1].get(type) + "\" saw \"" + ss1 + "\" instead");
                } else {
                    logln("OK: getDisplayKeywordValue for key: " + key + " in Chinese got " + ss1);
                }
            }
        }
    }
    
    public void TestDisplayWithKeyword() {
        // Note, this test depends on locale display data for the U.S. and Taiwan.
        // If the data changes (in particular, the keyTypePattern may change for Taiwan),
        // this test will break.
        LocaleDisplayNames dn = LocaleDisplayNames.getInstance(ULocale.US,
                DialectHandling.DIALECT_NAMES);
        LocaleDisplayNames tdn = LocaleDisplayNames.getInstance(ULocale.TAIWAN,
                DialectHandling.DIALECT_NAMES);
        String name = dn.localeDisplayName("de@collation=phonebook");
        String target = "German (Phonebook Sort Order)";
        assertEquals("collation", target, name);
        
        name = tdn.localeDisplayName("de@collation=phonebook");
        target = "德文（電話簿排序）"; // \u5FB7\u6587\uFF08\u96FB\u8A71\u7C3F\u6392\u5E8F\uFF09
        assertEquals("collation", target, name);

        name = dn.localeDisplayName("de@currency=XYZ");
        target = "German (Currency: XYZ)";
        assertEquals("currency", target, name);
        
        name = tdn.localeDisplayName("de@currency=XYZ");
        target = "德文（貨幣: XYZ）";  // \u5FB7\u6587\uFF08\u8CA8\u5E63: XYZ\uFF09
        assertEquals("currency", target, name);
        
        name = dn.localeDisplayName("de@foo=bar");
        target = "German (foo=bar)";
        assertEquals("foo", target, name);
        
        name = tdn.localeDisplayName("de@foo=bar");
        target = "德文（foo=bar）"; // \u5FB7\u6587\uFF08foo=bar\uFF09
        assertEquals("foo", target, name);
        
        ULocale locale = ULocale.forLanguageTag("de-x-foobar");
        name = dn.localeDisplayName(locale);
        target = "German (Private-Use: foobar)";
        assertEquals("foobar", target, name);

        name = tdn.localeDisplayName(locale);
        target = "德文（私人使用: foobar）"; // \u5FB7\u6587\uFF08\u79C1\u4EBA\u4F7F\u7528: foobar\uFF09
        assertEquals("foobar", target, name);
}
    
    private void initHashtable() {
        h[0] = new HashMap<String, String>();
        h[1] = new HashMap<String, String>();

        //display in English
        h[0].put("collation", "Sort Order");
        h[0].put("calendar", "Calendar");
        h[0].put("currency", "Currency");
        h[0].put("phonebook", "Phonebook Order");
        h[0].put("pinyin", "Pinyin Sort Order");
        h[0].put("traditional", "Traditional Sort Order");
        h[0].put("stroke", "Stroke Order");
        h[0].put("direct", "direct"); // Direct sort order is deprecated in CLDR
        h[0].put("japanese", "Japanese Calendar");
        h[0].put("buddhist", "Buddhist Calendar");
        h[0].put("islamic", "Islamic Calendar");
        h[0].put("islamic-civil", "Islamic-Civil Calendar" );
        h[0].put("hebrew", "Hebrew Calendar");
        h[0].put("chinese", "Chinese Calendar");
        h[0].put("gregorian", "Gregorian Calendar" );

        //display in S-Chinese
        h[1].put("collation", "\u5BF9\u7167");
        h[1].put("calendar", "\u65E5\u5386");
        h[1].put("currency", "\u8D27\u5E01");
        h[1].put("direct", "direct"); // Direct sort order is deprecated in CLDR
        h[1].put("phonebook", "\u7535\u8BDD\u7C3F\u987A\u5E8F");
        h[1].put("pinyin", "\u62FC\u97F3\u987a\u5e8f");
        h[1].put("stroke", "\u7B14\u5212\u987A\u5E8F");
        h[1].put("traditional", "\u4F20\u7EDF\u5386\u6CD5");
        h[1].put("japanese", "\u65E5\u672C\u65E5\u5386");
        h[1].put("buddhist", "\u4F5B\u6559\u65E5\u5386");
        h[1].put("islamic", "\u4F0A\u65AF\u5170\u65E5\u5386");
        h[1].put("islamic-civil", "\u4F0A\u65AF\u5170\u5E0C\u5409\u6765\u5386");
        h[1].put("hebrew", "\u5E0C\u4F2F\u6765\u65E5\u5386");
        h[1].put("chinese", "\u519C\u5386");
        h[1].put("gregorian", "\u516C\u5386");
    }

    //Hashtables for storing expected display of keys/types of locale in English and Chinese
    private static Map[] h = new Map[2];
    
    private static final String ACCEPT_LANGUAGE_TESTS[][]  =  {
    /*#      result  fallback? */
    /*0*/ { "mt_MT", "false" },
    /*1*/ { "en", "false" },
    /*2*/ { "en", "true" }, // fell back from en-zzz to en
    /*3*/ { null, "true" },
    /*4*/ { "es", "false" }, 
    /*5*/ { "de", "false" },
    /*6*/ { "zh_TW", "false" },
    /*7*/ { "zh", "true" },
    };
    
    private static final String ACCEPT_LANGUAGE_HTTP[] = { 
                    /*0*/ "mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53, th-th-traditional;q=.01",
                    /*1*/ "ja;q=0.5, en;q=0.8, tlh",
                    /*2*/ "en-zzz, de-lx;q=0.8",
                    /*3*/ "mga-ie;q=0.9, tlh",
                    /*4*/ "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                          "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, xxx-yyy;q=.01, "+
                               "es",
                    /*5*/ "de;q=.9, fr;q=.9, xxx-yyy, sr;q=.8",
                    /*6*/ "zh-tw",
                    /*7*/ "zh-hant-cn",
    };


    public void TestAcceptLanguage() {
        for(int i = 0 ; i < (ACCEPT_LANGUAGE_HTTP.length); i++) {
            Boolean expectBoolean = new Boolean(ACCEPT_LANGUAGE_TESTS[i][1]);
            String expectLocale=ACCEPT_LANGUAGE_TESTS[i][0];
            
           logln("#" + i + ": expecting: " + expectLocale + " (" + expectBoolean + ")");
            
            boolean r[] = { false };
            ULocale n = ULocale.acceptLanguage(ACCEPT_LANGUAGE_HTTP[i], r);
            if((n==null)&&(expectLocale!=null)) {
                errln("result was null! line #" + i);
                continue;
            }
            if(((n==null)&&(expectLocale==null)) || (n.toString().equals(expectLocale))) {
                logln(" locale: OK." );
            } else {
                errln("expected " + expectLocale + " but got " + n.toString());
            }
            if(expectBoolean.equals(new Boolean(r[0]))) {
                logln(" bool: OK.");
            } else {
                errln("bool: not OK, was " + new Boolean(r[0]).toString() + " expected " + expectBoolean.toString());
            }
        }
    }
    
    private ULocale[] StringToULocaleArray(String acceptLanguageList){
        //following code is copied from 
        //ULocale.acceptLanguage(String acceptLanguageList, ULocale[] availableLocales, boolean[] fallback)
        class ULocaleAcceptLanguageQ implements Comparable {
            private double q;
            private double serial;
            public ULocaleAcceptLanguageQ(double theq, int theserial) {
                q = theq;
                serial = theserial;
            }
            public int compareTo(Object o) {
                ULocaleAcceptLanguageQ other = (ULocaleAcceptLanguageQ) o;
                if(q > other.q) { // reverse - to sort in descending order
                    return -1;
                } else if(q < other.q) {
                    return 1;
                }
                if(serial < other.serial) {
                    return -1;
                } else if(serial > other.serial) {
                    return 1;
                } else {
                    return 0; // same object
                }
            }
        }

        // 1st: parse out the acceptLanguageList into an array
        
        TreeMap map = new TreeMap();
        
        final int l = acceptLanguageList.length();
        int n;
        for(n=0;n<l;n++) {
            int itemEnd = acceptLanguageList.indexOf(',',n);
            if(itemEnd == -1) {
                itemEnd = l;
            }
            int paramEnd = acceptLanguageList.indexOf(';',n);
            double q = 1.0;
 
            if((paramEnd != -1) && (paramEnd < itemEnd)) {
                /* semicolon (;) is closer than end (,) */
                int t = paramEnd + 1;
                while(UCharacter.isWhitespace(acceptLanguageList.charAt(t))) {
                    t++;
                }
                if(acceptLanguageList.charAt(t)=='q') {
                    t++;
                }
                while(UCharacter.isWhitespace(acceptLanguageList.charAt(t))) {
                    t++;
                }
                if(acceptLanguageList.charAt(t)=='=') {
                    t++;
                }
                while(UCharacter.isWhitespace(acceptLanguageList.charAt(t))) {
                    t++;
                }
                try {
                    String val = acceptLanguageList.substring(t,itemEnd).trim();
                    q = Double.parseDouble(val);
                } catch (NumberFormatException nfe) {
                    q = 1.0;
                }
            } else {
                q = 1.0; //default
                paramEnd = itemEnd;
            }

            String loc = acceptLanguageList.substring(n,paramEnd).trim();
            int serial = map.size();
            ULocaleAcceptLanguageQ entry = new ULocaleAcceptLanguageQ(q,serial);
            map.put(entry, new ULocale(ULocale.canonicalize(loc))); // sort in reverse order..   1.0, 0.9, 0.8 .. etc
            n = itemEnd; // get next item. (n++ will skip over delimiter)
        }
        
        // 2. pull out the map 
        ULocale acceptList[] = (ULocale[])map.values().toArray(new ULocale[map.size()]);
        return acceptList;
    }
    
    public void TestAcceptLanguage2() {
        for(int i = 0 ; i < (ACCEPT_LANGUAGE_HTTP.length); i++) {
            Boolean expectBoolean = new Boolean(ACCEPT_LANGUAGE_TESTS[i][1]);
            String expectLocale=ACCEPT_LANGUAGE_TESTS[i][0];
            
           logln("#" + i + ": expecting: " + expectLocale + " (" + expectBoolean + ")");
            
            boolean r[] = { false };
            ULocale n = ULocale.acceptLanguage(StringToULocaleArray(ACCEPT_LANGUAGE_HTTP[i]), r);
            if((n==null)&&(expectLocale!=null)) {
                errln("result was null! line #" + i);
                continue;
            }
            if(((n==null)&&(expectLocale==null)) || (n.toString().equals(expectLocale))) {
                logln(" locale: OK." );
            } else {
                errln("expected " + expectLocale + " but got " + n.toString());
            }
            if(expectBoolean.equals(new Boolean(r[0]))) {
                logln(" bool: OK.");
            } else {
                errln("bool: not OK, was " + new Boolean(r[0]).toString() + " expected " + expectBoolean.toString());
            }
        }
    }

    public void TestOrientation() {
        {
            String toTest [][] = {
                { "ar", "right-to-left", "top-to-bottom" },
                { "ar_Arab", "right-to-left", "top-to-bottom" },
                { "fa", "right-to-left", "top-to-bottom" },
                { "he", "right-to-left", "top-to-bottom" },
                { "ps", "right-to-left", "top-to-bottom" },
                { "ur", "right-to-left", "top-to-bottom" },
                { "en", "left-to-right", "top-to-bottom" }
            };

            for (int i = 0; i < toTest.length; ++i) {
                ULocale loc = new ULocale(toTest[i][0]);
                String co = loc.getCharacterOrientation();
                String lo = loc.getLineOrientation();
                if (!co.equals(toTest[i][1])) {
                    errln("Locale \"" + toTest[i][0] + "\" should have \"" + toTest[i][1] + "\" character orientation, but got \'" + co + "\"");
                }
                else if (!lo.equals(toTest[i][2])) {
                    errln("Locale \"" + toTest[i][0] + "\" should have \"" + toTest[i][2] + "\" line orientation, but got \'" + lo + "\"");
                }
            }
        }
    }

    public void TestJB3962(){
        ULocale loc = new ULocale("de_CH");
        String disp = loc.getDisplayName(ULocale.GERMAN);
        if(!disp.equals("Deutsch (Schweiz)")){
            errln("Did not get the expected display name for de_CH locale. Got: "+ prettify(disp));
        }
    }

    public void TestAddLikelySubtags() {
        String[][] data = {
            {"en", "en_Latn_US"},
            {"en_US_BOSTON", "en_Latn_US_BOSTON"},
            {"th@calendar=buddhist", "th_Thai_TH@calendar=buddhist"},
            {"ar_ZZ", "ar_Arab_EG"},
            {"zh", "zh_Hans_CN"},
            {"zh_TW", "zh_Hant_TW"},
            {"zh_HK", "zh_Hant_HK"},
            {"zh_Hant", "zh_Hant_TW"},
            {"zh_Zzzz_CN", "zh_Hans_CN"},
            {"und_US", "en_Latn_US"},
            {"und_HK", "zh_Hant_HK"},
            /* Not yet implemented
            {"art_lojban", "arg_lojban"},
            {"zh_cmn_Hans", "zh_cmn_Hans"},
            */
        };
        for (int i = 0; i < data.length; i++) {
            ULocale org = new ULocale(data[i][0]);
            ULocale res = ULocale.addLikelySubtags(org);
            if (!res.toString().equals(data[i][1])) {
                errln("Original: " + data[i][0] + " Expected: " + data[i][1] + " - but got " + res.toString());
            }
        }

        String[][] basic_maximize_data = {
            {
                "zu_Zzzz_Zz",
                "zu_Latn_ZA",
            }, {
                "zu_Zz",
                "zu_Latn_ZA"
            }, {
                "en_Zz",
                "en_Latn_US"
            }, {
                "en_Kore",
                "en_Kore_US"
            }, {
                "en_Kore_Zz",
                "en_Kore_US"
            }, {
                "en_Kore_ZA",
                "en_Kore_ZA"
            }, {
                "en_Kore_ZA_POSIX",
                "en_Kore_ZA_POSIX"
            }, {
                "en_Gujr",
                "en_Gujr_US"
            }, {
                "en_ZA",
                "en_Latn_ZA"
            }, {
                "en_Gujr_Zz",
                "en_Gujr_US"
            }, {
                "en_Gujr_ZA",
                "en_Gujr_ZA"
            }, {
                "en_Gujr_ZA_POSIX",
                "en_Gujr_ZA_POSIX"
            }, {
                "en_US_POSIX_1901",
                "en_Latn_US_POSIX_1901"
            }, {
                "en_Latn__POSIX_1901",
                "en_Latn_US_POSIX_1901"
            }, {
                "en__POSIX_1901",
                "en_Latn_US_POSIX_1901"
            }, {
                "de__POSIX_1901",
                "de_Latn_DE_POSIX_1901"
            }, {
                "zzz",
                ""
            }
        };

        for (int i = 0; i < basic_maximize_data.length; i++) {
            ULocale org = new ULocale(basic_maximize_data[i][0]);
            ULocale res = ULocale.addLikelySubtags(org);
            String exp = basic_maximize_data[i][1];
            if (exp.length() == 0) {
                if (!org.equals(res)) {
                    errln("Original: " + basic_maximize_data[i][0] + " expected: " + exp + " - but got " + res.toString());
                }
            }
            else if (!res.toString().equals(exp)) {
                errln("Original: " + basic_maximize_data[i][0] + " expected: " + exp + " - but got " + res.toString());
            }
        }

        String[][] basic_minimize_data = {
            {
                "en_Latn_US",
                "en"
            }, {
                "en_Latn_US_POSIX_1901",
                "en__POSIX_1901"
            }, {
                "en_Zzzz_US_POSIX_1901",
                "en__POSIX_1901"
            }, {
                "de_Latn_DE_POSIX_1901",
                "de__POSIX_1901"
            }, {
                "und",
                ""
            }
        };

        for (int i = 0; i < basic_minimize_data.length; i++) {
            ULocale org = new ULocale(basic_minimize_data[i][0]);
            ULocale res = ULocale.minimizeSubtags(org);
            String exp = basic_minimize_data[i][1];
            if (exp.length() == 0) {
                if (!org.equals(res)) {
                    errln("Original: " + basic_minimize_data[i][0] + " expected: " + exp + " - but got " + res.toString());
                }
            }
            else if (!res.toString().equals(exp)) {
                errln("Original: " + basic_minimize_data[i][0] + " expected: " + exp + " - but got " + res.toString());
            }
        }

        String[][] full_data = {
            {
                /*   "FROM", */
                /*   "ADD-LIKELY", */
                /*   "REMOVE-LIKELY" */
                /* }, { */
                "aa",
                "aa_Latn_ET",
                "aa"
            }, {
                "af",
                "af_Latn_ZA",
                "af"
            }, {
                "ak",
                "ak_Latn_GH",
                "ak"
            }, {
                "am",
                "am_Ethi_ET",
                "am"
            }, {
                "ar",
                "ar_Arab_EG",
                "ar"
            }, {
                "as",
                "as_Beng_IN",
                "as"
            }, {
                "az",
                "az_Latn_AZ",
                "az"
            }, {
                "be",
                "be_Cyrl_BY",
                "be"
            }, {
                "bg",
                "bg_Cyrl_BG",
                "bg"
            }, {
                "bn",
                "bn_Beng_BD",
                "bn"
            }, {
                "bo",
                "bo_Tibt_CN",
                "bo"
            }, {
                "bs",
                "bs_Latn_BA",
                "bs"
            }, {
                "ca",
                "ca_Latn_ES",
                "ca"
            }, {
                "ch",
                "ch_Latn_GU",
                "ch"
            }, {
                "chk",
                "chk_Latn_FM",
                "chk"
            }, {
                "cs",
                "cs_Latn_CZ",
                "cs"
            }, {
                "cy",
                "cy_Latn_GB",
                "cy"
            }, {
                "da",
                "da_Latn_DK",
                "da"
            }, {
                "de",
                "de_Latn_DE",
                "de"
            }, {
                "dv",
                "dv_Thaa_MV",
                "dv"
            }, {
                "dz",
                "dz_Tibt_BT",
                "dz"
            }, {
                "ee",
                "ee_Latn_GH",
                "ee"
            }, {
                "el",
                "el_Grek_GR",
                "el"
            }, {
                "en",
                "en_Latn_US",
                "en"
            }, {
                "es",
                "es_Latn_ES",
                "es"
            }, {
                "et",
                "et_Latn_EE",
                "et"
            }, {
                "eu",
                "eu_Latn_ES",
                "eu"
            }, {
                "fa",
                "fa_Arab_IR",
                "fa"
            }, {
                "fi",
                "fi_Latn_FI",
                "fi"
            }, {
                "fil",
                "fil_Latn_PH",
                "fil"
            }, {
                "fj",
                "fj_Latn_FJ",
                "fj"
            }, {
                "fo",
                "fo_Latn_FO",
                "fo"
            }, {
                "fr",
                "fr_Latn_FR",
                "fr"
            }, {
                "fur",
                "fur_Latn_IT",
                "fur"
            }, {
                "ga",
                "ga_Latn_IE",
                "ga"
            }, {
                "gaa",
                "gaa_Latn_GH",
                "gaa"
            }, {
                "gl",
                "gl_Latn_ES",
                "gl"
            }, {
                "gn",
                "gn_Latn_PY",
                "gn"
            }, {
                "gu",
                "gu_Gujr_IN",
                "gu"
            }, {
                "ha",
                "ha_Latn_NG",
                "ha"
            }, {
                "haw",
                "haw_Latn_US",
                "haw"
            }, {
                "he",
                "he_Hebr_IL",
                "he"
            }, {
                "hi",
                "hi_Deva_IN",
                "hi"
            }, {
                "hr",
                "hr_Latn_HR",
                "hr"
            }, {
                "ht",
                "ht_Latn_HT",
                "ht"
            }, {
                "hu",
                "hu_Latn_HU",
                "hu"
            }, {
                "hy",
                "hy_Armn_AM",
                "hy"
            }, {
                "id",
                "id_Latn_ID",
                "id"
            }, {
                "ig",
                "ig_Latn_NG",
                "ig"
            }, {
                "ii",
                "ii_Yiii_CN",
                "ii"
            }, {
                "is",
                "is_Latn_IS",
                "is"
            }, {
                "it",
                "it_Latn_IT",
                "it"
            }, {
                "ja",
                "ja_Jpan_JP",
                "ja"
            }, {
                "ka",
                "ka_Geor_GE",
                "ka"
            }, {
                "kaj",
                "kaj_Latn_NG",
                "kaj"
            }, {
                "kam",
                "kam_Latn_KE",
                "kam"
            }, {
                "kk",
                "kk_Cyrl_KZ",
                "kk"
            }, {
                "kl",
                "kl_Latn_GL",
                "kl"
            }, {
                "km",
                "km_Khmr_KH",
                "km"
            }, {
                "kn",
                "kn_Knda_IN",
                "kn"
            }, {
                "ko",
                "ko_Kore_KR",
                "ko"
            }, {
                "kok",
                "kok_Deva_IN",
                "kok"
            }, {
                "kpe",
                "kpe_Latn_LR",
                "kpe"
            }, {
                "ku",
                "ku_Latn_TR",
                "ku"
            }, {
                "ky",
                "ky_Cyrl_KG",
                "ky"
            }, {
                "la",
                "la_Latn_VA",
                "la"
            }, {
                "ln",
                "ln_Latn_CD",
                "ln"
            }, {
                "lo",
                "lo_Laoo_LA",
                "lo"
            }, {
                "lt",
                "lt_Latn_LT",
                "lt"
            }, {
                "lv",
                "lv_Latn_LV",
                "lv"
            }, {
                "mg",
                "mg_Latn_MG",
                "mg"
            }, {
                "mh",
                "mh_Latn_MH",
                "mh"
            }, {
                "mk",
                "mk_Cyrl_MK",
                "mk"
            }, {
                "ml",
                "ml_Mlym_IN",
                "ml"
            }, {
                "mn",
                "mn_Cyrl_MN",
                "mn"
            }, {
                "mr",
                "mr_Deva_IN",
                "mr"
            }, {
                "ms",
                "ms_Latn_MY",
                "ms"
            }, {
                "mt",
                "mt_Latn_MT",
                "mt"
            }, {
                "my",
                "my_Mymr_MM",
                "my"
            }, {
                "na",
                "na_Latn_NR",
                "na"
            }, {
                "ne",
                "ne_Deva_NP",
                "ne"
            }, {
                "niu",
                "niu_Latn_NU",
                "niu"
            }, {
                "nl",
                "nl_Latn_NL",
                "nl"
            }, {
                "nn",
                "nn_Latn_NO",
                "nn"
            }, {
                "nr",
                "nr_Latn_ZA",
                "nr"
            }, {
                "nso",
                "nso_Latn_ZA",
                "nso"
            }, {
                "om",
                "om_Latn_ET",
                "om"
            }, {
                "or",
                "or_Orya_IN",
                "or"
            }, {
                "pa",
                "pa_Guru_IN",
                "pa"
            }, {
                "pa_Arab",
                "pa_Arab_PK",
                "pa_PK"
            }, {
                "pa_PK",
                "pa_Arab_PK",
                "pa_PK"
            }, {
                "pap",
                "pap_Latn_AN",
                "pap"
            }, {
                "pau",
                "pau_Latn_PW",
                "pau"
            }, {
                "pl",
                "pl_Latn_PL",
                "pl"
            }, {
                "ps",
                "ps_Arab_AF",
                "ps"
            }, {
                "pt",
                "pt_Latn_BR",
                "pt"
            }, {
                "rn",
                "rn_Latn_BI",
                "rn"
            }, {
                "ro",
                "ro_Latn_RO",
                "ro"
            }, {
                "ru",
                "ru_Cyrl_RU",
                "ru"
            }, {
                "rw",
                "rw_Latn_RW",
                "rw"
            }, {
                "sa",
                "sa_Deva_IN",
                "sa"
            }, {
                "se",
                "se_Latn_NO",
                "se"
            }, {
                "sg",
                "sg_Latn_CF",
                "sg"
            }, {
                "si",
                "si_Sinh_LK",
                "si"
            }, {
                "sid",
                "sid_Latn_ET",
                "sid"
            }, {
                "sk",
                "sk_Latn_SK",
                "sk"
            }, {
                "sl",
                "sl_Latn_SI",
                "sl"
            }, {
                "sm",
                "sm_Latn_WS",
                "sm"
            }, {
                "so",
                "so_Latn_SO",
                "so"
            }, {
                "sq",
                "sq_Latn_AL",
                "sq"
            }, {
                "sr",
                "sr_Cyrl_RS",
                "sr"
            }, {
                "ss",
                "ss_Latn_ZA",
                "ss"
            }, {
                "st",
                "st_Latn_ZA",
                "st"
            }, {
                "sv",
                "sv_Latn_SE",
                "sv"
            }, {
                "sw",
                "sw_Latn_TZ",
                "sw"
            }, {
                "ta",
                "ta_Taml_IN",
                "ta"
            }, {
                "te",
                "te_Telu_IN",
                "te"
            }, {
                "tet",
                "tet_Latn_TL",
                "tet"
            }, {
                "tg",
                "tg_Cyrl_TJ",
                "tg"
            }, {
                "th",
                "th_Thai_TH",
                "th"
            }, {
                "ti",
                "ti_Ethi_ET",
                "ti"
            }, {
                "tig",
                "tig_Ethi_ER",
                "tig"
            }, {
                "tk",
                "tk_Latn_TM",
                "tk"
            }, {
                "tkl",
                "tkl_Latn_TK",
                "tkl"
            }, {
                "tn",
                "tn_Latn_ZA",
                "tn"
            }, {
                "to",
                "to_Latn_TO",
                "to"
            }, {
                "tpi",
                "tpi_Latn_PG",
                "tpi"
            }, {
                "tr",
                "tr_Latn_TR",
                "tr"
            }, {
                "ts",
                "ts_Latn_ZA",
                "ts"
            }, {
                "tt",
                "tt_Cyrl_RU",
                "tt"
            }, {
                "tvl",
                "tvl_Latn_TV",
                "tvl"
            }, {
                "ty",
                "ty_Latn_PF",
                "ty"
            }, {
                "uk",
                "uk_Cyrl_UA",
                "uk"
            }, {
                "und",
                "en_Latn_US",
                "en"
            }, {
                "und_AD",
                "ca_Latn_AD",
                "ca_AD"
            }, {
                "und_AE",
                "ar_Arab_AE",
                "ar_AE"
            }, {
                "und_AF",
                "fa_Arab_AF",
                "fa_AF"
            }, {
                "und_AL",
                "sq_Latn_AL",
                "sq"
            }, {
                "und_AM",
                "hy_Armn_AM",
                "hy"
            }, {
                "und_AN",
                "pap_Latn_AN",
                "pap"
            }, {
                "und_AO",
                "pt_Latn_AO",
                "pt_AO"
            }, {
                "und_AR",
                "es_Latn_AR",
                "es_AR"
            }, {
                "und_AS",
                "sm_Latn_AS",
                "sm_AS"
            }, {
                "und_AT",
                "de_Latn_AT",
                "de_AT"
            }, {
                "und_AW",
                "nl_Latn_AW",
                "nl_AW"
            }, {
                "und_AX",
                "sv_Latn_AX",
                "sv_AX"
            }, {
                "und_AZ",
                "az_Latn_AZ",
                "az"
            }, {
                "und_Arab",
                "ar_Arab_EG",
                "ar"
            }, {
                "und_Arab_IN",
                "ur_Arab_IN",
                "ur_IN"
            }, {
                "und_Arab_PK",
                "ur_Arab_PK",
                "ur"
            }, {
                "und_Arab_SN",
                "ar_Arab_SN",
                "ar_SN"
            }, {
                "und_Armn",
                "hy_Armn_AM",
                "hy"
            }, {
                "und_BA",
                "bs_Latn_BA",
                "bs"
            }, {
                "und_BD",
                "bn_Beng_BD",
                "bn"
            }, {
                "und_BE",
                "nl_Latn_BE",
                "nl_BE"
            }, {
                "und_BF",
                "fr_Latn_BF",
                "fr_BF"
            }, {
                "und_BG",
                "bg_Cyrl_BG",
                "bg"
            }, {
                "und_BH",
                "ar_Arab_BH",
                "ar_BH"
            }, {
                "und_BI",
                "rn_Latn_BI",
                "rn"
            }, {
                "und_BJ",
                "fr_Latn_BJ",
                "fr_BJ"
            }, {
                "und_BN",
                "ms_Latn_BN",
                "ms_BN"
            }, {
                "und_BO",
                "es_Latn_BO",
                "es_BO"
            }, {
                "und_BR",
                "pt_Latn_BR",
                "pt"
            }, {
                "und_BT",
                "dz_Tibt_BT",
                "dz"
            }, {
                "und_BY",
                "be_Cyrl_BY",
                "be"
            }, {
                "und_Beng",
                "bn_Beng_BD",
                "bn"
            }, {
                "und_Beng_IN",
                "bn_Beng_IN",
                "bn_IN"
            }, {
                "und_CD",
                "sw_Latn_CD",
                "sw_CD"
            }, {
                "und_CF",
                "fr_Latn_CF",
                "fr_CF"
            }, {
                "und_CG",
                "fr_Latn_CG",
                "fr_CG"
            }, {
                "und_CH",
                "de_Latn_CH",
                "de_CH"
            }, {
                "und_CI",
                "fr_Latn_CI",
                "fr_CI"
            }, {
                "und_CL",
                "es_Latn_CL",
                "es_CL"
            }, {
                "und_CM",
                "fr_Latn_CM",
                "fr_CM"
            }, {
                "und_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_CO",
                "es_Latn_CO",
                "es_CO"
            }, {
                "und_CR",
                "es_Latn_CR",
                "es_CR"
            }, {
                "und_CU",
                "es_Latn_CU",
                "es_CU"
            }, {
                "und_CV",
                "pt_Latn_CV",
                "pt_CV"
            }, {
                "und_CY",
                "el_Grek_CY",
                "el_CY"
            }, {
                "und_CZ",
                "cs_Latn_CZ",
                "cs"
            }, {
                "und_Cyrl",
                "ru_Cyrl_RU",
                "ru"
            }, {
                "und_Cyrl_KZ",
                "ru_Cyrl_KZ",
                "ru_KZ"
            }, {
                "und_DE",
                "de_Latn_DE",
                "de"
            }, {
                "und_DJ",
                "aa_Latn_DJ",
                "aa_DJ"
            }, {
                "und_DK",
                "da_Latn_DK",
                "da"
            }, {
                "und_DO",
                "es_Latn_DO",
                "es_DO"
            }, {
                "und_DZ",
                "ar_Arab_DZ",
                "ar_DZ"
            }, {
                "und_Deva",
                "hi_Deva_IN",
                "hi"
            }, {
                "und_EC",
                "es_Latn_EC",
                "es_EC"
            }, {
                "und_EE",
                "et_Latn_EE",
                "et"
            }, {
                "und_EG",
                "ar_Arab_EG",
                "ar"
            }, {
                "und_EH",
                "ar_Arab_EH",
                "ar_EH"
            }, {
                "und_ER",
                "ti_Ethi_ER",
                "ti_ER"
            }, {
                "und_ES",
                "es_Latn_ES",
                "es"
            }, {
                "und_ET",
                "en_Latn_ET",
                "en_ET"
            }, {
                "und_Ethi",
                "am_Ethi_ET",
                "am"
            }, {
                "und_Ethi_ER",
                "am_Ethi_ER",
                "am_ER"
            }, {
                "und_FI",
                "fi_Latn_FI",
                "fi"
            }, {
                "und_FM",
                "chk_Latn_FM",
                "chk"
            }, {
                "und_FO",
                "fo_Latn_FO",
                "fo"
            }, {
                "und_FR",
                "fr_Latn_FR",
                "fr"
            }, {
                "und_GA",
                "fr_Latn_GA",
                "fr_GA"
            }, {
                "und_GE",
                "ka_Geor_GE",
                "ka"
            }, {
                "und_GF",
                "fr_Latn_GF",
                "fr_GF"
            }, {
                "und_GL",
                "kl_Latn_GL",
                "kl"
            }, {
                "und_GN",
                "fr_Latn_GN",
                "fr_GN"
            }, {
                "und_GP",
                "fr_Latn_GP",
                "fr_GP"
            }, {
                "und_GQ",
                "es_Latn_GQ",
                "es_GQ"
            }, {
                "und_GR",
                "el_Grek_GR",
                "el"
            }, {
                "und_GT",
                "es_Latn_GT",
                "es_GT"
            }, {
                "und_GU",
                "en_Latn_GU",
                "en_GU"
            }, {
                "und_GW",
                "pt_Latn_GW",
                "pt_GW"
            }, {
                "und_Geor",
                "ka_Geor_GE",
                "ka"
            }, {
                "und_Grek",
                "el_Grek_GR",
                "el"
            }, {
                "und_Gujr",
                "gu_Gujr_IN",
                "gu"
            }, {
                "und_Guru",
                "pa_Guru_IN",
                "pa"
            }, {
                "und_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "und_HN",
                "es_Latn_HN",
                "es_HN"
            }, {
                "und_HR",
                "hr_Latn_HR",
                "hr"
            }, {
                "und_HT",
                "ht_Latn_HT",
                "ht"
            }, {
                "und_HU",
                "hu_Latn_HU",
                "hu"
            }, {
                "und_Hani",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Hans",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Hant",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Hebr",
                "he_Hebr_IL",
                "he"
            }, {
                "und_ID",
                "id_Latn_ID",
                "id"
            }, {
                "und_IL",
                "he_Hebr_IL",
                "he"
            }, {
                "und_IN",
                "hi_Deva_IN",
                "hi"
            }, {
                "und_IQ",
                "ar_Arab_IQ",
                "ar_IQ"
            }, {
                "und_IR",
                "fa_Arab_IR",
                "fa"
            }, {
                "und_IS",
                "is_Latn_IS",
                "is"
            }, {
                "und_IT",
                "it_Latn_IT",
                "it"
            }, {
                "und_JO",
                "ar_Arab_JO",
                "ar_JO"
            }, {
                "und_JP",
                "ja_Jpan_JP",
                "ja"
            }, {
                "und_Jpan",
                "ja_Jpan_JP",
                "ja"
            }, {
                "und_KG",
                "ky_Cyrl_KG",
                "ky"
            }, {
                "und_KH",
                "km_Khmr_KH",
                "km"
            }, {
                "und_KM",
                "ar_Arab_KM",
                "ar_KM"
            }, {
                "und_KP",
                "ko_Kore_KP",
                "ko_KP"
            }, {
                "und_KR",
                "ko_Kore_KR",
                "ko"
            }, {
                "und_KW",
                "ar_Arab_KW",
                "ar_KW"
            }, {
                "und_KZ",
                "ru_Cyrl_KZ",
                "ru_KZ"
            }, {
                "und_Khmr",
                "km_Khmr_KH",
                "km"
            }, {
                "und_Knda",
                "kn_Knda_IN",
                "kn"
            }, {
                "und_Kore",
                "ko_Kore_KR",
                "ko"
            }, {
                "und_LA",
                "lo_Laoo_LA",
                "lo"
            }, {
                "und_LB",
                "ar_Arab_LB",
                "ar_LB"
            }, {
                "und_LI",
                "de_Latn_LI",
                "de_LI"
            }, {
                "und_LK",
                "si_Sinh_LK",
                "si"
            }, {
                "und_LS",
                "st_Latn_LS",
                "st_LS"
            }, {
                "und_LT",
                "lt_Latn_LT",
                "lt"
            }, {
                "und_LU",
                "fr_Latn_LU",
                "fr_LU"
            }, {
                "und_LV",
                "lv_Latn_LV",
                "lv"
            }, {
                "und_LY",
                "ar_Arab_LY",
                "ar_LY"
            }, {
                "und_Laoo",
                "lo_Laoo_LA",
                "lo"
            }, {
                "und_Latn_ES",
                "es_Latn_ES",
                "es"
            }, {
                "und_Latn_ET",
                "en_Latn_ET",
                "en_ET"
            }, {
                "und_Latn_GB",
                "en_Latn_GB",
                "en_GB"
            }, {
                "und_Latn_GH",
                "ak_Latn_GH",
                "ak"
            }, {
                "und_Latn_ID",
                "id_Latn_ID",
                "id"
            }, {
                "und_Latn_IT",
                "it_Latn_IT",
                "it"
            }, {
                "und_Latn_NG",
                "en_Latn_NG",
                "en_NG"
            }, {
                "und_Latn_TR",
                "tr_Latn_TR",
                "tr"
            }, {
                "und_Latn_ZA",
                "en_Latn_ZA",
                "en_ZA"
            }, {
                "und_MA",
                "ar_Arab_MA",
                "ar_MA"
            }, {
                "und_MC",
                "fr_Latn_MC",
                "fr_MC"
            }, {
                "und_MD",
                "ro_Latn_MD",
                "ro_MD"
            }, {
                "und_ME",
                "sr_Latn_ME",
                "sr_ME"
            }, {
                "und_MG",
                "mg_Latn_MG",
                "mg"
            }, {
                "und_MK",
                "mk_Cyrl_MK",
                "mk"
            }, {
                "und_ML",
                "bm_Latn_ML",
                "bm"
            }, {
                "und_MM",
                "my_Mymr_MM",
                "my"
            }, {
                "und_MN",
                "mn_Cyrl_MN",
                "mn"
            }, {
                "und_MO",
                "zh_Hant_MO",
                "zh_MO"
            }, {
                "und_MQ",
                "fr_Latn_MQ",
                "fr_MQ"
            }, {
                "und_MR",
                "ar_Arab_MR",
                "ar_MR"
            }, {
                "und_MT",
                "mt_Latn_MT",
                "mt"
            }, {
                "und_MV",
                "dv_Thaa_MV",
                "dv"
            }, {
                "und_MX",
                "es_Latn_MX",
                "es_MX"
            }, {
                "und_MY",
                "ms_Latn_MY",
                "ms"
            }, {
                "und_MZ",
                "pt_Latn_MZ",
                "pt_MZ"
            }, {
                "und_Mlym",
                "ml_Mlym_IN",
                "ml"
            }, {
                "und_Mymr",
                "my_Mymr_MM",
                "my"
            }, {
                "und_NC",
                "fr_Latn_NC",
                "fr_NC"
            }, {
                "und_NE",
                "ha_Latn_NE",
                "ha_NE"
            }, {
                "und_NG",
                "en_Latn_NG",
                "en_NG"
            }, {
                "und_NI",
                "es_Latn_NI",
                "es_NI"
            }, {
                "und_NL",
                "nl_Latn_NL",
                "nl"
            }, {
                "und_NO",
                "nb_Latn_NO",
                "nb"
            }, {
                "und_NP",
                "ne_Deva_NP",
                "ne"
            }, {
                "und_NR",
                "en_Latn_NR",
                "en_NR"
            }, {
                "und_OM",
                "ar_Arab_OM",
                "ar_OM"
            }, {
                "und_Orya",
                "or_Orya_IN",
                "or"
            }, {
                "und_PA",
                "es_Latn_PA",
                "es_PA"
            }, {
                "und_PE",
                "es_Latn_PE",
                "es_PE"
            }, {
                "und_PF",
                "fr_Latn_PF",
                "fr_PF"
            }, {
                "und_PG",
                "tpi_Latn_PG",
                "tpi"
            }, {
                "und_PH",
                "fil_Latn_PH",
                "fil"
            }, {
                "und_PL",
                "pl_Latn_PL",
                "pl"
            }, {
                "und_PM",
                "fr_Latn_PM",
                "fr_PM"
            }, {
                "und_PR",
                "es_Latn_PR",
                "es_PR"
            }, {
                "und_PS",
                "ar_Arab_PS",
                "ar_PS"
            }, {
                "und_PT",
                "pt_Latn_PT",
                "pt_PT"
            }, {
                "und_PW",
                "pau_Latn_PW",
                "pau"
            }, {
                "und_PY",
                "gn_Latn_PY",
                "gn"
            }, {
                "und_QA",
                "ar_Arab_QA",
                "ar_QA"
            }, {
                "und_RE",
                "fr_Latn_RE",
                "fr_RE"
            }, {
                "und_RO",
                "ro_Latn_RO",
                "ro"
            }, {
                "und_RS",
                "sr_Cyrl_RS",
                "sr"
            }, {
                "und_RU",
                "ru_Cyrl_RU",
                "ru"
            }, {
                "und_RW",
                "rw_Latn_RW",
                "rw"
            }, {
                "und_SA",
                "ar_Arab_SA",
                "ar_SA"
            }, {
                "und_SD",
                "ar_Arab_SD",
                "ar_SD"
            }, {
                "und_SE",
                "sv_Latn_SE",
                "sv"
            }, {
                "und_SG",
                "en_Latn_SG",
                "en_SG"
            }, {
                "und_SI",
                "sl_Latn_SI",
                "sl"
            }, {
                "und_SJ",
                "nb_Latn_SJ",
                "nb_SJ"
            }, {
                "und_SK",
                "sk_Latn_SK",
                "sk"
            }, {
                "und_SM",
                "it_Latn_SM",
                "it_SM"
            }, {
                "und_SN",
                "fr_Latn_SN",
                "fr_SN"
            }, {
                "und_SO",
                "so_Latn_SO",
                "so"
            }, {
                "und_SR",
                "nl_Latn_SR",
                "nl_SR"
            }, {
                "und_ST",
                "pt_Latn_ST",
                "pt_ST"
            }, {
                "und_SV",
                "es_Latn_SV",
                "es_SV"
            }, {
                "und_SY",
                "ar_Arab_SY",
                "ar_SY"
            }, {
                "und_Sinh",
                "si_Sinh_LK",
                "si"
            }, {
                "und_Syrc",
                "en_Syrc_US",
                "en_Syrc"
            }, {
                "und_TD",
                "fr_Latn_TD",
                "fr_TD"
            }, {
                "und_TG",
                "fr_Latn_TG",
                "fr_TG"
            }, {
                "und_TH",
                "th_Thai_TH",
                "th"
            }, {
                "und_TJ",
                "tg_Cyrl_TJ",
                "tg"
            }, {
                "und_TK",
                "tkl_Latn_TK",
                "tkl"
            }, {
                "und_TL",
                "pt_Latn_TL",
                "pt_TL"
            }, {
                "und_TM",
                "tk_Latn_TM",
                "tk"
            }, {
                "und_TN",
                "ar_Arab_TN",
                "ar_TN"
            }, {
                "und_TO",
                "to_Latn_TO",
                "to"
            }, {
                "und_TR",
                "tr_Latn_TR",
                "tr"
            }, {
                "und_TV",
                "tvl_Latn_TV",
                "tvl"
            }, {
                "und_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Taml",
                "ta_Taml_IN",
                "ta"
            }, {
                "und_Telu",
                "te_Telu_IN",
                "te"
            }, {
                "und_Thaa",
                "dv_Thaa_MV",
                "dv"
            }, {
                "und_Thai",
                "th_Thai_TH",
                "th"
            }, {
                "und_Tibt",
                "bo_Tibt_CN",
                "bo"
            }, {
                "und_UA",
                "uk_Cyrl_UA",
                "uk"
            }, {
                "und_UY",
                "es_Latn_UY",
                "es_UY"
            }, {
                "und_UZ",
                "uz_Cyrl_UZ",
                "uz"
            }, {
                "und_VA",
                "la_Latn_VA",
                "la"
            }, {
                "und_VE",
                "es_Latn_VE",
                "es_VE"
            }, {
                "und_VN",
                "vi_Latn_VN",
                "vi"
            }, {
                "und_VU",
                "bi_Latn_VU",
                "bi"
            }, {
                "und_WF",
                "fr_Latn_WF",
                "fr_WF"
            }, {
                "und_WS",
                "sm_Latn_WS",
                "sm"
            }, {
                "und_YE",
                "ar_Arab_YE",
                "ar_YE"
            }, {
                "und_YT",
                "fr_Latn_YT",
                "fr_YT"
            }, {
                "und_Yiii",
                "ii_Yiii_CN",
                "ii"
            }, {
                "ur",
                "ur_Arab_PK",
                "ur"
            }, {
                "uz",
                "uz_Cyrl_UZ",
                "uz"
            }, {
                "uz_AF",
                "uz_Arab_AF",
                "uz_AF"
            }, {
                "uz_Arab",
                "uz_Arab_AF",
                "uz_AF"
            }, {
                "ve",
                "ve_Latn_ZA",
                "ve"
            }, {
                "vi",
                "vi_Latn_VN",
                "vi"
            }, {
                "wal",
                "wal_Ethi_ET",
                "wal"
            }, {
                "wo",
                "wo_Latn_SN",
                "wo"
            }, {
                "wo_SN",
                "wo_Latn_SN",
                "wo"
            }, {
                "xh",
                "xh_Latn_ZA",
                "xh"
            }, {
                "yo",
                "yo_Latn_NG",
                "yo"
            }, {
                "zh",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "zh_Hani",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Hant",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zh_MO",
                "zh_Hant_MO",
                "zh_MO"
            }, {
                "zh_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zu",
                "zu_Latn_ZA",
                "zu"
            }, {
                "und",
                "en_Latn_US",
                "en"
            }, {
                "und_ZZ",
                "en_Latn_US",
                "en"
            }, {
                "und_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "und_AQ",
                "en_Latn_AQ",
                "en_AQ"
            }, {
                "und_Zzzz",
                "en_Latn_US",
                "en"
            }, {
                "und_Zzzz_ZZ",
                "en_Latn_US",
                "en"
            }, {
                "und_Zzzz_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Zzzz_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Zzzz_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "und_Zzzz_AQ",
                "en_Latn_AQ",
                "en_AQ"
            }, {
                "und_Latn",
                "en_Latn_US",
                "en"
            }, {
                "und_Latn_ZZ",
                "en_Latn_US",
                "en"
            }, {
                "und_Latn_CN",
                "za_Latn_CN",
                "za"
            }, {
                "und_Latn_TW",
                "zh_Latn_TW",
                "zh_Latn_TW"
            }, {
                "und_Latn_HK",
                "zh_Latn_HK",
                "zh_Latn_HK"
            }, {
                "und_Latn_AQ",
                "en_Latn_AQ",
                "en_AQ"
            }, {
                "und_Hans",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Hans_ZZ",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Hans_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "und_Hans_TW",
                "zh_Hans_TW",
                "zh_Hans_TW"
            }, {
                "und_Hans_HK",
                "zh_Hans_HK",
                "zh_Hans_HK"
            }, {
                "und_Hans_AQ",
                "zh_Hans_AQ",
                "zh_AQ"
            }, {
                "und_Hant",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Hant_ZZ",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Hant_CN",
                "zh_Hant_CN",
                "zh_Hant_CN"
            }, {
                "und_Hant_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "und_Hant_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "und_Hant_AQ",
                "zh_Hant_AQ",
                "zh_Hant_AQ"
            }, {
                "und_Moon",
                "en_Moon_US",
                "en_Moon"
            }, {
                "und_Moon_ZZ",
                "en_Moon_US",
                "en_Moon"
            }, {
                "und_Moon_CN",
                "zh_Moon_CN",
                "zh_Moon"
            }, {
                "und_Moon_TW",
                "zh_Moon_TW",
                "zh_Moon_TW"
            }, {
                "und_Moon_HK",
                "zh_Moon_HK",
                "zh_Moon_HK"
            }, {
                "und_Moon_AQ",
                "en_Moon_AQ",
                "en_Moon_AQ"
            }, {
                "es",
                "es_Latn_ES",
                "es"
            }, {
                "es_ZZ",
                "es_Latn_ES",
                "es"
            }, {
                "es_CN",
                "es_Latn_CN",
                "es_CN"
            }, {
                "es_TW",
                "es_Latn_TW",
                "es_TW"
            }, {
                "es_HK",
                "es_Latn_HK",
                "es_HK"
            }, {
                "es_AQ",
                "es_Latn_AQ",
                "es_AQ"
            }, {
                "es_Zzzz",
                "es_Latn_ES",
                "es"
            }, {
                "es_Zzzz_ZZ",
                "es_Latn_ES",
                "es"
            }, {
                "es_Zzzz_CN",
                "es_Latn_CN",
                "es_CN"
            }, {
                "es_Zzzz_TW",
                "es_Latn_TW",
                "es_TW"
            }, {
                "es_Zzzz_HK",
                "es_Latn_HK",
                "es_HK"
            }, {
                "es_Zzzz_AQ",
                "es_Latn_AQ",
                "es_AQ"
            }, {
                "es_Latn",
                "es_Latn_ES",
                "es"
            }, {
                "es_Latn_ZZ",
                "es_Latn_ES",
                "es"
            }, {
                "es_Latn_CN",
                "es_Latn_CN",
                "es_CN"
            }, {
                "es_Latn_TW",
                "es_Latn_TW",
                "es_TW"
            }, {
                "es_Latn_HK",
                "es_Latn_HK",
                "es_HK"
            }, {
                "es_Latn_AQ",
                "es_Latn_AQ",
                "es_AQ"
            }, {
                "es_Hans",
                "es_Hans_ES",
                "es_Hans"
            }, {
                "es_Hans_ZZ",
                "es_Hans_ES",
                "es_Hans"
            }, {
                "es_Hans_CN",
                "es_Hans_CN",
                "es_Hans_CN"
            }, {
                "es_Hans_TW",
                "es_Hans_TW",
                "es_Hans_TW"
            }, {
                "es_Hans_HK",
                "es_Hans_HK",
                "es_Hans_HK"
            }, {
                "es_Hans_AQ",
                "es_Hans_AQ",
                "es_Hans_AQ"
            }, {
                "es_Hant",
                "es_Hant_ES",
                "es_Hant"
            }, {
                "es_Hant_ZZ",
                "es_Hant_ES",
                "es_Hant"
            }, {
                "es_Hant_CN",
                "es_Hant_CN",
                "es_Hant_CN"
            }, {
                "es_Hant_TW",
                "es_Hant_TW",
                "es_Hant_TW"
            }, {
                "es_Hant_HK",
                "es_Hant_HK",
                "es_Hant_HK"
            }, {
                "es_Hant_AQ",
                "es_Hant_AQ",
                "es_Hant_AQ"
            }, {
                "es_Moon",
                "es_Moon_ES",
                "es_Moon"
            }, {
                "es_Moon_ZZ",
                "es_Moon_ES",
                "es_Moon"
            }, {
                "es_Moon_CN",
                "es_Moon_CN",
                "es_Moon_CN"
            }, {
                "es_Moon_TW",
                "es_Moon_TW",
                "es_Moon_TW"
            }, {
                "es_Moon_HK",
                "es_Moon_HK",
                "es_Moon_HK"
            }, {
                "es_Moon_AQ",
                "es_Moon_AQ",
                "es_Moon_AQ"
            }, {
                "zh",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_ZZ",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zh_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "zh_AQ",
                "zh_Hans_AQ",
                "zh_AQ"
            }, {
                "zh_Zzzz",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Zzzz_ZZ",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Zzzz_CN",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Zzzz_TW",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zh_Zzzz_HK",
                "zh_Hant_HK",
                "zh_HK"
            }, {
                "zh_Zzzz_AQ",
                "zh_Hans_AQ",
                "zh_AQ"
            }, {
                "zh_Latn",
                "zh_Latn_CN",
                "zh_Latn"
            }, {
                "zh_Latn_ZZ",
                "zh_Latn_CN",
                "zh_Latn"
            }, {
                "zh_Latn_CN",
                "zh_Latn_CN",
                "zh_Latn"
            }, {
                "zh_Latn_TW",
                "zh_Latn_TW",
                "zh_Latn_TW"
            }, {
                "zh_Latn_HK",
                "zh_Latn_HK",
                "zh_Latn_HK"
            }, {
                "zh_Latn_AQ",
                "zh_Latn_AQ",
                "zh_Latn_AQ"
            }, {
                "zh_Hans",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Hans_ZZ",
                "zh_Hans_CN",
                "zh"
            }, {
                "zh_Hans_TW",
                "zh_Hans_TW",
                "zh_Hans_TW"
            }, {
                "zh_Hans_HK",
                "zh_Hans_HK",
                "zh_Hans_HK"
            }, {
                "zh_Hans_AQ",
                "zh_Hans_AQ",
                "zh_AQ"
            }, {
                "zh_Hant",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zh_Hant_ZZ",
                "zh_Hant_TW",
                "zh_TW"
            }, {
                "zh_Hant_CN",
                "zh_Hant_CN",
                "zh_Hant_CN"
            }, {
                "zh_Hant_AQ",
                "zh_Hant_AQ",
                "zh_Hant_AQ"
            }, {
                "zh_Moon",
                "zh_Moon_CN",
                "zh_Moon"
            }, {
                "zh_Moon_ZZ",
                "zh_Moon_CN",
                "zh_Moon"
            }, {
                "zh_Moon_CN",
                "zh_Moon_CN",
                "zh_Moon"
            }, {
                "zh_Moon_TW",
                "zh_Moon_TW",
                "zh_Moon_TW"
            }, {
                "zh_Moon_HK",
                "zh_Moon_HK",
                "zh_Moon_HK"
            }, {
                "zh_Moon_AQ",
                "zh_Moon_AQ",
                "zh_Moon_AQ"
            }, {
                "art",
                "",
                ""
            }, {
                "art_ZZ",
                "",
                ""
            }, {
                "art_CN",
                "",
                ""
            }, {
                "art_TW",
                "",
                ""
            }, {
                "art_HK",
                "",
                ""
            }, {
                "art_AQ",
                "",
                ""
            }, {
                "art_Zzzz",
                "",
                ""
            }, {
                "art_Zzzz_ZZ",
                "",
                ""
            }, {
                "art_Zzzz_CN",
                "",
                ""
            }, {
                "art_Zzzz_TW",
                "",
                ""
            }, {
                "art_Zzzz_HK",
                "",
                ""
            }, {
                "art_Zzzz_AQ",
                "",
                ""
            }, {
                "art_Latn",
                "",
                ""
            }, {
                "art_Latn_ZZ",
                "",
                ""
            }, {
                "art_Latn_CN",
                "",
                ""
            }, {
                "art_Latn_TW",
                "",
                ""
            }, {
                "art_Latn_HK",
                "",
                ""
            }, {
                "art_Latn_AQ",
                "",
                ""
            }, {
                "art_Hans",
                "",
                ""
            }, {
                "art_Hans_ZZ",
                "",
                ""
            }, {
                "art_Hans_CN",
                "",
                ""
            }, {
                "art_Hans_TW",
                "",
                ""
            }, {
                "art_Hans_HK",
                "",
                ""
            }, {
                "art_Hans_AQ",
                "",
                ""
            }, {
                "art_Hant",
                "",
                ""
            }, {
                "art_Hant_ZZ",
                "",
                ""
            }, {
                "art_Hant_CN",
                "",
                ""
            }, {
                "art_Hant_TW",
                "",
                ""
            }, {
                "art_Hant_HK",
                "",
                ""
            }, {
                "art_Hant_AQ",
                "",
                ""
            }, {
                "art_Moon",
                "",
                ""
            }, {
                "art_Moon_ZZ",
                "",
                ""
            }, {
                "art_Moon_CN",
                "",
                ""
            }, {
                "art_Moon_TW",
                "",
                ""
            }, {
                "art_Moon_HK",
                "",
                ""
            }, {
                "art_Moon_AQ",
                "",
                ""
            }
        };

        for (int i = 0; i < full_data.length; i++) {
            ULocale org = new ULocale(full_data[i][0]);
            ULocale res = ULocale.addLikelySubtags(org);
            String exp = full_data[i][1];
            if (exp.length() == 0) {
                if (!org.equals(res)) {
                    errln("Original: " + full_data[i][0] + " expected: " + exp + " - but got " + res.toString());
                }
            }
            else if (!res.toString().equals(exp)) {
                errln("Original: " + full_data[i][0] + " expected: " + exp + " - but got " + res.toString());
            }
        }

        for (int i = 0; i < full_data.length; i++) {
            String maximal = full_data[i][1];

            if (maximal.length() > 0) {
                ULocale org = new ULocale(maximal);
                ULocale res = ULocale.minimizeSubtags(org);
                String exp = full_data[i][2];
                if (exp.length() == 0) {
                    if (!org.equals(res)) {
                        errln("Original: " + full_data[i][1] + " expected: " + exp + " - but got " + res.toString());
                    }
                }
                else if (!res.toString().equals(exp)) {
                    errln("Original: " + full_data[i][1] + " expected: " + exp + " - but got " + res.toString());
                }
            }
        }
    }
    public void TestCLDRVersion() {
        //VersionInfo zeroVersion = VersionInfo.getInstance(0, 0, 0, 0);
        VersionInfo testExpect;
        VersionInfo testCurrent;
        VersionInfo cldrVersion;
 
        cldrVersion = LocaleData.getCLDRVersion();
        
        this.logln("uloc_getCLDRVersion() returned: '"+cldrVersion+"'");
        
        // why isn't this public for tests somewhere?
        final ClassLoader testLoader = ICUResourceBundleTest.class.getClassLoader();
        UResourceBundle bundle = (UResourceBundle) UResourceBundle.getBundleInstance("com/ibm/icu/dev/data/testdata", ULocale.ROOT, testLoader);
        
        testExpect = VersionInfo.getInstance(bundle.getString("ExpectCLDRVersionAtLeast"));
        testCurrent = VersionInfo.getInstance(bundle.getString("CurrentCLDRVersion"));

        
        logln("(data) ExpectCLDRVersionAtLeast { "+testExpect+""); 
        if(cldrVersion.compareTo(testExpect)<0) {
            errln("CLDR version is too old, expect at least "+testExpect+".");
        }

        int r = cldrVersion.compareTo(testCurrent);
        if ( r < 0 ) {
            logln("CLDR version is behind 'current' (for testdata/root.txt) "+testCurrent+". Some things may fail.\n");
        } else if ( r > 0) {
            logln("CLDR version is ahead of 'current' (for testdata/root.txt) "+testCurrent+". Some things may fail.\n");
        } else {
            // CLDR version is OK.
        }
    }

    public void TestToLanguageTag() {
        final String[][] locale_to_langtag = {
            {"",            "und"},
            {"en",          "en"},
            {"en_US",       "en-US"},
            {"iw_IL",       "he-IL"},
            {"sr_Latn_SR",  "sr-Latn-SR"},
            {"en_US_POSIX@ca=japanese", "en-US-u-ca-japanese-va-posix"},
            {"en__POSIX",   "en-u-va-posix"},
            {"en_US_POSIX_VAR", "en-US-posix-x-lvariant-var"},  // variant POSIX_VAR is processed as regular variant
            {"en_US_VAR_POSIX", "en-US-x-lvariant-var-posix"},  // variant VAR_POSIX is processed as regular variant
            {"en_US_POSIX@va=posix2",   "en-US-u-va-posix2"},   // if keyword va=xxx already exists, variant POSIX is simply dropped
            {"und_555",     "und-555"},
            {"123",         "und"},
            {"%$#&",        "und"},
            {"_Latn",       "und-Latn"},
            {"_DE",         "und-DE"},
            {"und_FR",      "und-FR"},
            {"th_TH_TH",    "th-TH-x-lvariant-th"},
            {"bogus",       "bogus"},
            {"foooobarrr",  "und"},
            {"aa_BB_CYRL",  "aa-BB-x-lvariant-cyrl"},
            {"en_US_1234",  "en-US-1234"},
            {"en_US_VARIANTA_VARIANTB", "en-US-varianta-variantb"},
            {"en_US_VARIANTB_VARIANTA", "en-US-variantb-varianta"},
            {"ja__9876_5432",   "ja-9876-5432"},
            {"zh_Hant__VAR",    "zh-Hant-x-lvariant-var"},
            {"es__BADVARIANT_GOODVAR",  "es"},
            {"es__GOODVAR_BAD_BADVARIANT",  "es-goodvar-x-lvariant-bad"},
            {"en@calendar=gregorian",   "en-u-ca-gregory"},
            {"de@collation=phonebook;calendar=gregorian",   "de-u-ca-gregory-co-phonebk"},
            {"th@numbers=thai;z=extz;x=priv-use;a=exta",   "th-a-exta-u-nu-thai-z-extz-x-priv-use"},
            {"en@timezone=America/New_York;calendar=japanese",    "en-u-ca-japanese-tz-usnyc"},
            {"en@timezone=US/Eastern",    "en-u-tz-usnyc"},
            {"en@x=x-y-z;a=a-b-c",  "en-x-x-y-z"},
            {"it@collation=badcollationtype;colStrength=identical;cu=usd-eur", "it-u-ks-identic"},
            {"en_US_POSIX", "en-US-u-va-posix"},
            {"en_US_POSIX@calendar=japanese;currency=EUR","en-US-u-ca-japanese-cu-eur-va-posix"},
            {"@x=elmer",    "x-elmer"},
            {"_US@x=elmer", "und-US-x-elmer"},
        };

        for (int i = 0; i < locale_to_langtag.length; i++) {
            ULocale loc = new ULocale(locale_to_langtag[i][0]);
            String langtag = loc.toLanguageTag();
            if (!langtag.equals(locale_to_langtag[i][1])) {
                errln("FAIL: toLanguageTag returned language tag [" + langtag + "] for locale ["
                        + loc + "] - expected: [" + locale_to_langtag[i][1] + "]");
            }
        }
    }

    public void TestForLanguageTag() {
        final Integer NOERROR = Integer.valueOf(-1);

        final Object[][] langtag_to_locale = {
            {"en",                  "en",                   NOERROR},
            {"en-us",               "en_US",                NOERROR},
            {"und-us",              "_US",                  NOERROR},
            {"und-latn",            "_Latn",                NOERROR},
            {"en-us-posix",         "en_US_POSIX",          NOERROR},
            {"de-de_euro",          "de",                   Integer.valueOf(3)},
            {"kok-in",              "kok_IN",               NOERROR},
            {"123",                 "",                     Integer.valueOf(0)},
            {"en_us",               "",                     Integer.valueOf(0)},
            {"en-latn-x",           "en_Latn",              Integer.valueOf(8)},
            {"art-lojban",          "jbo",                  NOERROR},
            {"zh-hakka",            "hak",                  NOERROR},
            {"zh-cmn-CH",           "cmn_CH",               NOERROR},
            {"xxx-yy",              "xxx_YY",               NOERROR},
            {"fr-234",              "fr_234",               NOERROR},
            {"i-default",           "en@x=i-default",       NOERROR},
            {"i-test",              "",                     Integer.valueOf(0)},
            {"ja-jp-jp",            "ja_JP",                Integer.valueOf(6)},
            {"bogus",               "bogus",                NOERROR},
            {"boguslang",           "",                     Integer.valueOf(0)},
            {"EN-lATN-us",          "en_Latn_US",           NOERROR},
            {"und-variant-1234",    "__VARIANT_1234",       NOERROR},
            {"und-varzero-var1-vartwo", "__VARZERO",        Integer.valueOf(12)},
            {"en-u-ca-gregory",     "en@calendar=gregorian",    NOERROR},
            {"en-U-cu-USD",         "en@currency=usd",      NOERROR},
            {"en-us-u-va-posix",    "en_US_POSIX",          NOERROR},
            {"en-us-u-ca-gregory-va-posix", "en_US_POSIX@calendar=gregorian",   NOERROR},
            {"en-us-posix-u-va-posix",  "en_US_POSIX@va=posix", NOERROR},
            {"en-us-u-va-posix2",   "en_US@va=posix2",      NOERROR},
            {"en-us-vari1-u-va-posix",   "en_US_VARI1@va=posix",  NOERROR},
            {"ar-x-1-2-3",          "ar@x=1-2-3",           NOERROR},
            {"fr-u-nu-latn-cu-eur", "fr@currency=eur;numbers=latn", NOERROR},
            {"de-k-kext-u-co-phonebk-nu-latn",  "de@collation=phonebook;k=kext;numbers=latn",   NOERROR},
            {"ja-u-cu-jpy-ca-jp",   "ja@calendar=true;currency=jpy;jp=true",  NOERROR},
            {"en-us-u-tz-usnyc",    "en_US@timezone=America/New_York",      NOERROR},
            {"und-a-abc-def",       "@a=abc-def",           NOERROR},
            {"zh-u-ca-chinese-x-u-ca-chinese",  "zh@calendar=chinese;x=u-ca-chinese",   NOERROR},
            {"fr--FR",              "fr",                   Integer.valueOf(3)},
            {"fr-",                 "fr",                   Integer.valueOf(3)},
            {"x-elmer",             "@x=elmer",             NOERROR},
        };

        for (int i = 0; i < langtag_to_locale.length; i++) {
            String tag = (String)langtag_to_locale[i][0];
            ULocale expected = new ULocale((String)langtag_to_locale[i][1]);
            ULocale loc = ULocale.forLanguageTag(tag);

            if (!loc.equals(expected)) {
                errln("FAIL: forLanguageTag returned locale [" + loc + "] for language tag [" + tag
                        + "] - expected: [" + expected + "]");
            }
        }

        // Use locale builder to check errors
        for (int i = 0; i < langtag_to_locale.length; i++) {
            String tag = (String)langtag_to_locale[i][0];
            ULocale expected = new ULocale((String)langtag_to_locale[i][1]);
            int errorIdx = ((Integer)langtag_to_locale[i][2]).intValue();

            try {
                Builder bld = new Builder();
                bld.setLanguageTag(tag);
                ULocale loc = bld.build();

                if (!loc.equals(expected)) {
                    errln("FAIL: forLanguageTag returned locale [" + loc + "] for language tag [" + tag
                            + "] - expected: [" + expected + "]");
                }
                if (errorIdx != NOERROR.intValue()) {
                    errln("FAIL: Builder.setLanguageTag should throw an exception for input tag [" + tag + "]");
                }
            } catch (IllformedLocaleException ifle) {
                if (ifle.getErrorIndex() != errorIdx) {
                    errln("FAIL: Builder.setLanguageTag returned error index " + ifle.getErrorIndex()
                            + " for input language tag [" + tag + "] expected: " + errorIdx);
                }
            }
        }
    }

    /*
     * Test that if you use any locale without keyword that you will get a NULL
     * string returned and not throw and exception.
     */
    public void Test4735()
    {
        try {
            new ULocale("und").getDisplayKeywordValue("calendar",ULocale.GERMAN);
            new ULocale("en").getDisplayKeywordValue("calendar",ULocale.GERMAN);
        } catch (Exception e) {
            errln("Unexpected exception: " + e.getMessage());
        }  
    }

    public void TestGetFallback() {
        // Testing static String getFallback(String)
        final String[][] TESTIDS =
        {
            {"en_US", "en", "", ""},    // ULocale.getFallback("") should return ""
            {"EN_us_Var", "en_US", "en", ""},   // Case is always normalized
            {"de_DE@collation=phonebook", "de@collation=phonebook", "@collation=phonebook", "@collation=phonebook"},    // Keyword is preserved
            {"en__POSIX", "en", ""},    // Trailing empty segment should be truncated
            {"_US_POSIX", "_US", ""},   // Same as above
            {"root", ""},               // No canonicalization
        };

        for (String[] chain : TESTIDS) {
            for (int i = 1; i < chain.length; i++) {
                String fallback = ULocale.getFallback(chain[i-1]);
                assertEquals("getFallback(\"" + chain[i-1] + "\")", chain[i], fallback);
            }
        }

        // Testing ULocale getFallback()
        final ULocale[][] TESTLOCALES = 
        {
            {new ULocale("en_US"), new ULocale("en"), ULocale.ROOT, null},
            {new ULocale("en__POSIX"), new ULocale("en"), ULocale.ROOT, null},
            {new ULocale("de_DE@collation=phonebook"), new ULocale("de@collation=phonebook"), new ULocale("@collation=phonebook"), null},
            {new ULocale("_US_POSIX"), new ULocale("_US"), ULocale.ROOT, null},
            {new ULocale("root"), ULocale.ROOT, null},
        };

        for(ULocale[] chain : TESTLOCALES) {
            for (int i = 1; i < chain.length; i++) {
                ULocale fallback = chain[i-1].getFallback();
                assertEquals("ULocale(" + chain[i-1] + ").getFallback()", chain[i], fallback);
            }
        }
    }

    public void TestExtension() {
        String[][] TESTCASES = {
                // {"<langtag>", "<ext key1>", "<ext val1>", "<ext key2>", "<ext val2>", ....},
                {"en"},
                {"en-a-exta-b-extb", "a", "exta", "b", "extb"},
                {"en-b-extb-a-exta", "a", "exta", "b", "extb"},
                {"de-x-a-bc-def", "x", "a-bc-def"},
                {"ja-JP-u-cu-jpy-ca-japanese-x-java", "u", "ca-japanese-cu-jpy", "x", "java"},
        };

        for (String[] testcase : TESTCASES) {
            ULocale loc = ULocale.forLanguageTag(testcase[0]);

            int nExtensions = (testcase.length - 1) / 2;

            Set<Character> keys = loc.getExtensionKeys();
            if (keys.size() != nExtensions) {
                errln("Incorrect number of extensions: returned="
                        + keys.size() + ", expected=" + nExtensions
                        + ", locale=" + testcase[0]);
            }

            for (int i = 0; i < nExtensions; i++) {
                String kstr = testcase[i/2 + 1];
                String ext = loc.getExtension(Character.valueOf(kstr.charAt(0)));
                if (ext == null || !ext.equals(testcase[i/2 + 2])) {
                    errln("Incorrect extension value: key=" 
                            + kstr + ", returned=" + ext + ", expected=" + testcase[i/2 + 2]
                            + ", locale=" + testcase[0]);
                }
            }
        }

        // Exception handling
        boolean sawException = false;
        try {
            ULocale l = ULocale.forLanguageTag("en-US-a-exta");
            l.getExtension('$');
        } catch (IllegalArgumentException e) {
            sawException = true;
        }
        if (!sawException) {
            errln("getExtension must throw an exception on illegal input key");
        }
    }

    public void TestUnicodeLocaleExtension() {
        String[][] TESTCASES = {
                //"<langtag>", "<attr1>,<attr2>,...", "<key1>,<key2>,...", "<type1>", "<type2>", ...},
                {"en", null, null},
                {"en-a-ext1-x-privuse", null, null},
                {"en-u-attr1-attr2", "attr1,attr2", null},
                {"ja-u-ca-japanese-cu-jpy", null, "ca,cu", "japanese", "jpy"},
                {"th-TH-u-number-attr-nu-thai-ca-buddhist", "attr,number", "ca,nu", "buddhist", "thai"},
        };

        for (String[] testcase : TESTCASES) {
            ULocale loc = ULocale.forLanguageTag(testcase[0]);

            Set<String> expectedAttributes = new HashSet<String>();
            if (testcase[1] != null) {
                String[] attrs = testcase[1].split(",");
                for (String s : attrs) {
                    expectedAttributes.add(s);
                }
            }

            Map<String, String> expectedKeywords = new HashMap<String, String>();
            if (testcase[2] != null) {
                String[] ukeys = testcase[2].split(",");
                for (int i = 0; i < ukeys.length; i++) {
                    expectedKeywords.put(ukeys[i], testcase[i + 3]);
                }
            }

            // Check attributes
            Set<String> attributes = loc.getUnicodeLocaleAttributes();
            if (attributes.size() != expectedAttributes.size()) {
                errln("Incorrect number for Unicode locale attributes: returned=" 
                        + attributes.size() + ", expected=" + expectedAttributes.size()
                        + ", locale=" + testcase[0]);
            }
            if (!attributes.containsAll(expectedAttributes) || !expectedAttributes.containsAll(attributes)) {
                errln("Incorrect set of attributes for locale " + testcase[0]);
            }

            // Check keywords
            Set<String> keys = loc.getUnicodeLocaleKeys();
            Set<String> expectedKeys = expectedKeywords.keySet();
            if (keys.size() != expectedKeys.size()) {
                errln("Incorrect number for Unicode locale keys: returned=" 
                        + keys.size() + ", expected=" + expectedKeys.size()
                        + ", locale=" + testcase[0]);
            }

            for (String expKey : expectedKeys) {
                String type = loc.getUnicodeLocaleType(expKey);
                String expType = expectedKeywords.get(expKey);

                if (type == null || !expType.equals(type)) {
                    errln("Incorrect Unicode locale type: key=" 
                            + expKey + ", returned=" + type + ", expected=" + expType
                            + ", locale=" + testcase[0]);
                }
            }
        }

        // Exception handling
        boolean sawException = false;
        try {
            ULocale l = ULocale.forLanguageTag("en-US-u-ca-gregory");
            l.getUnicodeLocaleType("$%");
        } catch (IllegalArgumentException e) {
            sawException = true;
        }
        if (!sawException) {
            errln("getUnicodeLocaleType must throw an exception on illegal input key");
        }
    }

    public void TestForLocale() {
        Object[][] DATA = {
            {new Locale(""),                    ""},
            {new Locale("en", "US"),            "en_US"},
            {new Locale("en", "US", "POSIX"),   "en_US_POSIX"},
            {new Locale("", "US"),              "_US"},
            {new Locale("en", "", "POSIX"),     "en__POSIX"},
            {new Locale("no", "NO", "NY"),      "nn_NO"},
            {new Locale("en", "BOGUS"),         "en__BOGUS"}, // ill-formed country is mapped to variant - see #8383 and #8384
        };

        for (int i = 0; i < DATA.length; i++) {
            ULocale uloc = ULocale.forLocale((Locale) DATA[i][0]);
            assertEquals("forLocale with " + DATA[i][0], DATA[i][1], uloc.getName());
        }

        if (JAVA7_OR_LATER) {
            Object[][] DATA7 = {
                {new Locale("ja", "JP", "JP"),      "ja_JP_JP@calendar=japanese"},
                {new Locale("th", "TH", "TH"),      "th_TH_TH@numbers=thai"},
            };
            for (int i = 0; i < DATA7.length; i++) {
                ULocale uloc = ULocale.forLocale((Locale) DATA7[i][0]);
                assertEquals("forLocale with " + DATA7[i][0], DATA7[i][1], uloc.getName());
            }

            try {
                Method localeForLanguageTag = Locale.class.getMethod("forLanguageTag", String.class);

                String[][] DATA7EXT = {
                    {"en-Latn-US",                  "en_Latn_US"},
                    {"zh-Hant-TW",                  "zh_Hant_TW"},
                    {"und-US-u-cu-usd",             "_US@currency=usd"},
                    {"th-TH-u-ca-buddhist-nu-thai", "th_TH@calendar=buddhist;numbers=thai"},
                    {"en-US-u-va-POSIX",            "en_US_POSIX"},
                    {"de-DE-u-co-phonebk",          "de_DE@collation=phonebook"},
                    {"en-a-exta-b-extb-x-privu",    "en@a=exta;b=extb;x=privu"},
                    {"fr-u-attr1-attr2-cu-eur",     "fr@attribute=attr1-attr2;currency=eur"},
                };

                for (int i = 0; i < DATA7EXT.length; i++) {
                    Locale loc = (Locale) localeForLanguageTag.invoke(null, DATA7EXT[i][0]);
                    ULocale uloc = ULocale.forLocale(loc);
                    assertEquals("forLocale with " + loc, DATA7EXT[i][1], uloc.getName());
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }

        } else {
            Object[][] DATA6 = {
                {new Locale("ja", "JP", "JP"),      "ja_JP@calendar=japanese"},
                {new Locale("th", "TH", "TH"),      "th_TH@numbers=thai"},
            };
            for (int i = 0; i < DATA6.length; i++) {
                ULocale uloc = ULocale.forLocale((Locale) DATA6[i][0]);
                assertEquals("forLocale with " + DATA6[i][0], DATA6[i][1], uloc.getName());
            }
        }
    }

    public void TestToLocale() {
        Object[][] DATA = {
            {"",                new Locale("")},
            {"en_US",           new Locale("en", "US")},
            {"_US",             new Locale("", "US")},
            {"en__POSIX",       new Locale("en", "", "POSIX")},
        };

        for (int i = 0; i < DATA.length; i++) {
            Locale loc = new ULocale((String) DATA[i][0]).toLocale();
            assertEquals("toLocale with " + DATA[i][0], DATA[i][1], loc);
        }

        if (JAVA7_OR_LATER) {
            Object[][] DATA7 = {
                    {"nn_NO",                       new Locale("nn", "NO")},
                    {"no_NO_NY",                    new Locale("no", "NO", "NY")},
            };
            for (int i = 0; i < DATA7.length; i++) {
                Locale loc = new ULocale((String) DATA7[i][0]).toLocale();
                assertEquals("toLocale with " + DATA7[i][0], DATA7[i][1], loc);
            }

            try {
                Method localeForLanguageTag = Locale.class.getMethod("forLanguageTag", String.class);

                String[][] DATA7EXT = {
                    {"en_Latn_US",                  "en-Latn-US"},
                    {"zh_Hant_TW",                  "zh-Hant-TW"},
                    {"ja_JP@calendar=japanese",     "ja-JP-u-ca-japanese"},
                    {"ja_JP_JP@calendar=japanese",  "ja-JP-u-ca-japanese-x-lvariant-JP"},
                    {"th_TH@numbers=thai",          "th-TH-u-nu-thai"},
                    {"th_TH_TH@numbers=thai",       "th-TH-u-nu-thai-x-lvariant-TH"},
                    {"de@collation=phonebook",      "de-u-co-phonebk"},
                    {"en@a=exta;b=extb;x=privu",    "en-a-exta-b-extb-x-privu"},
                    {"fr@attribute=attr1-attr2;currency=eur",   "fr-u-attr1-attr2-cu-eur"},
                };

                for (int i = 0; i < DATA7EXT.length; i++) {
                    Locale loc = new ULocale((String) DATA7EXT[i][0]).toLocale();
                    Locale expected = (Locale) localeForLanguageTag.invoke(null, DATA7EXT[i][1]);
                    assertEquals("toLocale with " + DATA7EXT[i][0], expected, loc);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            }

        } else {
            Object[][] DATA6 = {
                {"nn_NO",                       new Locale("no", "NO", "NY")},
                {"no_NO_NY",                    new Locale("no", "NO", "NY")},
                {"ja_JP@calendar=japanese",     new Locale("ja", "JP", "JP")},
                {"th_TH@numbers=thai",          new Locale("th", "TH", "TH")},
            };
            for (int i = 0; i < DATA6.length; i++) {
                Locale loc = new ULocale((String) DATA6[i][0]).toLocale();
                assertEquals("toLocale with " + DATA6[i][0], DATA6[i][1], loc);
            }
        }
    }

    public void TestCategoryDefault() {
        Locale backupDefault = Locale.getDefault();

        ULocale orgDefault = ULocale.getDefault();

        // Setting a category default won't change default ULocale
        ULocale uJaJp = new ULocale("ja_JP");
        ULocale uDeDePhonebook = new ULocale("de_DE@collation=phonebook");

        ULocale.setDefault(Category.DISPLAY, uJaJp);
        ULocale.setDefault(Category.FORMAT, uDeDePhonebook);

        if (!ULocale.getDefault().equals(orgDefault)) {
            errln("FAIL: Default ULocale is " + ULocale.getDefault() + ", expected: " + orgDefault);
        }

        if (!ULocale.getDefault(Category.DISPLAY).equals(uJaJp)) {
            errln("FAIL: DISPLAY ULocale is " + ULocale.getDefault(Category.DISPLAY) + ", expected: " + uJaJp);
        }

        if (!ULocale.getDefault(Category.FORMAT).equals(uDeDePhonebook)) {
            errln("FAIL: FORMAT ULocale is " + ULocale.getDefault(Category.FORMAT) + ", expected: " + uDeDePhonebook);
        }

        // Setting ULocale default will overrides category defaults
        ULocale uFrFr = new ULocale("fr_FR");

        ULocale.setDefault(uFrFr);

        if (!ULocale.getDefault(Category.DISPLAY).equals(uFrFr)) {
            errln("FAIL: DISPLAY ULocale is " + ULocale.getDefault(Category.DISPLAY) + ", expected: " + uFrFr);
        }

        if (!ULocale.getDefault(Category.FORMAT).equals(uFrFr)) {
            errln("FAIL: FORMAT ULocale is " + ULocale.getDefault(Category.FORMAT) + ", expected: " + uFrFr);
        }

        // Setting Locale default will updates ULocale default and category defaults
        Locale arEg = new Locale("ar", "EG");
        ULocale uArEg = ULocale.forLocale(arEg);

        Locale.setDefault(arEg);

        if (!ULocale.getDefault().equals(uArEg)) {
            errln("FAIL: Default ULocale is " + ULocale.getDefault() + ", expected: " + uArEg);
        }

        if (!ULocale.getDefault(Category.DISPLAY).equals(uArEg)) {
            errln("FAIL: DISPLAY ULocale is " + ULocale.getDefault(Category.DISPLAY) + ", expected: " + uArEg);
        }

        if (!ULocale.getDefault(Category.FORMAT).equals(uArEg)) {
            errln("FAIL: FORMAT ULocale is " + ULocale.getDefault(Category.FORMAT) + ", expected: " + uArEg);
        }

        // Restore back up
        Locale.setDefault(backupDefault);
    }
}
