17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2008, International Business Machines Corporation and         *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.localespi;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.BreakIterator;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class BreakIteratorTest extends TestFmwk {
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static void main(String[] args) throws Exception {
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        new BreakIteratorTest().run(args);
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final int CHARACTER_BRK = 0;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final int WORD_BRK = 1;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final int LINE_BRK = 2;
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final int SENTENCE_BRK = 3;
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Check if getInstance returns the ICU implementation.
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestGetInstance() {
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (Locale loc : BreakIterator.getAvailableLocales()) {
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (TestUtil.isProblematicIBMLocale(loc)) {
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln("Skipped " + loc);
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                continue;
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            checkGetInstance(CHARACTER_BRK, loc);
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            checkGetInstance(WORD_BRK, loc);
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            checkGetInstance(LINE_BRK, loc);
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            checkGetInstance(SENTENCE_BRK, loc);
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void checkGetInstance(int type, Locale loc) {
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator brkitr = null;
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String method = null;
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        switch (type) {
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case CHARACTER_BRK:
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            brkitr = BreakIterator.getCharacterInstance(loc);
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            method = "getCharacterInstance";
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case WORD_BRK:
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            brkitr = BreakIterator.getWordInstance(loc);
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            method = "getWordInstance";
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case LINE_BRK:
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            brkitr = BreakIterator.getLineInstance(loc);
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            method = "getLineInstance";
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        case SENTENCE_BRK:
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            brkitr = BreakIterator.getSentenceInstance(loc);
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            method = "getSentenceInstance";
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            break;
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        default:
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Unknown break iterator type");
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        boolean isIcuImpl = (brkitr instanceof com.ibm.icu.impl.jdkadapter.BreakIteratorICU);
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (TestUtil.isICUExtendedLocale(loc)) {
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (!isIcuImpl) {
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: " + method + " returned JDK BreakIterator for locale " + loc);
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (isIcuImpl) {
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                logln("INFO: " + method + " returned ICU BreakIterator for locale " + loc);
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            BreakIterator brkitrIcu = null;
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Locale iculoc = TestUtil.toICUExtendedLocale(loc);
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            switch (type) {
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            case CHARACTER_BRK:
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                brkitrIcu = BreakIterator.getCharacterInstance(iculoc);
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            case WORD_BRK:
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                brkitrIcu = BreakIterator.getWordInstance(iculoc);
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            case LINE_BRK:
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                brkitrIcu = BreakIterator.getLineInstance(iculoc);
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            case SENTENCE_BRK:
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                brkitrIcu = BreakIterator.getSentenceInstance(iculoc);
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (isIcuImpl) {
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (!brkitr.equals(brkitrIcu)) {
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    // BreakIterator.getXXXInstance returns a cached BreakIterator instance.
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    // BreakIterator does not override Object#equals, so the result may not be
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    // consistent.
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//                        logln("INFO: " + method + " returned ICU BreakIterator for locale " + loc
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//                                + ", but different from the one for locale " + iculoc);
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } else {
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                if (!(brkitrIcu instanceof com.ibm.icu.impl.jdkadapter.BreakIteratorICU)) {
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    errln("FAIL: " + method + " returned JDK BreakIterator for locale " + iculoc);
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Testing the behavior of text break between ICU instance and its
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * equivalent created via the Locale SPI framework.
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestICUEquivalent() {
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Locale[] TEST_LOCALES = {
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new Locale("en", "US"),
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new Locale("fr", "FR"),
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new Locale("th", "TH"),
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new Locale("zh", "CN"),
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String[] TEST_DATA = {
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "International Components for Unicode (ICU) is an open source project of mature "
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "C/C++ and Java libraries for Unicode support, software internationalization and "
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "software globalization. ICU is widely portable to many operating systems and "
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "environments. It gives applications the same results on all platforms and between "
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "C/C++ and Java software. The ICU project is an open source development project "
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "that is sponsored, supported and used by IBM and many other companies.",
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "L'International Components for Unicode (ICU) est un projet open source qui fourni "
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "des biblioth\u00e8ques pour les langages informatique C/C++ et Java pour supporter "
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "Unicode, l'internationalisation et la mondialisation des logiciels. ICU est largement "
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "portable vers beaucoup de syst\u00e8mes d'exploitations et d'environnements. Il "
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "donne aux applications les m\u00eames comportements et r\u00e9sultats sur toutes "
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "les plateformes et entre les logiciels C/C++ et Java. Le projet ICU est un projet "
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "dont les code sources sont disponibles qui est sponsoris\u00e9, support\u00e9 et "
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "utilis\u00e9 par IBM et beaucoup d'autres entreprises.",
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "\u5728IBM\u7b49\u4f01\u696d\u4e2d\uff0c\u56fd\u9645\u5316\u7ecf\u5e38\u7b80\u5199"
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u4e3aI18N (\u6216i18n\u6216I18n)\uff0c\u5176\u4e2d18\u4ee3\u8868\u4e86\u4e2d\u95f4"
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u7701\u7565\u768418\u4e2a\u5b57\u6bcd\uff1b\u800c\u201c\u672c\u5730\u5316\u201d"
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u540c\u53ef\u7b80\u5199\u4e3al10n\u3002\u9019\u4e24\u4e2a\u6982\u5ff5\u6709\u65f6"
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u5408\u79f0\u5168\u7403\u5316\uff08g11n\uff09\uff0c\u4f46\u662f\u5168\u7403\u5316"
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u7684\u6db5\u4e49\u66f4\u4e3a\u4e00\u822c\u5316\u3002\u53e6\u5916\u5076\u5c14\u4f1a"
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u51fa\u73b0\u201cp13n\u201d\uff0c\u4ee3\u8868\u4e2a\u4eba\u5316\uff08personalization"
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\uff09\u3002",
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                "\u0e01\u0e23\u0e38\u0e07\u0e40\u0e17\u0e1e\u0e21\u0e2b\u0e32\u0e19\u0e04\u0e23"
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e43\u0e19\u0e1b\u0e31\u0e08\u0e08\u0e38\u0e1a\u0e31\u0e19\u0e40\u0e1b\u0e47"
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e19\u0e28\u0e39\u0e19\u0e22\u0e4c\u0e01\u0e25\u0e32\u0e07\u0e01\u0e32\u0e23"
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e1b\u0e01\u0e04\u0e23\u0e2d\u0e07 \u0e01\u0e32\u0e23\u0e28\u0e36\u0e01\u0e29"
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e32 \u0e01\u0e32\u0e23\u0e04\u0e21\u0e19\u0e32\u0e04\u0e21\u0e02\u0e19\u0e2a"
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e48\u0e07 \u0e01\u0e32\u0e23\u0e40\u0e07\u0e34\u0e19\u0e01\u0e32\u0e23\u0e18"
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e19\u0e32\u0e04\u0e32\u0e23 \u0e01\u0e32\u0e23\u0e1e\u0e32\u0e13\u0e34\u0e0a"
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e22\u0e4c \u0e01\u0e32\u0e23\u0e2a\u0e37\u0e48\u0e2d\u0e2a\u0e32\u0e23 \u0e2f"
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e25\u0e2f \u0e42\u0e14\u0e22\u0e21\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35"
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 1,562.2 \u0e15\u0e32\u0e23\u0e32"
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e07\u0e01\u0e34\u0e42\u0e25\u0e40\u0e21\u0e15\u0e23 \u0e1e\u0e34\u0e01\u0e31"
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e14\u0e17\u0e32\u0e07\u0e20\u0e39\u0e21\u0e34\u0e28\u0e32\u0e2a\u0e15\u0e23"
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e4c\u0e04\u0e37\u0e2d \u0e25\u0e30\u0e15\u0e34\u0e08\u0e39\u0e14 13\u00b0 45"
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u2019 \u0e40\u0e2b\u0e19\u0e37\u0e2d \u0e25\u0e2d\u0e07\u0e08\u0e34\u0e08\u0e39"
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                + "\u0e14 100\u00b0 31\u2019 \u0e15\u0e30\u0e27\u0e31\u0e19\u0e2d\u0e2d\u0e01"
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        };
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        BreakIterator[] jdkBrkItrs = new BreakIterator[4];
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        com.ibm.icu.text.BreakIterator[] icuBrkItrs = new com.ibm.icu.text.BreakIterator[4];
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (Locale loc : TEST_LOCALES) {
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Locale iculoc = TestUtil.toICUExtendedLocale(loc);
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkBrkItrs[0] = BreakIterator.getCharacterInstance(iculoc);
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkBrkItrs[1] = BreakIterator.getWordInstance(iculoc);
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkBrkItrs[2] = BreakIterator.getLineInstance(iculoc);
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jdkBrkItrs[3] = BreakIterator.getSentenceInstance(iculoc);
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuBrkItrs[0] = com.ibm.icu.text.BreakIterator.getCharacterInstance(iculoc);
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuBrkItrs[1] = com.ibm.icu.text.BreakIterator.getWordInstance(iculoc);
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuBrkItrs[2] = com.ibm.icu.text.BreakIterator.getLineInstance(iculoc);
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            icuBrkItrs[3] = com.ibm.icu.text.BreakIterator.getSentenceInstance(iculoc);
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (String text : TEST_DATA) {
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for (int i = 0; i < 4; i++) {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    compareBreaks(text, jdkBrkItrs[i], icuBrkItrs[i]);
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private void compareBreaks(String text, BreakIterator jdkBrk, com.ibm.icu.text.BreakIterator icuBrk) {
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        jdkBrk.setText(text);
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        icuBrk.setText(text);
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Forward
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int jidx = jdkBrk.first();
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int iidx = icuBrk.first();
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (jidx != iidx) {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Different first boundaries (jdk=" + jidx + ",icu=" + iidx + ") for text:\n" + text);
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        while (true) {
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jidx = jdkBrk.next();
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            iidx = icuBrk.next();
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (jidx != iidx) {
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Different boundaries (jdk=" + jidx + ",icu=" + iidx + "direction=forward) for text:\n" + text);
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (jidx == BreakIterator.DONE) {
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Backward
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        jidx = jdkBrk.last();
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        iidx = jdkBrk.last();
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (jidx != iidx) {
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Different last boundaries (jdk=" + jidx + ",icu=" + iidx + ") for text:\n" + text);
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        while (true) {
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            jidx = jdkBrk.previous();
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            iidx = icuBrk.previous();
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (jidx != iidx) {
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Different boundaries (jdk=" + jidx + ",icu=" + iidx + "direction=backward) for text:\n" + text);
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (jidx == BreakIterator.DONE) {
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                break;
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
225