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