1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1999-2011, International Business Machines 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date Name Description 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 12/14/99 Madhu Creation. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 01/12/2000 Madhu updated for changed API 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "intltest.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/rbbi.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/schriter.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "rbbiapts.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "rbbidata.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ubrkimpl.h" 22b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/locid.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utext.h" 25b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cmemory.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API Test the RuleBasedBreakIterator class 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) {\ 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status));}} 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define TEST_ASSERT(expr) {if ((expr) == FALSE) { \ 36b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Test Failure at file %s, line %d: \"%s\" is false.\n", __FILE__, __LINE__, #expr);};} 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestCloneEquals() 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* biequal = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString="Testing word break iterators's clone() and equals()"; 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText(testString); 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2->setText(testString); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru biequal->setText(testString); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi3->setText("hello"); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing equals()"); 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing == and !="); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool b = (*bi1 != *biequal); 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b |= *bi1 == *bi2; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b |= *bi1 == *bi3; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b) { 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 RBBI's == and != operator failed."); 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi2 == *biequal || *bi2 == *bi1 || *biequal == *bi3) 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 RBBI's == and != operator failed."); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Quick test of RulesBasedBreakIterator assignment - 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check that 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // two different iterators are != 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // they are == after assignment 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // source and dest iterator produce the same next() after assignment. 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // deleting one doesn't disable the other. 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing assignment"); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bix = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator biDefault, biDefault2; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL : in construction of default iterator"); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (biDefault == *bix) { 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: iterators should not compare =="); 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (biDefault != biDefault2) { 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: iterators should compare =="); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString HelloString("Hello Kitty"); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bix->setText(HelloString); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*bix == *bi2) { 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: strings should not be equal before assignment.")); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bix = *bi2; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*bix != *bi2) { 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: strings should be equal before assignment.")); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int bixnext = bix->next(); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int bi2next = bi2->next(); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (! (bixnext == bi2next && bixnext == 7)) { 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: iterators behaved differently after assignment.")); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bix; 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi2->next() != 8) { 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: iterator.next() failed after deleting copy.")); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing clone()"); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1clone=(RuleBasedBreakIterator*)bi1->clone(); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2clone=(RuleBasedBreakIterator*)bi2->clone(); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi1clone != *bi1 || *bi1clone != *biequal || 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi1clone == *bi3 || *bi1clone == *bi2) 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 RBBI's clone() method failed"); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi2clone == *bi1 || *bi2clone == *biequal || 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi2clone == *bi3 || *bi2clone != *bi2) 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 RBBI's clone() method failed"); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->getText() != bi1clone->getText() || 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2clone->getText() != bi2->getText() || 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi2clone == *bi1clone ) 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: RBBI's clone() method failed"); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1clone; 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2clone; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete biequal; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBoilerPlate() 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* a = BreakIterator::createWordInstance(Locale("hi"), status); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* b = BreakIterator::createWordInstance(Locale("hi_IN"),status); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Creation of break iterator failed %s", u_errorName(status)); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*a!=*b){ 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed: boilerplate method operator!= does not return correct results"); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* c = BreakIterator::createWordInstance(Locale("ja"),status); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(a && c){ 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*c==*a){ 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed: boilerplate method opertator== does not return correct results"); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("creation of break iterator failed"); 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete b; 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestgetRules() 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: in construction - %s", u_errorName(status)); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing toString()"); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText((UnicodeString)"Hello there"); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 =(RuleBasedBreakIterator*)bi1->clone(); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp=bi1->getRules(); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp2=bi2->getRules(); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp3=bi3->getRules(); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( temp2.compare(temp3) ==0 || temp.compare(temp2) == 0 || temp.compare(temp3) != 0) 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: error in getRules() method"); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestHashCode() 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing hashCode()"); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText((UnicodeString)"Hash code"); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2->setText((UnicodeString)"Hash code"); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi3->setText((UnicodeString)"Hash code"); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1clone= (RuleBasedBreakIterator*)bi1->clone(); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2clone= (RuleBasedBreakIterator*)bi2->clone(); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->hashCode() != bi1clone->hashCode() || bi1->hashCode() != bi3->hashCode() || 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1clone->hashCode() != bi3->hashCode() || bi2->hashCode() != bi2clone->hashCode()) 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: identical objects have different hashcodes"); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->hashCode() == bi2->hashCode() || bi2->hashCode() == bi3->hashCode() || 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1clone->hashCode() == bi2clone->hashCode() || bi1clone->hashCode() == bi2->hashCode()) 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: different objects have same hashcodes"); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1clone; 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2clone; 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestGetSetAdoptText() 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getText setText "); 24650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode status(*this, "TestGetSetAdoptText"); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str1="first string."; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str2="Second string."; 24950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> charIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status)); 25050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> wordIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status)); 25150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(status.isFailure()){ 25250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errcheckln(status, "Fail : in construction - %s", status.errorName()); 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text1= new StringCharacterIterator(str1); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text1Clone = text1->clone(); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text2= new StringCharacterIterator(str2); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text3= new StringCharacterIterator(str2, 3, 10, 3); // "ond str" 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->setText(str1); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator *tci = &wordIter1->getText(); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tstr; 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str1); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(wordIter1->current() != 0) 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 setText did not set the iteration position to the beginning of the text, it is" + wordIter1->current() + (UnicodeString)"\n"); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->next(2); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->setText(str2); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(wordIter1->current() != 0) 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 setText did not reset the iteration position to the beginning of the text, it is" + wordIter1->current() + (UnicodeString)"\n"); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru charIter1->adoptText(text1Clone); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(wordIter1->getText() != charIter1->getText()); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci = &wordIter1->getText(); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str2); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci = &charIter1->getText(); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str1); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> rb((RuleBasedBreakIterator*)wordIter1->clone()); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text1); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rb->getText() != *text1) 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 error in adoptText "); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text2); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rb->getText() != *text2) 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 error in adoptText "); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Adopt where iterator range is less than the entire orignal source string. 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (With the change of the break engine to working with UText internally, 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // CharacterIterators starting at positions other than zero are not supported) 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text3); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(rb->preceding(2) == 0); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(rb->following(11) == BreakIterator::DONE); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if(rb->preceding(2) != 3) { 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"ERROR:3 error in adoptText "); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if(rb->following(11) != BreakIterator::DONE) { 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"ERROR:4 error in adoptText "); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UText API 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Quick test to see if UText is working at all. 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *s1 = "\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64"; /* "hello world" in UTF-8 */ 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *s2 = "\x73\x65\x65\x20\x79\x61"; /* "see ya" in UTF-8 */ 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 012345678901 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 31750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer ut(utext_openUTF8(NULL, s1, -1, status)); 31850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->setText(ut.getAlias(), status); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->first(); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==5); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==11); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==UBRK_DONE); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 33450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer ut2(utext_openUTF8(NULL, s2, -1, status)); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 33650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->setText(ut2.getAlias(), status); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->first(); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->last(); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==UBRK_DONE); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString sEmpty; 35950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer gut2(utext_openUnicodeString(NULL, &sEmpty, status)); 36050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->getUText(gut2.getAlias(), status); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 36250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestIteration() 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test just verifies that the API is present. 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Testing for correct operation of the break rules happens elsewhere. 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Word break iterator. Status = %s", u_errorName(status)); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createLineInstance(Locale::getDefault(), status); 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Line break iterator. Status = %s", u_errorName(status)); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createSentenceInstance(Locale::getDefault(), status); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Sentence break iterator. Status = %s", u_errorName(status)); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createTitleInstance(Locale::getDefault(), status); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 4026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Title break iterator. Status = %s", u_errorName(status)); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 4096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; // Skip the rest of these tests. 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString="0123456789"; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString); 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->first(); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->first(). Expected 0, got %d.", i); 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->last(); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->last(). Expected 10, got %d", i); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Previous 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->previous(); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 9) { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->last() at line %d. Expected 9, got %d", __LINE__, i); 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->previous(); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected DONE, got %d", __LINE__, i); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // next() 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 1) { 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 1, got %d", __LINE__, i); 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected DONE, got %d", __LINE__, i); 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // current() 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->next(); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 1) { 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 1, got %d", __LINE__, i); 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->next(); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 10, got %d", __LINE__, i); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->previous(); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Following() 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(4); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 5) { 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected 5, got %d", __LINE__, i); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(9); 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected 10, got %d", __LINE__, i); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(10); 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected DONE, got %d", __LINE__, i); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Preceding 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(4); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 3) { 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 3, got %d", __LINE__, i); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(10); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 9) { 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 9, got %d", __LINE__, i); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(1); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 0, got %d", __LINE__, i); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(0); 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected DONE, got %d", __LINE__, i); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // isBoundary() 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi->isBoundary(3) != TRUE) { 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->isBoudary() at line %d. Expected TRUE, got FALSE", __LINE__, i); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 3) { 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->current() at line %d. Expected 3, got %d", __LINE__, i); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi->isBoundary(11) != FALSE) { 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->isBoudary() at line %d. Expected FALSE, got TRUE", __LINE__, i); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->current() at line %d. Expected 10, got %d", __LINE__, i); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // next(n) 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(4); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 4) { 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 4, got %d", __LINE__, i); 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(6); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 10, got %d", __LINE__, i); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(11); 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected BreakIterator::DONE, got %d", __LINE__, i); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBuilder() { 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "$Letters = [:L:];\n" 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Numbers = [:N:];\n" 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Letters+;\n" 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Numbers+;\n" 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[^$Letters $Numbers];\n" 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "!.*;\n"; 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "abc123..abc"; 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 3, 6, 7, 8, 11}; 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 5986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TestQuoteGrouping 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Single quotes within rules imply a grouping, so that a modifier 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following the quoted text (* or +) applies to all of the quoted chars. 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestQuoteGrouping() { 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "#Here comes the rule...\n" 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "'$@!'*;\n" // (\$\@\!)* 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".;\n"; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "$@!$@!X$@!!X"; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0123456789012 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 6, 7, 10, 11, 12}; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TestRuleStatus 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test word break rule status constants. 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRuleStatus() { 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar str[30]; 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape("plain word 123.45 \\u9160\\u9161 \\u30a1\\u30a2 \\u3041\\u3094", 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 012345678901234567 8 9 0 1 2 3 4 5 6 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Ideographic Katakana Hiragana 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, 30); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1(str); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 5, 6, 10, 11, 17, 18, 19, 20, 21, 23, 24, 25, 26}; 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tag_lo[] = {UBRK_WORD_NONE, UBRK_WORD_LETTER, UBRK_WORD_NONE, UBRK_WORD_LETTER, 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_NONE, UBRK_WORD_NUMBER, UBRK_WORD_NONE, 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_IDEO, UBRK_WORD_IDEO, UBRK_WORD_NONE, 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_KANA, UBRK_WORD_NONE, UBRK_WORD_KANA, UBRK_WORD_KANA}; 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tag_hi[] = {UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_NONE_LIMIT, UBRK_WORD_NUMBER_LIMIT, UBRK_WORD_NONE_LIMIT, 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_IDEO_LIMIT, UBRK_WORD_IDEO_LIMIT, UBRK_WORD_NONE_LIMIT, 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_KANA_LIMIT, UBRK_WORD_NONE_LIMIT, UBRK_WORD_KANA_LIMIT, UBRK_WORD_KANA_LIMIT}; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), status); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // First test that the breaks are in the right spots. 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Then go back and check tag values 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, tag; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (pos = bi->first(); pos != BreakIterator::DONE; pos = bi->next(), i++) { 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos != bounds1[i]) { 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: unexpected word break at postion %d", pos); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tag = bi->getRuleStatus(); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tag < tag_lo[i] || tag >= tag_hi[i]) { 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: incorrect tag value %d at position %d", tag, pos); 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check that we get the same tag values from getRuleStatusVec() 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t vec[10]; 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int t = bi->getRuleStatusVec(vec, 10, status); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(t==1); 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(vec[0] == tag); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Now test line break status. This test mostly is to confirm that the status constants 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // are correctly declared in the header. 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString1 = "test line. \n"; 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // break type s s h 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator *) 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator::createLineInstance(Locale::getEnglish(), status); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "failed to create word break iterator. - %s", u_errorName(status)); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, tag; 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool success; 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->current(); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tag = bi->getRuleStatus(); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<3; i++) { 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (i) { 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru success = pos==0 && tag==UBRK_LINE_SOFT; break; 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru success = pos==5 && tag==UBRK_LINE_SOFT; break; 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru success = pos==12 && tag==UBRK_LINE_HARD; break; 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru success = FALSE; break; 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (success == FALSE) { 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Fail: incorrect word break status or position. i=%d, pos=%d, tag=%d", 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i, pos, tag); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tag = bi->getRuleStatus(); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (UBRK_LINE_SOFT >= UBRK_LINE_SOFT_LIMIT || 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_LINE_HARD >= UBRK_LINE_HARD_LIMIT || 72727f654740f2a26ad62a5c155af9199af9e69b889claireho (UBRK_LINE_HARD > UBRK_LINE_SOFT && UBRK_LINE_HARD < UBRK_LINE_SOFT_LIMIT)) { 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("UBRK_LINE_* constants from header are inconsistent."); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TestRuleStatusVec 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test the vector form of break rule status. 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRuleStatusVec() { 741c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UnicodeString rulesString( "[A-N]{100}; \n" 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[a-w]{200}; \n" 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[\\p{L}]{300}; \n" 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[\\p{N}]{400}; \n" 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[0-5]{500}; \n" 746c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru "!.*;\n", -1, US_INV); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "Aapz5?"; 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t statusVals[10]; 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numStatuses; 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString, parseError, status); 7566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 7576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status)); 7586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // A 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==1); 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==2); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 200); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // p 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 200); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // z 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 1); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 300); 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 5 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==5); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 400); 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 500); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ? 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 1); 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 0); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check buffer overflow error handling. Char == A 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==1); 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 0, status); 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == -1); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 1, status); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == -1); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 2, status); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[2] == -1); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Bug 2190 Regression test. Builder crash on rule consisting of only a 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// $variable reference 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBug2190() { 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "$aaa = abcd;\n" 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$bbb = $aaa;\n" 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$bbb;\n"; 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "abcdabcd"; 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 4, 8}; 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 8616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRegistration() { 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* ja_word = BreakIterator::createWordInstance("ja_JP", status); 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ok to not delete these if we exit because of error? 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* ja_char = BreakIterator::createCharacterInstance("ja_JP", status); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* root_word = BreakIterator::createWordInstance("", status); 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* root_char = BreakIterator::createCharacterInstance("", status); 8796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 8806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_MISSING_RESOURCE_ERROR || status == U_FILE_ACCESS_ERROR) { 8816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Error creating instances of break interactors - %s", u_errorName(status)); 8826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete ja_word; 8836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete ja_char; 8846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete root_word; 8856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete root_char; 8866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 8876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 8886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru URegistryKey key = BreakIterator::registerInstance(ja_word, "xx", UBRK_WORD, status); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ja_word && *ja_word == *root_word) { 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("japan not different from root"); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createWordInstance("xx_XX", status); 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *ja_word; 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for xx_XX/word"); 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createCharacterInstance("ja_JP", status); 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *ja_char; 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for ja_JP/char"); 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createCharacterInstance("xx_XX", status); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *root_char; 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for xx_XX/char"); 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* avail = BreakIterator::getAvailableLocales(); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool found = FALSE; 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* p; 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((p = avail->snext(status))) { 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (p->compare("xx") == 0) { 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found = TRUE; 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete avail; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!found) { 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("did not find test locale"); 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool unreg = BreakIterator::unregister(key, status); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!unreg) { 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to unregister"); 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createWordInstance("en_US", status); 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* root = BreakIterator::createWordInstance("", status); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(root){ 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *root != *result; 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root; 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("did not get root break"); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* avail = BreakIterator::getAvailableLocales(); 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool found = FALSE; 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* p; 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((p = avail->snext(status))) { 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (p->compare("xx") == 0) { 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found = TRUE; 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete avail; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (found) { 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("found test locale"); 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count; 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool foundLocale = FALSE; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale *avail = BreakIterator::getAvailableLocales(count); 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i=0; i<count; i++) { 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (avail[i] == Locale::getEnglish()) { 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foundLocale = TRUE; 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (foundLocale == FALSE) { 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("BreakIterator::getAvailableLocales(&count), failed to find EN."); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ja_word was adopted by factory 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ja_char; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root_word; 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root_char; 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::RoundtripRule(const char *dataFile) { 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseError.line = 0; 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseError.offset = 0; 101450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", dataFile, &status)); 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t length; 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *builtSource; 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *rbbiRules; 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *builtRules; 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 10216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Can't open \"%s\" - %s", dataFile, u_errorName(status)); 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho builtRules = (const uint8_t *)udata_getMemory(data.getAlias()); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru builtSource = (const UChar *)(builtRules + ((RBBIDataHeader*)builtRules)->fRuleSource); 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *brkItr = new RuleBasedBreakIterator(builtSource, parseError, status); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("createRuleBasedBreakIterator: ICU Error \"%s\" at line %d, column %d\n", 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status), parseError.line, parseError.offset); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rbbiRules = brkItr->getBinaryRules(length); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Comparing \"%s\" len=%d", dataFile, length); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (memcmp(builtRules, rbbiRules, (int32_t)length) != 0) { 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Built rules and rebuilt rules are different %s", dataFile); 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete brkItr; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRoundtripRules() { 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("word"); 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("title"); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("sent"); 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("line"); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("char"); 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!quick) { 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("word_ja"); 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("word_POSIX"); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Try out the RuleBasedBreakIterator constructors that take RBBIDataHeader* 1055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// (these are protected so we access them via a local class RBBIWithProtectedFunctions). 1056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// This is just a sanity check, not a thorough test (e.g. we don't check that the 1057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// first delete actually frees rulesCopy). 1058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid RBBIAPITest::TestCreateFromRBBIData() { 1059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Get some handy RBBIData 1060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *brkName = "word"; // or "sent", "line", "char", etc. 1061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 106250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", brkName, &status)); 1063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 106450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const RBBIDataHeader * builtRules = (const RBBIDataHeader *)udata_getMemory(data.getAlias()); 1065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint32_t length = builtRules->fLength; 1066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RBBIWithProtectedFunctions * brkItr; 1067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Try the memory-adopting constructor, need to copy the data first 1069b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RBBIDataHeader * rulesCopy = (RBBIDataHeader *) uprv_malloc(length); 1070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( rulesCopy ) { 1071b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uprv_memcpy( rulesCopy, builtRules, length ); 1072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru brkItr = new RBBIWithProtectedFunctions(rulesCopy, status); 1074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete brkItr; // this should free rulesCopy 1076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (adopted): ICU Error \"%s\"\n", u_errorName(status) ); 1078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR;// reset for the next test 1079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uprv_free( rulesCopy ); 1080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Now try the non-adopting constructor 1084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru brkItr = new RBBIWithProtectedFunctions(builtRules, RBBIWithProtectedFunctions::kDontAdopt, status); 1085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete brkItr; // this should NOT attempt to free builtRules 1087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (builtRules->fLength != length) { // sanity check 1088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (non-adopted): delete affects data\n" ); 1089b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (non-adopted): ICU Error \"%s\"\n", u_errorName(status) ); 1092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1094b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1095b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // getBinaryRules() and RuleBasedBreakIterator(uint8_t binaryRules, ...) 1096b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 1097b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1098b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), status); 1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (rb == NULL || U_FAILURE(status)) { 1100b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create BreakIterator::createWordInstance (Locale::getEnglish) - %s", u_errorName(status)); 1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t length; 1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const uint8_t *rules = rb->getBinaryRules(length); 1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb2 = new RuleBasedBreakIterator(rules, length, status); 1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT_SUCCESS(status); 1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(*rb == *rb2); 1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString words = "one two three "; 1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho rb2->setText(words); 1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int wordCounter = 0; 1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (rb2->next() != UBRK_DONE) { 1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho wordCounter++; 1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(wordCounter == 6); 1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb3 = new RuleBasedBreakIterator(rules, length-1, status); 1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR); 1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb; 1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb2; 1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb3; 1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// runIndexedTest 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln((UnicodeString)"TestSuite RuleBasedBreakIterator API "); 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // case 0: name = "TestConstruction"; if (exec) TestConstruction(); break; 113450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "TestCloneEquals"; if (exec) TestCloneEquals(); break; 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "TestgetRules"; if (exec) TestgetRules(); break; 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: name = "TestHashCode"; if (exec) TestHashCode(); break; 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: name = "TestGetSetAdoptText"; if (exec) TestGetSetAdoptText(); break; 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: name = "TestIteration"; if (exec) TestIteration(); break; 114050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 114150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 0: case 1: case 2: case 3: case 4: name = "skip"; break; 114250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: name = "TestBuilder"; if (exec) TestBuilder(); break; 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: name = "TestQuoteGrouping"; if (exec) TestQuoteGrouping(); break; 114550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 7: name = "TestRuleStatusVec"; if (exec) TestRuleStatusVec(); break; 114650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 8: name = "TestBug2190"; if (exec) TestBug2190(); break; 114750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 114850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 9: name = "TestRegistration"; if (exec) TestRegistration(); break; 114950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 10: name = "TestBoilerPlate"; if (exec) TestBoilerPlate(); break; 115050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 11: name = "TestRuleStatus"; if (exec) TestRuleStatus(); break; 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: name = "TestRoundtripRules"; if (exec) TestRoundtripRules(); break; 1152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 13: name = "TestCreateFromRBBIData"; if (exec) TestCreateFromRBBIData(); break; 115350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 115450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 9: case 10: case 11: case 12: case 13: name = "skip"; break; 115550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; // needed to end loop 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//Internal subroutines 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::doBoundaryTest(RuleBasedBreakIterator& bi, UnicodeString& text, int32_t *boundaries){ 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"testIsBoundary():"); 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t p = 0; 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isB; 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < text.length(); i++) { 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isB = bi.isBoundary(i); 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"bi.isBoundary(" + i + ") -> " + isB); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == boundaries[p]) { 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!isB) 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected true, got false"); 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p++; 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isB) 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected false, got true"); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::doTest(UnicodeString& testString, int32_t start, int32_t gotoffset, int32_t expectedOffset, const char* expectedString){ 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString selected; 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected=CharsToUnicodeString(expectedString); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(gotoffset != expectedOffset) 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:****returned #" + gotoffset + (UnicodeString)" instead of #" + expectedOffset); 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(start <= gotoffset){ 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString.extractBetween(start, gotoffset, selected); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString.extractBetween(gotoffset, start, selected); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(selected.compare(expected) != 0) 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(prettify((UnicodeString)"ERROR:****selected \"" + selected + "\" instead of \"" + expected + "\"")); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(prettify("****selected \"" + selected + "\"")); 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1202b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//--------------------------------------------- 1203b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//RBBIWithProtectedFunctions class functions 1204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//--------------------------------------------- 1205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(RBBIDataHeader* data, UErrorCode &status) 1207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru : RuleBasedBreakIterator(data, status) 1208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 1209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) 1212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru : RuleBasedBreakIterator(data, RuleBasedBreakIterator::kDontAdopt, status) 1213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 1214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ 1217