16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1999-2013, International Business Machines 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Corporation and others. All Rights Reserved. 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ******************************************************************** 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Date Name Description 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 12/14/99 Madhu Creation. 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 01/12/2000 Madhu updated for changed API 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h" 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "intltest.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/rbbi.h" 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/schriter.h" 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "rbbiapts.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "rbbidata.h" 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "ubrkimpl.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utext.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * API Test the RuleBasedBreakIterator class 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) {\ 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgdataerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status));}} 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TEST_ASSERT(expr) {if ((expr) == FALSE) { \ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Test Failure at file %s, line %d: \"%s\" is false.\n", __FILE__, __LINE__, #expr);};} 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestCloneEquals() 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* biequal = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString="Testing word break iterators's clone() and equals()"; 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi1->setText(testString); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi2->setText(testString); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org biequal->setText(testString); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi3->setText("hello"); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing equals()"); 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing == and !="); 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool b = (*bi1 != *biequal); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org b |= *bi1 == *bi2; 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org b |= *bi1 == *bi3; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (b) { 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:1 RBBI's == and != operator failed."); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*bi2 == *biequal || *bi2 == *bi1 || *biequal == *bi3) 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:2 RBBI's == and != operator failed."); 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Quick test of RulesBasedBreakIterator assignment - 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Check that 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // two different iterators are != 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // they are == after assignment 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // source and dest iterator produce the same next() after assignment. 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // deleting one doesn't disable the other. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Testing assignment"); 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bix = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator biDefault, biDefault2; 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"FAIL : in construction of default iterator"); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (biDefault == *bix) { 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: iterators should not compare =="); 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (biDefault != biDefault2) { 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: iterators should compare =="); 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString HelloString("Hello Kitty"); 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bix->setText(HelloString); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*bix == *bi2) { 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("ERROR: strings should not be equal before assignment.")); 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *bix = *bi2; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (*bix != *bi2) { 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("ERROR: strings should be equal before assignment.")); 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int bixnext = bix->next(); 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int bi2next = bi2->next(); 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (! (bixnext == bi2next && bixnext == 7)) { 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("ERROR: iterators behaved differently after assignment.")); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bix; 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bi2->next() != 8) { 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(UnicodeString("ERROR: iterator.next() failed after deleting copy.")); 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing clone()"); 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi1clone=(RuleBasedBreakIterator*)bi1->clone(); 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi2clone=(RuleBasedBreakIterator*)bi2->clone(); 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*bi1clone != *bi1 || *bi1clone != *biequal || 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *bi1clone == *bi3 || *bi1clone == *bi2) 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:1 RBBI's clone() method failed"); 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*bi2clone == *bi1 || *bi2clone == *biequal || 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *bi2clone == *bi3 || *bi2clone != *bi2) 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:2 RBBI's clone() method failed"); 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(bi1->getText() != bi1clone->getText() || 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi2clone->getText() != bi2->getText() || 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *bi2clone == *bi1clone ) 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: RBBI's clone() method failed"); 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1clone; 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2clone; 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1; 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi3; 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2; 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete biequal; 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestBoilerPlate() 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* a = BreakIterator::createWordInstance(Locale("hi"), status); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* b = BreakIterator::createWordInstance(Locale("hi_IN"),status); 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Creation of break iterator failed %s", u_errorName(status)); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*a!=*b){ 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Failed: boilerplate method operator!= does not return correct results"); 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Japanese word break iterators are identical to root with 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // a dictionary-based break iterator 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* c = BreakIterator::createCharacterInstance(Locale("ja"),status); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* d = BreakIterator::createCharacterInstance(Locale("root"),status); 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(c && d){ 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(*c!=*d){ 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Failed: boilerplate method operator== does not return correct results"); 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }else{ 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("creation of break iterator failed"); 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete a; 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete b; 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete c; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete d; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestgetRules() 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi1=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi2=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "FAIL: in construction - %s", u_errorName(status)); 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1; 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing toString()"); 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi1->setText((UnicodeString)"Hello there"); 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi3 =(RuleBasedBreakIterator*)bi1->clone(); 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString temp=bi1->getRules(); 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString temp2=bi2->getRules(); 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString temp3=bi3->getRules(); 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( temp2.compare(temp3) ==0 || temp.compare(temp2) == 0 || temp.compare(temp3) != 0) 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: error in getRules() method"); 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2; 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi3; 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestHashCode() 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1; 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2; 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi3; 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing hashCode()"); 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi1->setText((UnicodeString)"Hash code"); 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi2->setText((UnicodeString)"Hash code"); 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi3->setText((UnicodeString)"Hash code"); 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi1clone= (RuleBasedBreakIterator*)bi1->clone(); 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi2clone= (RuleBasedBreakIterator*)bi2->clone(); 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(bi1->hashCode() != bi1clone->hashCode() || bi1->hashCode() != bi3->hashCode() || 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi1clone->hashCode() != bi3->hashCode() || bi2->hashCode() != bi2clone->hashCode()) 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: identical objects have different hashcodes"); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(bi1->hashCode() == bi2->hashCode() || bi2->hashCode() == bi3->hashCode() || 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi1clone->hashCode() == bi2clone->hashCode() || bi1clone->hashCode() == bi2->hashCode()) 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR: different objects have same hashcodes"); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1clone; 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2clone; 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi1; 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi2; 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi3; 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestGetSetAdoptText() 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"Testing getText setText "); 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org IcuTestErrorCode status(*this, "TestGetSetAdoptText"); 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str1="first string."; 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString str2="Second string."; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<RuleBasedBreakIterator> charIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status)); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<RuleBasedBreakIterator> wordIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status)); 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status.isFailure()){ 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail : in construction - %s", status.errorName()); 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator* text1= new StringCharacterIterator(str1); 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator* text1Clone = text1->clone(); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator* text2= new StringCharacterIterator(str2); 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator* text3= new StringCharacterIterator(str2, 3, 10, 3); // "ond str" 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->setText(str1); 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org CharacterIterator *tci = &wordIter1->getText(); 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString tstr; 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tci->getText(tstr); 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(tstr == str1); 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(wordIter1->current() != 0) 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:1 setText did not set the iteration position to the beginning of the text, it is" + wordIter1->current() + (UnicodeString)"\n"); 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->next(2); 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->setText(str2); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(wordIter1->current() != 0) 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:2 setText did not reset the iteration position to the beginning of the text, it is" + wordIter1->current() + (UnicodeString)"\n"); 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charIter1->adoptText(text1Clone); 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(wordIter1->getText() != charIter1->getText()); 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tci = &wordIter1->getText(); 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tci->getText(tstr); 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(tstr == str2); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tci = &charIter1->getText(); 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tci->getText(tstr); 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(tstr == str1); 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalPointer<RuleBasedBreakIterator> rb((RuleBasedBreakIterator*)wordIter1->clone()); 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb->adoptText(text1); 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(rb->getText() != *text1) 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:1 error in adoptText "); 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb->adoptText(text2); 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(rb->getText() != *text2) 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:2 error in adoptText "); 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Adopt where iterator range is less than the entire orignal source string. 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // (With the change of the break engine to working with UText internally, 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // CharacterIterators starting at positions other than zero are not supported) 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb->adoptText(text3); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(rb->preceding(2) == 0); 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(rb->following(11) == BreakIterator::DONE); 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if(rb->preceding(2) != 3) { 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // errln((UnicodeString)"ERROR:3 error in adoptText "); 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //if(rb->following(11) != BreakIterator::DONE) { 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // errln((UnicodeString)"ERROR:4 error in adoptText "); 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //} 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // UText API 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Quick test to see if UText is working at all. 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *s1 = "\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64"; /* "hello world" in UTF-8 */ 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *s2 = "\x73\x65\x65\x20\x79\x61"; /* "see ya" in UTF-8 */ 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 012345678901 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status.reset(); 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUTextPointer ut(utext_openUTF8(NULL, s1, -1, status)); 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->setText(ut.getAlias(), status); 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->first(); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==0); 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==5); 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==6); 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==11); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==UBRK_DONE); 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status.reset(); 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUTextPointer ut2(utext_openUTF8(NULL, s2, -1, status)); 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->setText(ut2.getAlias(), status); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->first(); 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==0); 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==3); 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->next(); 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==4); 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->last(); 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==6); 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->previous(); 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==4); 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->previous(); 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==3); 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->previous(); 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==0); 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = wordIter1->previous(); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==UBRK_DONE); 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status.reset(); 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString sEmpty; 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUTextPointer gut2(utext_openUnicodeString(NULL, &sEmpty, status)); 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordIter1->getUText(gut2.getAlias(), status); 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status.reset(); 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestIteration() 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // This test just verifies that the API is present. 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Testing for correct operation of the break rules happens elsewhere. 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator* bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating Word break iterator. Status = %s", u_errorName(status)); 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createLineInstance(Locale::getDefault(), status); 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating Line break iterator. Status = %s", u_errorName(status)); 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createSentenceInstance(Locale::getDefault(), status); 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating Sentence break iterator. Status = %s", u_errorName(status)); 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createTitleInstance(Locale::getDefault(), status); 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating Title break iterator. Status = %s", u_errorName(status)); 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status) || bi == NULL) { 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; // Skip the rest of these tests. 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString="0123456789"; 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString); 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->first(); 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 0) { 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->first(). Expected 0, got %d.", i); 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->last(); 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 10) { 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->last(). Expected 10, got %d", i); 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Previous 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->last(); 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->previous(); 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 9) { 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->last() at line %d. Expected 9, got %d", __LINE__, i); 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->previous(); 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != BreakIterator::DONE) { 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->previous() at line %d. Expected DONE, got %d", __LINE__, i); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // next() 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->next(); 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 1) { 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->next() at line %d. Expected 1, got %d", __LINE__, i); 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->last(); 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->next(); 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != BreakIterator::DONE) { 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->next() at line %d. Expected DONE, got %d", __LINE__, i); 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // current() 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 0) { 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->next(); 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 1) { 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->previous() at line %d. Expected 1, got %d", __LINE__, i); 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->last(); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->next(); 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 10) { 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->previous() at line %d. Expected 10, got %d", __LINE__, i); 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->previous(); 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 0) { 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Following() 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->following(4); 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 5) { 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->following() at line %d. Expected 5, got %d", __LINE__, i); 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->following(9); 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 10) { 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->following() at line %d. Expected 10, got %d", __LINE__, i); 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->following(10); 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != BreakIterator::DONE) { 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->following() at line %d. Expected DONE, got %d", __LINE__, i); 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Preceding 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->preceding(4); 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 3) { 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->preceding() at line %d. Expected 3, got %d", __LINE__, i); 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->preceding(10); 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 9) { 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->preceding() at line %d. Expected 9, got %d", __LINE__, i); 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->preceding(1); 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 0) { 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->preceding() at line %d. Expected 0, got %d", __LINE__, i); 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->preceding(0); 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != BreakIterator::DONE) { 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->preceding() at line %d. Expected DONE, got %d", __LINE__, i); 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // isBoundary() 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bi->isBoundary(3) != TRUE) { 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->isBoudary() at line %d. Expected TRUE, got FALSE", __LINE__, i); 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 3) { 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->current() at line %d. Expected 3, got %d", __LINE__, i); 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (bi->isBoundary(11) != FALSE) { 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->isBoudary() at line %d. Expected FALSE, got TRUE", __LINE__, i); 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->current(); 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 10) { 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->current() at line %d. Expected 10, got %d", __LINE__, i); 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // next(n) 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->next(4); 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 4) { 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->next() at line %d. Expected 4, got %d", __LINE__, i); 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->next(6); 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != 10) { 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->next() at line %d. Expected 10, got %d", __LINE__, i); 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i = bi->next(11); 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i != BreakIterator::DONE) { 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Incorrect value from bi->next() at line %d. Expected BreakIterator::DONE, got %d", __LINE__, i); 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestBuilder() { 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString rulesString1 = "$Letters = [:L:];\n" 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "$Numbers = [:N:];\n" 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "$Letters+;\n" 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "$Numbers+;\n" 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[^$Letters $Numbers];\n" 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "!.*;\n"; 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString1 = "abc123..abc"; 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 01234567890 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bounds1[] = {0, 3, 6, 7, 8, 11}; 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseError parseError; 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Fail : in construction - %s", u_errorName(status)); 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doBoundaryTest(*bi, testString1, bounds1); 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TestQuoteGrouping 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Single quotes within rules imply a grouping, so that a modifier 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// following the quoted text (* or +) applies to all of the quoted chars. 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestQuoteGrouping() { 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString rulesString1 = "#Here comes the rule...\n" 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "'$@!'*;\n" // (\$\@\!)* 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ".;\n"; 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString1 = "$@!$@!X$@!!X"; 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 0123456789012 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bounds1[] = {0, 6, 7, 10, 11, 12}; 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseError parseError; 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Fail : in construction - %s", u_errorName(status)); 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doBoundaryTest(*bi, testString1, bounds1); 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TestRuleStatus 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Test word break rule status constants. 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestRuleStatus() { 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar str[30]; 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //no longer test Han or hiragana breaking here: ruleStatusVec would return nothing 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // changed UBRK_WORD_KANA to UBRK_WORD_IDEO 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape("plain word 123.45 \\u30a1\\u30a2 ", 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 012345678901234567 8 9 0 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Katakana 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org str, 30); 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString1(str); 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bounds1[] = {0, 5, 6, 10, 11, 17, 18, 20, 21}; 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tag_lo[] = {UBRK_WORD_NONE, UBRK_WORD_LETTER, UBRK_WORD_NONE, UBRK_WORD_LETTER, 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBRK_WORD_NONE, UBRK_WORD_NUMBER, UBRK_WORD_NONE, 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBRK_WORD_IDEO, UBRK_WORD_NONE}; 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t tag_hi[] = {UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBRK_WORD_NONE_LIMIT, UBRK_WORD_NUMBER_LIMIT, UBRK_WORD_NONE_LIMIT, 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBRK_WORD_IDEO_LIMIT, UBRK_WORD_NONE_LIMIT}; 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator *bi = BreakIterator::createWordInstance(Locale::getEnglish(), status); 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // First test that the breaks are in the right spots. 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doBoundaryTest(*bi, testString1, bounds1); 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Then go back and check tag values 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = 0; 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos, tag; 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (pos = bi->first(); pos != BreakIterator::DONE; pos = bi->next(), i++) { 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (pos != bounds1[i]) { 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: unexpected word break at postion %d", pos); 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tag = bi->getRuleStatus(); 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (tag < tag_lo[i] || tag >= tag_hi[i]) { 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("FAIL: incorrect tag value %d at position %d", tag, pos); 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Check that we get the same tag values from getRuleStatusVec() 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t vec[10]; 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int t = bi->getRuleStatusVec(vec, 10, status); 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(t==1); 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(vec[0] == tag); 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Now test line break status. This test mostly is to confirm that the status constants 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // are correctly declared in the header. 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testString1 = "test line. \n"; 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // break type s s h 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi = BreakIterator::createLineInstance(Locale::getEnglish(), status); 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "failed to create word break iterator. - %s", u_errorName(status)); 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i = 0; 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos, tag; 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool success; 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->current(); 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tag = bi->getRuleStatus(); 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (i=0; i<3; i++) { 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (i) { 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = pos==0 && tag==UBRK_LINE_SOFT; break; 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = pos==5 && tag==UBRK_LINE_SOFT; break; 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = pos==12 && tag==UBRK_LINE_HARD; break; 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org success = FALSE; break; 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (success == FALSE) { 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Fail: incorrect word break status or position. i=%d, pos=%d, tag=%d", 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i, pos, tag); 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tag = bi->getRuleStatus(); 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (UBRK_LINE_SOFT >= UBRK_LINE_SOFT_LIMIT || 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBRK_LINE_HARD >= UBRK_LINE_HARD_LIMIT || 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (UBRK_LINE_HARD > UBRK_LINE_SOFT && UBRK_LINE_HARD < UBRK_LINE_SOFT_LIMIT)) { 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("UBRK_LINE_* constants from header are inconsistent."); 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// TestRuleStatusVec 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Test the vector form of break rule status. 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestRuleStatusVec() { 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString rulesString( "[A-N]{100}; \n" 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[a-w]{200}; \n" 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\p{L}]{300}; \n" 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[\\p{N}]{400}; \n" 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "[0-5]{500}; \n" 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "!.*;\n", -1, US_INV); 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString1 = "Aapz5?"; 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t statusVals[10]; 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numStatuses; 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseError parseError; 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString, parseError, status); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status)); 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // A 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==1); 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 100); 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == 300); 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // a 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==2); 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 200); 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == 300); 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // p 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==3); 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 200); 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == 300); 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // z 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==4); 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 1); 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 300); 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 5 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==5); 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 400); 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == 500); 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ? 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==6); 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 1); 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 0); 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Check buffer overflow error handling. Char == A 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->first(); 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = bi->next(); 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(pos==1); 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(statusVals, -1, sizeof(statusVals)); 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 0, status); 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == -1); 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(statusVals, -1, sizeof(statusVals)); 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 1, status); 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 100); 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == -1); 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org memset(statusVals, -1, sizeof(statusVals)); 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numStatuses = bi->getRuleStatusVec(statusVals, 2, status); 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(numStatuses == 2); 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[0] == 100); 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[1] == 300); 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(statusVals[2] == -1); 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Bug 2190 Regression test. Builder crash on rule consisting of only a 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// $variable reference 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestBug2190() { 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString rulesString1 = "$aaa = abcd;\n" 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "$bbb = $aaa;\n" 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "$bbb;\n"; 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString testString1 = "abcdabcd"; 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 01234567890 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t bounds1[] = {0, 4, 8}; 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status=U_ZERO_ERROR; 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseError parseError; 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Fail : in construction - %s", u_errorName(status)); 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(testString1); 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org doBoundaryTest(*bi, testString1, bounds1); 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestRegistration() { 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_SERVICE 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* ja_word = BreakIterator::createWordInstance("ja_JP", status); 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ok to not delete these if we exit because of error? 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* ja_char = BreakIterator::createCharacterInstance("ja_JP", status); 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* root_word = BreakIterator::createWordInstance("", status); 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* root_char = BreakIterator::createCharacterInstance("", status); 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (status == U_MISSING_RESOURCE_ERROR || status == U_FILE_ACCESS_ERROR) { 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Error creating instances of break interactors - %s", u_errorName(status)); 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete ja_word; 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete ja_char; 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete root_word; 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete root_char; 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org URegistryKey key = BreakIterator::registerInstance(ja_word, "xx", UBRK_WORD, status); 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if 0 // With a dictionary based word breaking, ja_word is identical to root. 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (ja_word && *ja_word == *root_word) { 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("japan not different from root"); 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* result = BreakIterator::createWordInstance("xx_XX", status); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fail = TRUE; 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result){ 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fail = *result != *ja_word; 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete result; 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fail) { 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("bad result for xx_XX/word"); 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* result = BreakIterator::createCharacterInstance("ja_JP", status); 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fail = TRUE; 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result){ 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fail = *result != *ja_char; 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete result; 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fail) { 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("bad result for ja_JP/char"); 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* result = BreakIterator::createCharacterInstance("xx_XX", status); 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fail = TRUE; 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result){ 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fail = *result != *root_char; 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete result; 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fail) { 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("bad result for xx_XX/char"); 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringEnumeration* avail = BreakIterator::getAvailableLocales(); 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool found = FALSE; 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* p; 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((p = avail->snext(status))) { 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (p->compare("xx") == 0) { 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org found = TRUE; 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete avail; 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!found) { 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("did not find test locale"); 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool unreg = BreakIterator::unregister(key, status); 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!unreg) { 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("unable to unregister"); 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* result = BreakIterator::createWordInstance("en_US", status); 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org BreakIterator* root = BreakIterator::createWordInstance("", status); 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool fail = TRUE; 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(root){ 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fail = *root != *result; 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete root; 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete result; 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (fail) { 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("did not get root break"); 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org StringEnumeration* avail = BreakIterator::getAvailableLocales(); 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool found = FALSE; 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UnicodeString* p; 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while ((p = avail->snext(status))) { 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (p->compare("xx") == 0) { 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org found = TRUE; 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete avail; 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (found) { 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("found test locale"); 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count; 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool foundLocale = FALSE; 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const Locale *avail = BreakIterator::getAvailableLocales(count); 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int i=0; i<count; i++) { 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (avail[i] == Locale::getEnglish()) { 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org foundLocale = TRUE; 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (foundLocale == FALSE) { 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("BreakIterator::getAvailableLocales(&count), failed to find EN."); 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // ja_word was adopted by factory 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete ja_char; 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete root_word; 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete root_char; 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::RoundtripRule(const char *dataFile) { 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UParseError parseError; 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseError.line = 0; 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parseError.offset = 0; 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", dataFile, &status)); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t length; 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar *builtSource; 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const uint8_t *rbbiRules; 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const uint8_t *builtRules; 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errcheckln(status, "Can't open \"%s\" - %s", dataFile, u_errorName(status)); 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org builtRules = (const uint8_t *)udata_getMemory(data.getAlias()); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org builtSource = (const UChar *)(builtRules + ((RBBIDataHeader*)builtRules)->fRuleSource); 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *brkItr = new RuleBasedBreakIterator(builtSource, parseError, status); 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("createRuleBasedBreakIterator: ICU Error \"%s\" at line %d, column %d\n", 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(status), parseError.line, parseError.offset); 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rbbiRules = brkItr->getBinaryRules(length); 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln("Comparing \"%s\" len=%d", dataFile, length); 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (memcmp(builtRules, rbbiRules, (int32_t)length) != 0) { 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("Built rules and rebuilt rules are different %s", dataFile); 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete brkItr; 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestRoundtripRules() { 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("word"); 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("title"); 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("sent"); 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("line"); 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("char"); 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!quick) { 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RoundtripRule("word_POSIX"); 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Try out the RuleBasedBreakIterator constructors that take RBBIDataHeader* 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// (these are protected so we access them via a local class RBBIWithProtectedFunctions). 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// This is just a sanity check, not a thorough test (e.g. we don't check that the 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// first delete actually frees rulesCopy). 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestCreateFromRBBIData() { 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Get some handy RBBIData 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *brkName = "word"; // or "sent", "line", "char", etc. 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", brkName, &status)); 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const RBBIDataHeader * builtRules = (const RBBIDataHeader *)udata_getMemory(data.getAlias()); 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t length = builtRules->fLength; 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RBBIWithProtectedFunctions * brkItr; 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Try the memory-adopting constructor, need to copy the data first 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RBBIDataHeader * rulesCopy = (RBBIDataHeader *) uprv_malloc(length); 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( rulesCopy ) { 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_memcpy( rulesCopy, builtRules, length ); 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brkItr = new RBBIWithProtectedFunctions(rulesCopy, status); 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete brkItr; // this should free rulesCopy 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("create RuleBasedBreakIterator from RBBIData (adopted): ICU Error \"%s\"\n", u_errorName(status) ); 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR;// reset for the next test 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uprv_free( rulesCopy ); 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // Now try the non-adopting constructor 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org brkItr = new RBBIWithProtectedFunctions(builtRules, RBBIWithProtectedFunctions::kDontAdopt, status); 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete brkItr; // this should NOT attempt to free builtRules 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (builtRules->fLength != length) { // sanity check 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("create RuleBasedBreakIterator from RBBIData (non-adopted): delete affects data\n" ); 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln("create RuleBasedBreakIterator from RBBIData (non-adopted): ICU Error \"%s\"\n", u_errorName(status) ); 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // getBinaryRules() and RuleBasedBreakIterator(uint8_t binaryRules, ...) 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *rb = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), status); 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (rb == NULL || U_FAILURE(status)) { 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dataerrln("Unable to create BreakIterator::createWordInstance (Locale::getEnglish) - %s", u_errorName(status)); 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint32_t length; 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const uint8_t *rules = rb->getBinaryRules(length); 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *rb2 = new RuleBasedBreakIterator(rules, length, status); 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(*rb == *rb2); 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString words = "one two three "; 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org rb2->setText(words); 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int wordCounter = 0; 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org while (rb2->next() != UBRK_DONE) { 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org wordCounter++; 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(wordCounter == 6); 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *rb3 = new RuleBasedBreakIterator(rules, length-1, status); 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR); 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete rb; 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete rb2; 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete rb3; 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::TestRefreshInputText() { 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * RefreshInput changes out the input of a Break Iterator without 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * changing anything else in the iterator's state. Used with Java JNI, 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * when Java moves the underlying string storage. This test 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * runs BreakIterator::next() repeatedly, moving the text in the middle of the sequence. 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The right set of boundaries should still be found. 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar testStr[] = {0x20, 0x41, 0x20, 0x42, 0x20, 0x43, 0x20, 0x44, 0x0}; /* = " A B C D" */ 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar movedStr[] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0}; 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText ut1 = UTEXT_INITIALIZER; 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UText ut2 = UTEXT_INITIALIZER; 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getEnglish(), status); 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&ut1, testStr, -1, &status); 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_SUCCESS(status)) { 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org bi->setText(&ut1, status); 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Line boundaries will occur before each letter in the original string */ 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(1 == bi->next()); 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(3 == bi->next()); 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Move the string, kill the original string. */ 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_strcpy(movedStr, testStr); 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_memset(testStr, 0x20, u_strlen(testStr)); 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_openUChars(&ut2, movedStr, -1, &status); 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org RuleBasedBreakIterator *returnedBI = &bi->refreshInputText(&ut2, status); 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT_SUCCESS(status); 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(bi == returnedBI); 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Find the following matches, now working in the moved string. */ 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(5 == bi->next()); 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(7 == bi->next()); 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(8 == bi->next()); 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TEST_ASSERT(UBRK_DONE == bi->next()); 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&ut1); 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org utext_close(&ut2); 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org delete bi; 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// runIndexedTest 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (exec) logln((UnicodeString)"TestSuite RuleBasedBreakIterator API "); 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch (index) { 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org // case 0: name = "TestConstruction"; if (exec) TestConstruction(); break; 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FILE_IO 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: name = "TestCloneEquals"; if (exec) TestCloneEquals(); break; 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 1: name = "TestgetRules"; if (exec) TestgetRules(); break; 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 2: name = "TestHashCode"; if (exec) TestHashCode(); break; 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 3: name = "TestGetSetAdoptText"; if (exec) TestGetSetAdoptText(); break; 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 4: name = "TestIteration"; if (exec) TestIteration(); break; 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 0: case 1: case 2: case 3: case 4: name = "skip"; break; 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 5: name = "TestBuilder"; if (exec) TestBuilder(); break; 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 6: name = "TestQuoteGrouping"; if (exec) TestQuoteGrouping(); break; 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 7: name = "TestRuleStatusVec"; if (exec) TestRuleStatusVec(); break; 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 8: name = "TestBug2190"; if (exec) TestBug2190(); break; 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FILE_IO 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 9: name = "TestRegistration"; if (exec) TestRegistration(); break; 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 10: name = "TestBoilerPlate"; if (exec) TestBoilerPlate(); break; 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 11: name = "TestRuleStatus"; if (exec) TestRuleStatus(); break; 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 12: name = "TestRoundtripRules"; if (exec) TestRoundtripRules(); break; 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 13: name = "TestCreateFromRBBIData"; if (exec) TestCreateFromRBBIData(); break; 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 9: case 10: case 11: case 12: case 13: name = "skip"; break; 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case 14: name = "TestRefreshInputText"; if (exec) TestRefreshInputText(); break; 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: name = ""; break; // needed to end loop 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//Internal subroutines 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::doBoundaryTest(BreakIterator& bi, UnicodeString& text, int32_t *boundaries){ 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"testIsBoundary():"); 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t p = 0; 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool isB; 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (int32_t i = 0; i < text.length(); i++) { 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org isB = bi.isBoundary(i); 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln((UnicodeString)"bi.isBoundary(" + i + ") -> " + isB); 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (i == boundaries[p]) { 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!isB) 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected true, got false"); 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org p++; 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (isB) 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected false, got true"); 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid RBBIAPITest::doTest(UnicodeString& testString, int32_t start, int32_t gotoffset, int32_t expectedOffset, const char* expectedString){ 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString selected; 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString expected=CharsToUnicodeString(expectedString); 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(gotoffset != expectedOffset) 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln((UnicodeString)"ERROR:****returned #" + gotoffset + (UnicodeString)" instead of #" + expectedOffset); 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(start <= gotoffset){ 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testString.extractBetween(start, gotoffset, selected); 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else{ 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org testString.extractBetween(gotoffset, start, selected); 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(selected.compare(expected) != 0) 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errln(prettify((UnicodeString)"ERROR:****selected \"" + selected + "\" instead of \"" + expected + "\"")); 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org logln(prettify("****selected \"" + selected + "\"")); 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//RBBIWithProtectedFunctions class functions 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//--------------------------------------------- 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(RBBIDataHeader* data, UErrorCode &status) 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : RuleBasedBreakIterator(data, status) 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org : RuleBasedBreakIterator(data, RuleBasedBreakIterator::kDontAdopt, status) 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ 1273