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