Ejemplo n.º 1
0
        public void TestExemplarSet2()
        {
            int       equalCount      = 0;
            HashedSet testedExemplars = new HashedSet();

            for (int i = 0; i < availableLocales.Length; i++)
            {
                ULocale    locale      = availableLocales[i];
                LocaleData ld          = IBM.ICU.Util.LocaleData.GetInstance(locale);
                int[]      scriptCodes = IBM.ICU.Lang.UScript.GetCode(locale);
                if (scriptCodes == null)
                {
                    if (locale.ToString().IndexOf(("in")) < 0)
                    {
                        Errln("UScript.getCode returned null for locale: " + locale);
                    }
                    continue;
                }
                UnicodeSet[] exemplarSets = new UnicodeSet[4];

                for (int k = 0; k < 2; ++k)
                { // for casing option in (normal,
                    // uncased)
                    int option = (k == 0) ? 0 : IBM.ICU.Text.UnicodeSet.CASE;
                    for (int h = 0; h < 2; ++h)
                    {
                        int type = (h == 0) ? IBM.ICU.Util.LocaleData.ES_STANDARD
                                : IBM.ICU.Util.LocaleData.ES_AUXILIARY;

                        UnicodeSet exemplarSet = ld.GetExemplarSet(option, type);
                        exemplarSets[k * 2 + h] = exemplarSet;

                        LocaleDataTest.ExemplarGroup exGrp = new LocaleDataTest.ExemplarGroup(exemplarSet,
                                                                                              scriptCodes);
                        if (!ILOG.J2CsMapping.Collections.Collections.Contains(exGrp, testedExemplars))
                        {
                            ILOG.J2CsMapping.Collections.Generics.Collections.Add(testedExemplars, exGrp);
                            UnicodeSet[] sets = new UnicodeSet[scriptCodes.Length];
                            // create the UnicodeSets for the script
                            for (int j = 0; j < scriptCodes.Length; j++)
                            {
                                sets[j] = new UnicodeSet("[:"
                                                         + IBM.ICU.Lang.UScript.GetShortName(scriptCodes[j])
                                                         + ":]");
                            }
                            bool existsInScript     = false;
                            UnicodeSetIterator iter = new UnicodeSetIterator(
                                exemplarSet);
                            // iterate over the
                            while (!existsInScript && iter.NextRange())
                            {
                                if (iter.codepoint != IBM.ICU.Text.UnicodeSetIterator.IS_STRING)
                                {
                                    for (int j_0 = 0; j_0 < sets.Length; j_0++)
                                    {
                                        if (sets[j_0].Contains(iter.codepoint,
                                                               iter.codepointEnd))
                                        {
                                            existsInScript = true;
                                            break;
                                        }
                                    }
                                }
                                else
                                {
                                    for (int j_1 = 0; j_1 < sets.Length; j_1++)
                                    {
                                        if (sets[j_1].Contains(iter.str0))
                                        {
                                            existsInScript = true;
                                            break;
                                        }
                                    }
                                }
                            }
                            // TODO: How to verify LocaleData.ES_AUXILIARY ???
                            if (existsInScript == false && h == 0)
                            {
                                Errln("ExemplarSet containment failed for locale,option,type : "
                                      + locale + ", " + option + ", " + type);
                            }
                        }
                    }
                }
                // This is expensive, so only do it if it will be visible
                if (IsVerbose())
                {
                    Logln(locale.ToString() + " exemplar(ES_STANDARD)"
                          + exemplarSets[0]);
                    Logln(locale.ToString() + " exemplar(ES_AUXILIARY) "
                          + exemplarSets[1]);
                    Logln(locale.ToString() + " exemplar(case-folded,ES_STANDARD) "
                          + exemplarSets[2]);
                    Logln(locale.ToString()
                          + " exemplar(case-folded,ES_AUXILIARY) "
                          + exemplarSets[3]);
                }
                AssertTrue(locale.ToString() + " case-folded is a superset",
                           exemplarSets[2].ContainsAll(exemplarSets[0]));
                AssertTrue(locale.ToString() + " case-folded is a superset",
                           exemplarSets[3].ContainsAll(exemplarSets[1]));
                if (exemplarSets[2].Equals(exemplarSets[0]))
                {
                    ++equalCount;
                }
                if (exemplarSets[3].Equals(exemplarSets[1]))
                {
                    ++equalCount;
                }
            }
            // Note: The case-folded set should sometimes be a strict superset
            // and sometimes be equal.
            AssertTrue(
                "case-folded is sometimes a strict superset, and sometimes equal",
                equalCount > 0 && equalCount < availableLocales.Length * 2);
        }