1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1999-2014, International Business Machines 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date Name Description 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 12/14/99 Madhu Creation. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 01/12/2000 Madhu updated for changed API 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "intltest.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/rbbi.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/schriter.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "rbbiapts.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "rbbidata.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ubrkimpl.h" 22b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#include "unicode/locid.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utext.h" 25b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "cmemory.h" 26fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING 27fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include "unicode/filteredbrk.h" 28fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include <stdio.h> // for sprintf 29fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API Test the RuleBasedBreakIterator class 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TEST_ASSERT_SUCCESS(status) {if (U_FAILURE(status)) {\ 36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusdataerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status));}} 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho#define TEST_ASSERT(expr) {if ((expr) == FALSE) { \ 39b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Test Failure at file %s, line %d: \"%s\" is false.\n", __FILE__, __LINE__, #expr);};} 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestCloneEquals() 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* biequal = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString="Testing word break iterators's clone() and equals()"; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText(testString); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2->setText(testString); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru biequal->setText(testString); 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi3->setText("hello"); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing equals()"); 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing == and !="); 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool b = (*bi1 != *biequal); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b |= *bi1 == *bi2; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru b |= *bi1 == *bi3; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (b) { 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 RBBI's == and != operator failed."); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi2 == *biequal || *bi2 == *bi1 || *biequal == *bi3) 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 RBBI's == and != operator failed."); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Quick test of RulesBasedBreakIterator assignment - 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check that 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // two different iterators are != 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // they are == after assignment 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // source and dest iterator produce the same next() after assignment. 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // deleting one doesn't disable the other. 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing assignment"); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bix = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getDefault(), status); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator biDefault, biDefault2; 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL : in construction of default iterator"); 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (biDefault == *bix) { 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: iterators should not compare =="); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (biDefault != biDefault2) { 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: iterators should compare =="); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString HelloString("Hello Kitty"); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bix->setText(HelloString); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*bix == *bi2) { 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: strings should not be equal before assignment.")); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bix = *bi2; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*bix != *bi2) { 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: strings should be equal before assignment.")); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int bixnext = bix->next(); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int bi2next = bi2->next(); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (! (bixnext == bi2next && bixnext == 7)) { 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: iterators behaved differently after assignment.")); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bix; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi2->next() != 8) { 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(UnicodeString("ERROR: iterator.next() failed after deleting copy.")); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing clone()"); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1clone=(RuleBasedBreakIterator*)bi1->clone(); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2clone=(RuleBasedBreakIterator*)bi2->clone(); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi1clone != *bi1 || *bi1clone != *biequal || 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi1clone == *bi3 || *bi1clone == *bi2) 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 RBBI's clone() method failed"); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*bi2clone == *bi1 || *bi2clone == *biequal || 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi2clone == *bi3 || *bi2clone != *bi2) 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 RBBI's clone() method failed"); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->getText() != bi1clone->getText() || 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2clone->getText() != bi2->getText() || 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *bi2clone == *bi1clone ) 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: RBBI's clone() method failed"); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1clone; 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2clone; 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete biequal; 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBoilerPlate() 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* a = BreakIterator::createWordInstance(Locale("hi"), status); 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* b = BreakIterator::createWordInstance(Locale("hi_IN"),status); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Creation of break iterator failed %s", u_errorName(status)); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(*a!=*b){ 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed: boilerplate method operator!= does not return correct results"); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 16354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // Japanese word break iterators are identical to root with 16454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // a dictionary-based break iterator 16554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius BreakIterator* c = BreakIterator::createCharacterInstance(Locale("ja"),status); 16654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius BreakIterator* d = BreakIterator::createCharacterInstance(Locale("root"),status); 16754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(c && d){ 16854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(*c!=*d){ 16954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius errln("Failed: boilerplate method operator== does not return correct results"); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }else{ 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("creation of break iterator failed"); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete b; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete c; 17754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius delete d; 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestgetRules() 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2=(RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: in construction - %s", u_errorName(status)); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing toString()"); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText((UnicodeString)"Hello there"); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 =(RuleBasedBreakIterator*)bi1->clone(); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp=bi1->getRules(); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp2=bi2->getRules(); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp3=bi3->getRules(); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( temp2.compare(temp3) ==0 || temp.compare(temp2) == 0 || temp.compare(temp3) != 0) 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: error in getRules() method"); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestHashCode() 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi3 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2 = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 2186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing hashCode()"); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1->setText((UnicodeString)"Hash code"); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi2->setText((UnicodeString)"Hash code"); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi3->setText((UnicodeString)"Hash code"); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi1clone= (RuleBasedBreakIterator*)bi1->clone(); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi2clone= (RuleBasedBreakIterator*)bi2->clone(); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->hashCode() != bi1clone->hashCode() || bi1->hashCode() != bi3->hashCode() || 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1clone->hashCode() != bi3->hashCode() || bi2->hashCode() != bi2clone->hashCode()) 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: identical objects have different hashcodes"); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(bi1->hashCode() == bi2->hashCode() || bi2->hashCode() == bi3->hashCode() || 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi1clone->hashCode() == bi2clone->hashCode() || bi1clone->hashCode() == bi2->hashCode()) 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR: different objects have same hashcodes"); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1clone; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2clone; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi1; 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi2; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi3; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestGetSetAdoptText() 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"Testing getText setText "); 25350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IcuTestErrorCode status(*this, "TestGetSetAdoptText"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str1="first string."; 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str2="Second string."; 25650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> charIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status)); 25750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> wordIter1((RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status)); 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(status.isFailure()){ 25950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errcheckln(status, "Fail : in construction - %s", status.errorName()); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text1= new StringCharacterIterator(str1); 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text1Clone = text1->clone(); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text2= new StringCharacterIterator(str2); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator* text3= new StringCharacterIterator(str2, 3, 10, 3); // "ond str" 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->setText(str1); 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CharacterIterator *tci = &wordIter1->getText(); 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString tstr; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str1); 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(wordIter1->current() != 0) 275b13da9df870a61b11249bf741347908dbea0edd8Jean-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"); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->next(2); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru wordIter1->setText(str2); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(wordIter1->current() != 0) 281b13da9df870a61b11249bf741347908dbea0edd8Jean-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"); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru charIter1->adoptText(text1Clone); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(wordIter1->getText() != charIter1->getText()); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci = &wordIter1->getText(); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str2); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci = &charIter1->getText(); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tci->getText(tstr); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(tstr == str1); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 29450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<RuleBasedBreakIterator> rb((RuleBasedBreakIterator*)wordIter1->clone()); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text1); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rb->getText() != *text1) 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:1 error in adoptText "); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text2); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rb->getText() != *text2) 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:2 error in adoptText "); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Adopt where iterator range is less than the entire orignal source string. 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // (With the change of the break engine to working with UText internally, 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // CharacterIterators starting at positions other than zero are not supported) 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rb->adoptText(text3); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(rb->preceding(2) == 0); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(rb->following(11) == BreakIterator::DONE); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if(rb->preceding(2) != 3) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"ERROR:3 error in adoptText "); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //if(rb->following(11) != BreakIterator::DONE) { 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // errln((UnicodeString)"ERROR:4 error in adoptText "); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //} 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UText API 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Quick test to see if UText is working at all. 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *s1 = "\x68\x65\x6C\x6C\x6F\x20\x77\x6F\x72\x6C\x64"; /* "hello world" in UTF-8 */ 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *s2 = "\x73\x65\x65\x20\x79\x61"; /* "see ya" in UTF-8 */ 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 012345678901 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer ut(utext_openUTF8(NULL, s1, -1, status)); 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->setText(ut.getAlias(), status); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->first(); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==5); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==11); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==UBRK_DONE); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 34150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer ut2(utext_openUTF8(NULL, s2, -1, status)); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 34350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->setText(ut2.getAlias(), status); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->first(); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->next(); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->last(); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==0); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = wordIter1->previous(); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==UBRK_DONE); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString sEmpty; 36650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUTextPointer gut2(utext_openUnicodeString(NULL, &sEmpty, status)); 36750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho wordIter1->getUText(gut2.getAlias(), status); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 36950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho status.reset(); 37050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestIteration() 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // This test just verifies that the API is present. 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Testing for correct operation of the break rules happens elsewhere. 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator* bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createWordInstance(Locale::getDefault(), status); 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Word break iterator. Status = %s", u_errorName(status)); 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createLineInstance(Locale::getDefault(), status); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 3956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Line break iterator. Status = %s", u_errorName(status)); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createSentenceInstance(Locale::getDefault(), status); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 4026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Sentence break iterator. Status = %s", u_errorName(status)); 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createTitleInstance(Locale::getDefault(), status); 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 4096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating Title break iterator. Status = %s", u_errorName(status)); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi = (RuleBasedBreakIterator*)RuleBasedBreakIterator::createCharacterInstance(Locale::getDefault(), status); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || bi == NULL) { 4166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Failure creating character break iterator. Status = %s", u_errorName(status)); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; // Skip the rest of these tests. 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString="0123456789"; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString); 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->first(); 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->first(). Expected 0, got %d.", i); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->last(); 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->last(). Expected 10, got %d", i); 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Previous 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->previous(); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 9) { 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->last() at line %d. Expected 9, got %d", __LINE__, i); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->previous(); 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected DONE, got %d", __LINE__, i); 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // next() 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(); 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 1) { 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 1, got %d", __LINE__, i); 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected DONE, got %d", __LINE__, i); 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // current() 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->next(); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 1) { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 1, got %d", __LINE__, i); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->last(); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->next(); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 10, got %d", __LINE__, i); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->previous(); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->previous() at line %d. Expected 0, got %d", __LINE__, i); 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Following() 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(4); 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 5) { 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected 5, got %d", __LINE__, i); 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(9); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected 10, got %d", __LINE__, i); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->following(10); 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->following() at line %d. Expected DONE, got %d", __LINE__, i); 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Preceding 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(4); 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 3) { 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 3, got %d", __LINE__, i); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(10); 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 9) { 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 9, got %d", __LINE__, i); 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(1); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 0) { 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected 0, got %d", __LINE__, i); 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->preceding(0); 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->preceding() at line %d. Expected DONE, got %d", __LINE__, i); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // isBoundary() 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi->isBoundary(3) != TRUE) { 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->isBoudary() at line %d. Expected TRUE, got FALSE", __LINE__, i); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 3) { 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->current() at line %d. Expected 3, got %d", __LINE__, i); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (bi->isBoundary(11) != FALSE) { 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->isBoudary() at line %d. Expected FALSE, got TRUE", __LINE__, i); 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->current(); 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->current() at line %d. Expected 10, got %d", __LINE__, i); 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // next(n) 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(4); 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 4) { 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 4, got %d", __LINE__, i); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(6); 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != 10) { 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected 10, got %d", __LINE__, i); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = bi->next(11); 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i != BreakIterator::DONE) { 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Incorrect value from bi->next() at line %d. Expected BreakIterator::DONE, got %d", __LINE__, i); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBuilder() { 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "$Letters = [:L:];\n" 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Numbers = [:N:];\n" 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Letters+;\n" 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$Numbers+;\n" 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "[^$Letters $Numbers];\n" 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "!.*;\n"; 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "abc123..abc"; 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 3, 6, 7, 8, 11}; 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TestQuoteGrouping 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Single quotes within rules imply a grouping, so that a modifier 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// following the quoted text (* or +) applies to all of the quoted chars. 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestQuoteGrouping() { 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "#Here comes the rule...\n" 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "'$@!'*;\n" // (\$\@\!)* 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ".;\n"; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "$@!$@!X$@!!X"; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 0123456789012 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 6, 7, 10, 11, 12}; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TestRuleStatus 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Test word break rule status constants. 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRuleStatus() { 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar str[30]; 64654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius //no longer test Han or hiragana breaking here: ruleStatusVec would return nothing 64754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // changed UBRK_WORD_KANA to UBRK_WORD_IDEO 64854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_unescape("plain word 123.45 \\u30a1\\u30a2 ", 649fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // 012345678901234567 8 9 0 650fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // Katakana 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str, 30); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1(str); 65354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t bounds1[] = {0, 5, 6, 10, 11, 17, 18, 20, 21}; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tag_lo[] = {UBRK_WORD_NONE, UBRK_WORD_LETTER, UBRK_WORD_NONE, UBRK_WORD_LETTER, 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_NONE, UBRK_WORD_NUMBER, UBRK_WORD_NONE, 65654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBRK_WORD_IDEO, UBRK_WORD_NONE}; 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t tag_hi[] = {UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, UBRK_WORD_NONE_LIMIT, UBRK_WORD_LETTER_LIMIT, 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBRK_WORD_NONE_LIMIT, UBRK_WORD_NUMBER_LIMIT, UBRK_WORD_NONE_LIMIT, 66054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBRK_WORD_IDEO_LIMIT, UBRK_WORD_NONE_LIMIT}; 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66459d709d503bab6e2b61931737e662dd293b40578ccornelius BreakIterator *bi = BreakIterator::createWordInstance(Locale::getEnglish(), status); 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 6666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Fail : in construction - %s", u_errorName(status)); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // First test that the breaks are in the right spots. 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Then go back and check tag values 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = 0; 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos, tag; 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (pos = bi->first(); pos != BreakIterator::DONE; pos = bi->next(), i++) { 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pos != bounds1[i]) { 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: unexpected word break at postion %d", pos); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tag = bi->getRuleStatus(); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tag < tag_lo[i] || tag >= tag_hi[i]) { 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: incorrect tag value %d at position %d", tag, pos); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check that we get the same tag values from getRuleStatusVec() 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t vec[10]; 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int t = bi->getRuleStatusVec(vec, 10, status); 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(t==1); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(vec[0] == tag); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Now test line break status. This test mostly is to confirm that the status constants 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // are correctly declared in the header. 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString1 = "test line. \n"; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // break type s s h 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70159d709d503bab6e2b61931737e662dd293b40578ccornelius bi = BreakIterator::createLineInstance(Locale::getEnglish(), status); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 7036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "failed to create word break iterator. - %s", u_errorName(status)); 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 || 73327f654740f2a26ad62a5c155af9199af9e69b889claireho (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); 7626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 7636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Failure at file %s, line %d, error = %s", __FILE__, __LINE__, u_errorName(status)); 7646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // A 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==1); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // a 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==2); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 200); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // p 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==3); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 200); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // z 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==4); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 1); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 300); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 5 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==5); 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 400); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 500); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ? 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==6); 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 10, status); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 1); 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 0); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Check buffer overflow error handling. Char == A 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->first(); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = bi->next(); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(pos==1); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 0, status); 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == -1); 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 1, status); 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(status == U_BUFFER_OVERFLOW_ERROR); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == -1); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru memset(statusVals, -1, sizeof(statusVals)); 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numStatuses = bi->getRuleStatusVec(statusVals, 2, status); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT_SUCCESS(status); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(numStatuses == 2); 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[0] == 100); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[1] == 300); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TEST_ASSERT(statusVals[2] == -1); 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Bug 2190 Regression test. Builder crash on rule consisting of only a 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// $variable reference 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestBug2190() { 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rulesString1 = "$aaa = abcd;\n" 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$bbb = $aaa;\n" 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru "$bbb;\n"; 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testString1 = "abcdabcd"; 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // 01234567890 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bounds1[] = {0, 4, 8}; 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *bi = new RuleBasedBreakIterator(rulesString1, parseError, status); 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 8676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Fail : in construction - %s", u_errorName(status)); 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bi->setText(testString1); 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru doBoundaryTest(*bi, testString1, bounds1); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete bi; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRegistration() { 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* ja_word = BreakIterator::createWordInstance("ja_JP", status); 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); 884fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (status == U_MISSING_RESOURCE_ERROR || status == U_FILE_ACCESS_ERROR) { 8866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("Error creating instances of break interactors - %s", u_errorName(status)); 88754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 8886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete ja_word; 8896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete ja_char; 8906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete root_word; 8916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru delete root_char; 892fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 8936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 8946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru URegistryKey key = BreakIterator::registerInstance(ja_word, "xx", UBRK_WORD, status); 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 89854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#if 0 // With a dictionary based word breaking, ja_word is identical to root. 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ja_word && *ja_word == *root_word) { 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("japan not different from root"); 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 90254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius#endif 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createWordInstance("xx_XX", status); 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *ja_word; 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for xx_XX/word"); 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createCharacterInstance("ja_JP", status); 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *ja_char; 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for ja_JP/char"); 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createCharacterInstance("xx_XX", status); 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result){ 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *result != *root_char; 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("bad result for xx_XX/char"); 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* avail = BreakIterator::getAvailableLocales(); 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool found = FALSE; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* p; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((p = avail->snext(status))) { 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (p->compare("xx") == 0) { 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found = TRUE; 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete avail; 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!found) { 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("did not find test locale"); 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool unreg = BreakIterator::unregister(key, status); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!unreg) { 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unable to unregister"); 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* result = BreakIterator::createWordInstance("en_US", status); 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator* root = BreakIterator::createWordInstance("", status); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fail = TRUE; 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(root){ 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fail = *root != *result; 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root; 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fail) { 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("did not get root break"); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* avail = BreakIterator::getAvailableLocales(); 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool found = FALSE; 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* p; 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while ((p = avail->snext(status))) { 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (p->compare("xx") == 0) { 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru found = TRUE; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete avail; 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (found) { 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("found test locale"); 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool foundLocale = FALSE; 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale *avail = BreakIterator::getAvailableLocales(count); 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int i=0; i<count; i++) { 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (avail[i] == Locale::getEnglish()) { 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru foundLocale = TRUE; 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (foundLocale == FALSE) { 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("BreakIterator::getAvailableLocales(&count), failed to find EN."); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ja_word was adopted by factory 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete ja_char; 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root_word; 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete root_char; 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::RoundtripRule(const char *dataFile) { 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UParseError parseError; 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseError.line = 0; 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parseError.offset = 0; 102250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", dataFile, &status)); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t length; 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UChar *builtSource; 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *rbbiRules; 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint8_t *builtRules; 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 10296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "Can't open \"%s\" - %s", dataFile, u_errorName(status)); 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho builtRules = (const uint8_t *)udata_getMemory(data.getAlias()); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru builtSource = (const UChar *)(builtRules + ((RBBIDataHeader*)builtRules)->fRuleSource); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedBreakIterator *brkItr = new RuleBasedBreakIterator(builtSource, parseError, status); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("createRuleBasedBreakIterator: ICU Error \"%s\" at line %d, column %d\n", 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status), parseError.line, parseError.offset); 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rbbiRules = brkItr->getBinaryRules(length); 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Comparing \"%s\" len=%d", dataFile, length); 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (memcmp(builtRules, rbbiRules, (int32_t)length) != 0) { 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Built rules and rebuilt rules are different %s", dataFile); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete brkItr; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::TestRoundtripRules() { 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("word"); 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("title"); 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("sent"); 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("line"); 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("char"); 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!quick) { 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RoundtripRule("word_POSIX"); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// Try out the RuleBasedBreakIterator constructors that take RBBIDataHeader* 1062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// (these are protected so we access them via a local class RBBIWithProtectedFunctions). 1063fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius// This is just a sanity check, not a thorough test (e.g. we don't check that the 1064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru// first delete actually frees rulesCopy). 1065b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruvoid RBBIAPITest::TestCreateFromRBBIData() { 1066b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Get some handy RBBIData 1067b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *brkName = "word"; // or "sent", "line", "char", etc. 1068b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 106950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUDataMemoryPointer data(udata_open(U_ICUDATA_BRKITR, "brk", brkName, &status)); 1070b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 107150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const RBBIDataHeader * builtRules = (const RBBIDataHeader *)udata_getMemory(data.getAlias()); 1072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uint32_t length = builtRules->fLength; 1073b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RBBIWithProtectedFunctions * brkItr; 1074b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1075b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Try the memory-adopting constructor, need to copy the data first 1076b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru RBBIDataHeader * rulesCopy = (RBBIDataHeader *) uprv_malloc(length); 1077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( rulesCopy ) { 1078b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uprv_memcpy( rulesCopy, builtRules, length ); 1079b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1080b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru brkItr = new RBBIWithProtectedFunctions(rulesCopy, status); 1081b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1082b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete brkItr; // this should free rulesCopy 1083b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1084b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (adopted): ICU Error \"%s\"\n", u_errorName(status) ); 1085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR;// reset for the next test 1086b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uprv_free( rulesCopy ); 1087b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1088b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1089fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1090b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // Now try the non-adopting constructor 1091b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru brkItr = new RBBIWithProtectedFunctions(builtRules, RBBIWithProtectedFunctions::kDontAdopt, status); 1092b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru delete brkItr; // this should NOT attempt to free builtRules 1094b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (builtRules->fLength != length) { // sanity check 1095b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (non-adopted): delete affects data\n" ); 1096b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1097b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("create RuleBasedBreakIterator from RBBIData (non-adopted): ICU Error \"%s\"\n", u_errorName(status) ); 1099b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1100b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1101b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1102b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // getBinaryRules() and RuleBasedBreakIterator(uint8_t binaryRules, ...) 1103b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // 1104b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb = (RuleBasedBreakIterator *)BreakIterator::createWordInstance(Locale::getEnglish(), status); 1106b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (rb == NULL || U_FAILURE(status)) { 1107b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho dataerrln("Unable to create BreakIterator::createWordInstance (Locale::getEnglish) - %s", u_errorName(status)); 1108b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1109b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uint32_t length; 1110b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const uint8_t *rules = rb->getBinaryRules(length); 1111b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb2 = new RuleBasedBreakIterator(rules, length, status); 1112b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT_SUCCESS(status); 1113b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(*rb == *rb2); 1114b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString words = "one two three "; 1115b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho rb2->setText(words); 1116b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int wordCounter = 0; 1117b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (rb2->next() != UBRK_DONE) { 1118b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho wordCounter++; 1119b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1120b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(wordCounter == 6); 1121b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1122b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho status = U_ZERO_ERROR; 1123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho RuleBasedBreakIterator *rb3 = new RuleBasedBreakIterator(rules, length-1, status); 1124b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho TEST_ASSERT(status == U_ILLEGAL_ARGUMENT_ERROR); 1125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1126b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb; 1127b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb2; 1128b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete rb3; 1129b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 11324fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes 11334fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughesvoid RBBIAPITest::TestRefreshInputText() { 11344fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes /* 11354fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes * RefreshInput changes out the input of a Break Iterator without 11364fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes * changing anything else in the iterator's state. Used with Java JNI, 11374fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes * when Java moves the underlying string storage. This test 11384fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes * runs BreakIterator::next() repeatedly, moving the text in the middle of the sequence. 11394fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes * The right set of boundaries should still be found. 11404fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes */ 11414fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes UChar testStr[] = {0x20, 0x41, 0x20, 0x42, 0x20, 0x43, 0x20, 0x44, 0x0}; /* = " A B C D" */ 11424fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes UChar movedStr[] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0}; 11434fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes UErrorCode status = U_ZERO_ERROR; 11444fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes UText ut1 = UTEXT_INITIALIZER; 11454fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes UText ut2 = UTEXT_INITIALIZER; 11464fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)BreakIterator::createLineInstance(Locale::getEnglish(), status); 11474fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes TEST_ASSERT_SUCCESS(status); 11484fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes 11494fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes utext_openUChars(&ut1, testStr, -1, &status); 11504fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes TEST_ASSERT_SUCCESS(status); 11514fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes 1152103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_SUCCESS(status)) { 1153103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius bi->setText(&ut1, status); 1154103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT_SUCCESS(status); 1155103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1156103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Line boundaries will occur before each letter in the original string */ 1157103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(1 == bi->next()); 1158103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(3 == bi->next()); 1159103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1160103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Move the string, kill the original string. */ 1161103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_strcpy(movedStr, testStr); 1162103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_memset(testStr, 0x20, u_strlen(testStr)); 1163103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius utext_openUChars(&ut2, movedStr, -1, &status); 1164103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT_SUCCESS(status); 1165103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius RuleBasedBreakIterator *returnedBI = &bi->refreshInputText(&ut2, status); 1166103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT_SUCCESS(status); 1167103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(bi == returnedBI); 1168103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1169103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Find the following matches, now working in the moved string. */ 1170103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(5 == bi->next()); 1171103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(7 == bi->next()); 1172103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(8 == bi->next()); 1173103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TEST_ASSERT(UBRK_DONE == bi->next()); 1174fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1175103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius utext_close(&ut1); 1176103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius utext_close(&ut2); 1177103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1178103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius delete bi; 1179103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 11804fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes} 11814fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes 1182fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING 1183fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic void prtbrks(BreakIterator* brk, const UnicodeString &ustr, IntlTest &it) { 1184fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius static const UChar PILCROW=0x00B6, CHSTR=0x3010, CHEND=0x3011; // lenticular brackets 1185fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius it.logln(UnicodeString("String:'")+ustr+UnicodeString("'")); 1186fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1187fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t *pos = new int32_t[ustr.length()]; 1188fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t posCount = 0; 1189fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1190fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // calculate breaks up front, so we can print out 1191fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // sans any debugging 1192fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for(int32_t n = 0; (n=brk->next())!=UBRK_DONE; ) { 1193fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius pos[posCount++] = n; 1194fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(posCount>=ustr.length()) { 1195fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius it.errln("brk count exceeds string length!"); 1196fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius return; 1197fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1198fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1199fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UnicodeString out; 1200fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append((UChar)CHSTR); 1201fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t prev = 0; 1202fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for(int32_t i=0;i<posCount;i++) { 1203fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t n=pos[i]; 1204fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append(ustr.tempSubString(prev,n-prev)); 1205fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append((UChar)PILCROW); 1206fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prev=n; 1207fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1208fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append(ustr.tempSubString(prev,ustr.length()-prev)); 1209fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append((UChar)CHEND); 1210fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius it.logln(out); 1211fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1212fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.remove(); 1213fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for(int32_t i=0;i<posCount;i++) { 1214fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char tmp[100]; 1215fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius sprintf(tmp,"%d ",pos[i]); 1216fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius out.append(UnicodeString(tmp)); 1217fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1218fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius it.logln(out); 1219fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius delete [] pos; 1220fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 1221fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1222fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1223fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusvoid RBBIAPITest::TestFilteredBreakIteratorBuilder() { 1224fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING && !UCONFIG_NO_FILTERED_BREAK_ITERATION 1225fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 1226fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<FilteredBreakIteratorBuilder> builder; 1227fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<BreakIterator> baseBI; 1228fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius LocalPointer<BreakIterator> filteredBI; 1229fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1230fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString text("In the meantime Mr. Weston arrived with his small ship, which he had now recovered. Capt. Gorges, who informed the Sgt. here that one purpose of his going east was to meet with Mr. Weston, took this opportunity to call him to account for some abuses he had to lay to his charge."); // (William Bradford, public domain. http://catalog.hathitrust.org/Record/008651224 ) - edited. 1231fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString ABBR_MR("Mr."); 1232fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UnicodeString ABBR_CAPT("Capt."); 1233fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1234fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1235fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing empty builder\n"); 1236fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(status)); 1237fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1238fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1239fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1240fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getEnglish(), status)); 1241fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1242fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1243fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1244fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1245fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1246fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1247fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1248fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1249fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(20 == filteredBI->next()); // Mr. 1250fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); // recovered. 1251fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(90 == filteredBI->next()); // Capt. 1252fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(181 == filteredBI->next()); // Mr. 1253fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(278 == filteredBI->next()); // charge. 1254fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1255fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1256fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1257fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1258fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1259fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing empty builder\n"); 1260fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(status)); 1261fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1262fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1263fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Adding Mr. as an exception\n"); 1264fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->suppressBreakAfter(ABBR_MR, status)); 1265fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(FALSE == builder->suppressBreakAfter(ABBR_MR, status)); // already have it 1266fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->unsuppressBreakAfter(ABBR_MR, status)); 1267fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(FALSE == builder->unsuppressBreakAfter(ABBR_MR, status)); // already removed it 1268fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->suppressBreakAfter(ABBR_MR, status)); 1269fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1270fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1271fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1272fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getEnglish(), status)); 1273fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1274fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1275fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1276fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1277fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1278fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1279fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1280fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1281fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); 1282fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(90 == filteredBI->next());// Capt. 1283fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(278 == filteredBI->next()); 1284fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1285fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1286fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1287fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1288fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1289fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1290fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing empty builder\n"); 1291fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(status)); 1292fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1293fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1294fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Adding Mr. and Capt as an exception\n"); 1295fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->suppressBreakAfter(ABBR_MR, status)); 1296fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->suppressBreakAfter(ABBR_CAPT, status)); 1297fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1298fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1299fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1300fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getEnglish(), status)); 1301fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1302fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1303fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1304fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1305fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1306fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1307fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1308fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1309fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); 1310fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(278 == filteredBI->next()); 1311fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1312fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1313fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1314fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1315fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1316fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1317fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing English builder\n"); 1318fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(Locale::getEnglish(), status)); 1319fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1320fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getEnglish(), status)); 1323fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1324fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1325fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("unsuppressing 'Capt'"); 1326fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(TRUE == builder->unsuppressBreakAfter(ABBR_CAPT, status)); 1327fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1328fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1329fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1330fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1331fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1332fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(filteredBI.isValid()) { 1333fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1334fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1335fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); 1336fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(90 == filteredBI->next()); 1337fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(278 == filteredBI->next()); 1338fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1339fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1340fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1341fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1342fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1343fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1344fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1345fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing English builder\n"); 1346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(Locale::getEnglish(), status)); 1347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1349fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1350fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getEnglish(), status)); 1351fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1352fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1353fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1354fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1355fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1356fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1357fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(filteredBI.isValid()) { 1358fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1359fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1360fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); 1361fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(278 == filteredBI->next()); 1362fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1363fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1364fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1365fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1366fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1367fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if 0 1368fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius // reenable once french is in 1369fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { 1370fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing French builder"); 1371fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius builder.adoptInstead(FilteredBreakIteratorBuilder::createInstance(Locale::getFrench(), status)); 1372fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1373fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1374fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Constructing base BI\n"); 1375fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius baseBI.adoptInstead(BreakIterator::createSentenceInstance(Locale::getFrench(), status)); 1376fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1377fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1378fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Building new BI\n"); 1379fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI.adoptInstead(builder->build(baseBI.orphan(), status)); 1380fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT_SUCCESS(status); 1381fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1382fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if(filteredBI.isValid()) { 1383fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Testing:"); 1384fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->setText(text); 1385fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(20 == filteredBI->next()); 1386fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius TEST_ASSERT(84 == filteredBI->next()); 1387fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius filteredBI->first(); 1388fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius prtbrks(filteredBI.getAlias(), text, *this); 1389fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1390fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1391fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1392fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#else 1394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius logln("Skipped- not: !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING && !UCONFIG_NO_FILTERED_BREAK_ITERATION"); 1395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} 13974fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// runIndexedTest 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln((UnicodeString)"TestSuite RuleBasedBreakIterator API "); 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // case 0: name = "TestConstruction"; if (exec) TestConstruction(); break; 140750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "TestCloneEquals"; if (exec) TestCloneEquals(); break; 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "TestgetRules"; if (exec) TestgetRules(); break; 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: name = "TestHashCode"; if (exec) TestHashCode(); break; 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: name = "TestGetSetAdoptText"; if (exec) TestGetSetAdoptText(); break; 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 4: name = "TestIteration"; if (exec) TestIteration(); break; 141350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 141450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 0: case 1: case 2: case 3: case 4: name = "skip"; break; 141550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: name = "TestBuilder"; if (exec) TestBuilder(); break; 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 6: name = "TestQuoteGrouping"; if (exec) TestQuoteGrouping(); break; 141850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 7: name = "TestRuleStatusVec"; if (exec) TestRuleStatusVec(); break; 141950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 8: name = "TestBug2190"; if (exec) TestBug2190(); break; 142050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 142150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 9: name = "TestRegistration"; if (exec) TestRegistration(); break; 142250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 10: name = "TestBoilerPlate"; if (exec) TestBoilerPlate(); break; 142350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 11: name = "TestRuleStatus"; if (exec) TestRuleStatus(); break; 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 12: name = "TestRoundtripRules"; if (exec) TestRoundtripRules(); break; 1425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru case 13: name = "TestCreateFromRBBIData"; if (exec) TestCreateFromRBBIData(); break; 142650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#else 142750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 9: case 10: case 11: case 12: case 13: name = "skip"; break; 142850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 14294fceb0aeb072e9c6879c37fbcdcef2c4286c4719Elliott Hughes case 14: name = "TestRefreshInputText"; if (exec) TestRefreshInputText(); break; 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1431fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING 1432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 15: name = "TestFilteredBreakIteratorBuilder"; if(exec) TestFilteredBreakIteratorBuilder(); break; 1433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#else 1434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius case 15: name="skip"; break; 1435fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; // needed to end loop 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//Internal subroutines 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//--------------------------------------------- 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144459d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid RBBIAPITest::doBoundaryTest(BreakIterator& bi, UnicodeString& text, int32_t *boundaries){ 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"testIsBoundary():"); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t p = 0; 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isB; 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int32_t i = 0; i < text.length(); i++) { 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru isB = bi.isBoundary(i); 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"bi.isBoundary(" + i + ") -> " + isB); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == boundaries[p]) { 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!isB) 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected true, got false"); 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru p++; 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (isB) 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"Wrong result from isBoundary() for " + i + (UnicodeString)": expected false, got true"); 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid RBBIAPITest::doTest(UnicodeString& testString, int32_t start, int32_t gotoffset, int32_t expectedOffset, const char* expectedString){ 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString selected; 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString expected=CharsToUnicodeString(expectedString); 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(gotoffset != expectedOffset) 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"ERROR:****returned #" + gotoffset + (UnicodeString)" instead of #" + expectedOffset); 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(start <= gotoffset){ 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString.extractBetween(start, gotoffset, selected); 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testString.extractBetween(gotoffset, start, selected); 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(selected.compare(expected) != 0) 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(prettify((UnicodeString)"ERROR:****selected \"" + selected + "\" instead of \"" + expected + "\"")); 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(prettify("****selected \"" + selected + "\"")); 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//--------------------------------------------- 1482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//RBBIWithProtectedFunctions class functions 1483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru//--------------------------------------------- 1484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(RBBIDataHeader* data, UErrorCode &status) 1486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru : RuleBasedBreakIterator(data, status) 1487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 1488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruRBBIWithProtectedFunctions::RBBIWithProtectedFunctions(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) 1491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru : RuleBasedBreakIterator(data, RuleBasedBreakIterator::kDontAdopt, status) 1492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 1493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_BREAK_ITERATION */ 1496