1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru***************************************************************************** 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho* Copyright (C) 2001-2011, International Business Machines orporation 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_COLLATION 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "srchtest.h" 1227f654740f2a26ad62a5c155af9199af9e69b889claireho#if !UCONFIG_NO_BREAK_ITERATION 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "../cintltst/usrchdat.c" 1427f654740f2a26ad62a5c155af9199af9e69b889claireho#endif 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/stsearch.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/schriter.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// private definitions ----------------------------------------------------- 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define CASE(id,test) \ 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case id: \ 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = #test; \ 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { \ 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(#test "---"); \ 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)""); \ 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(areBroken) { \ 306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln(__FILE__ " cannot test - failed to create collator."); \ 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { \ 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru test(); \ 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } \ 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// public contructors and destructors -------------------------------------- 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruStringSearchTest::StringSearchTest() 40c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 41c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru: 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_wordbreaker_(NULL), m_en_characterbreaker_(NULL) 43c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 45c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_ = (RuleBasedCollator *)Collator::createInstance("en_US", status); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_fr_fr_ = (RuleBasedCollator *)Collator::createInstance("fr_FR", status); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_de_ = (RuleBasedCollator *)Collator::createInstance("de_DE", status); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_es_ = (RuleBasedCollator *)Collator::createInstance("es_ES", status); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_en_us_; 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_fr_fr_; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_de_; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_es_; 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_ = 0; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_fr_fr_ = 0; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_de_ = 0; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_es_ = 0; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Collator creation failed with %s", u_errorName(status)); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(((RuleBasedCollator *)m_de_)->getRules()); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar extrarules[128]; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(EXTRACOLLATIONRULE, extrarules, 128); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.append(extrarules, u_strlen(extrarules)); 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_de_; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_de_ = new RuleBasedCollator(rules, status); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(((RuleBasedCollator *)m_es_)->getRules()); 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.append(extrarules, u_strlen(extrarules)); 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_es_; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_es_ = new RuleBasedCollator(rules, status); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_wordbreaker_ = BreakIterator::createWordInstance( 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::getEnglish(), status); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_characterbreaker_ = BreakIterator::createCharacterInstance( 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::getEnglish(), status); 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 88c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruStringSearchTest::~StringSearchTest() 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 93c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_en_us_; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_fr_fr_; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_de_; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_es_; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_en_wordbreaker_; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete m_en_characterbreaker_; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 102c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// public methods ---------------------------------------------------------- 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::runIndexedTest(int32_t index, UBool exec, 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* &name, char* ) 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool areBroken = FALSE; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (m_en_us_ == NULL && m_fr_fr_ == NULL && m_de_ == NULL && 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_es_ == NULL && m_en_wordbreaker_ == NULL && 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_characterbreaker_ == NULL && exec) { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru areBroken = TRUE; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 11950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if !UCONFIG_NO_FILE_IO 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(0, TestOpenClose) 12150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(1, TestInitialization) 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(2, TestBasic) 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(3, TestNormExact) 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(4, TestStrength) 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 5: 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestBreakIterator"; 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(5, TestBreakIterator) 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(6, TestVariable) 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(7, TestOverlap) 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(8, TestCollator) 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(9, TestPattern) 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(10, TestText) 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(11, TestCompositeBoundaries) 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(12, TestGetSetOffset) 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(13, TestGetSetAttribute) 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(14, TestGetMatch) 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(15, TestSetMatch) 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(16, TestReset) 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(17, TestSupplementary) 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(18, TestContraction) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(19, TestIgnorable) 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(20, TestCanonical) 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(21, TestNormCanonical) 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(22, TestStrengthCanonical) 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 23: 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = "TestBreakIteratorCanonical"; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(23, TestBreakIteratorCanonical) 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(24, TestVariableCanonical) 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(25, TestOverlapCanonical) 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(26, TestCollatorCanonical) 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(27, TestPatternCanonical) 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(28, TestTextCanonical) 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(29, TestCompositeBoundariesCanonical) 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(30, TestGetSetOffsetCanonical) 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(31, TestSupplementaryCanonical) 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(32, TestContractionCanonical) 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(33, TestUClassID) 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(34, TestSubclass) 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CASE(35, TestCoverage) 169c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru CASE(36, TestDiacriticMatch) 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 172c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#else 173c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru name=""; 174c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// private methods ------------------------------------------------------ 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruRuleBasedCollator * StringSearchTest::getCollator(const char *collator) 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (collator == NULL) { 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_en_us_; 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(collator, "fr") == 0) { 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_fr_fr_; 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp(collator, "de") == 0) { 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_de_; 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (strcmp(collator, "es") == 0) { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_es_; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_en_us_; 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruBreakIterator * StringSearchTest::getBreakIterator(const char *breaker) 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#else 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker == NULL) { 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strcmp(breaker, "wordbreaker") == 0) { 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_en_wordbreaker_; 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_en_characterbreaker_; 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruchar * StringSearchTest::toCharString(const UnicodeString &text) 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char result[1024]; 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int index = 0; 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int length = text.length(); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (; count < length; count ++) { 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ch = text[count]; 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ch >= 0x20 && ch <= 0x7e) { 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result[index ++] = (char)ch; 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(result+index, "\\u%04x", ch); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index += 6; /* \uxxxx */ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result[index] = 0; 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result; 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruCollator::ECollationStrength StringSearchTest::getECollationStrength( 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UCollationStrength &strength) const 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (strength) 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCOL_PRIMARY : 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Collator::PRIMARY; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCOL_SECONDARY : 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Collator::SECONDARY; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case UCOL_TERTIARY : 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Collator::TERTIARY; 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default : 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return Collator::IDENTICAL; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool StringSearchTest::assertEqualWithStringSearch(StringSearch *strsrch, 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search) 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 257b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t count = 0; 258b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 259b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t matchindex = search->offset[count]; 260b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UnicodeString matchtext; 261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t matchlength; 262b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 26350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho strsrch->setAttribute(USEARCH_ELEMENT_COMPARISON, search->elemCompare, status); 26450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_FAILURE(status)) { 26550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho errln("Error setting USEARCH_ELEMENT_COMPARISON attribute %s", u_errorName(status)); 26650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return FALSE; 26750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 26850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE || 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength() != 0) { 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error with the initialization of match start and length"); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 273b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 274b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // start of next matches 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 276b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search->size[count]; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != strsrch->getMatchedStart() || 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != strsrch->getMatchedLength()) { 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 283b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s", str); 284b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error next match found at %d (len:%d); expected %d (len:%d)", 28550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho strsrch->getMatchedStart(), strsrch->getMatchedLength(), 28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho matchindex, matchlength); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedText(matchtext); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getText().compareBetween(matchindex, 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex + matchlength, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchtext, 0, 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchtext.length())) { 298b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error getting next matched text"); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search->offset[count]; 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE || 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength() != 0) { 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 310b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error next match found at %d (len:%d); expected <NO MATCH>", 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedStart(), strsrch->getMatchedLength()); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 315b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // start of previous matches 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = count == 0 ? 0 : count - 1; 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search->offset[count]; 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 319b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search->size[count]; 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->previous(status); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != strsrch->getMatchedStart() || 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != strsrch->getMatchedLength()) { 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 327b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error previous match found at %d (len:%d); expected %d (len:%d)", 328b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), strsrch->getMatchedLength(), 329b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedText(matchtext); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getText().compareBetween(matchindex, 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex + matchlength, 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchtext, 0, 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchtext.length())) { 340b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error getting previous matched text"); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = count > 0 ? search->offset[count - 1] : -1; 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count --; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->previous(status); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE || 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength() != 0) { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 350b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Text: %s", str); 351b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(strsrch->getPattern()); 352b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s", str); 353b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error previous match found at %d (len:%d); expected <NO MATCH>", 354b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), strsrch->getMatchedLength()); 355b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 356b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 357b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 358b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t nextStart; 359b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UBool isOverlap = (strsrch->getAttribute(USEARCH_OVERLAP) == USEARCH_ON); 360b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 361b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // start of following matches 362b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count = 0; 363b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search->offset[count]; 364b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = 0; 365b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 366b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 367b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->following(nextStart, status); 368b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 369b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (matchindex < 0) { 370b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strsrch->getMatchedStart() != USEARCH_DONE || 371b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedLength() != 0) { 372b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(strsrch->getText()); 373b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Text: %s", str); 374b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(strsrch->getPattern()); 375b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s", str); 376b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error following match starting at %d (overlap:%d) found at %d (len:%d); expected <NO MATCH>", 377b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 378b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), strsrch->getMatchedLength()); 379b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 380b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 381b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // no more matches 382b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 383b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 384b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 385b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search->size[count]; 386b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strsrch->getMatchedStart() != matchindex 387b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || strsrch->getMatchedLength() != matchlength 388b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || U_FAILURE(status)) { 389b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(strsrch->getText()); 390b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Text: %s\n", str); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 392b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s\n", str); 393b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error following match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 394b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 395b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), strsrch->getMatchedLength(), 396b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 398b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 399b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 400b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (isOverlap || strsrch->getMatchedLength() == 0) { 401b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = strsrch->getMatchedStart() + 1; 402b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 403b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = strsrch->getMatchedStart() + strsrch->getMatchedLength(); 404b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 405b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 406b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count++; 407b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search->offset[count]; 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 409b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 410b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // start preceding matches 411b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count = -1; // last non-negative offset index, could be -1 if no match 412b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (search->offset[count + 1] >= 0) { 413b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count++; 414b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 415b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = strsrch->getText().length(); 416b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 417b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho while (TRUE) { 418b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->preceding(nextStart, status); 419b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 420b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (count < 0) { 421b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strsrch->getMatchedStart() != USEARCH_DONE || strsrch->getMatchedLength() != 0) { 422b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(strsrch->getText()); 423b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Text: %s\n", str); 424b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(strsrch->getPattern()); 425b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s\n", str); 426b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected <NO MATCH>\n", 427b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 428b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), 429b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedLength()); 430b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 431b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 432b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho // no more matches 433b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 434b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 435b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 436b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex = search->offset[count]; 437b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchlength = search->size[count]; 438b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (strsrch->getMatchedStart() != matchindex 439b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || strsrch->getMatchedLength() != matchlength 440b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || U_FAILURE(status)) { 441b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho char *str = toCharString(strsrch->getText()); 442b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Text: %s\n", str); 443b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho str = toCharString(strsrch->getPattern()); 444b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Pattern: %s\n", str); 445b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho errln("Error preceding match starting at %d (overlap: %d) found at %d (len:%d); expected %d (len:%d)\n", 446b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart, isOverlap, 447b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho strsrch->getMatchedStart(), strsrch->getMatchedLength(), 448b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho matchindex, matchlength); 449b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return FALSE; 450b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 451b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 452b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho nextStart = matchindex; 453b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho count--; 454b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 455b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 45650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho strsrch->setAttribute(USEARCH_ELEMENT_COMPARISON, USEARCH_STANDARD_ELEMENT_COMPARISON, status); 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool StringSearchTest::assertEqual(const SearchData *search) 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Collator *collator = getCollator(search->collator); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breaker = getBreakIterator(search->breaker); 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch, *strsrch2; 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(search->breaker) { 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; /* skip test */ 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp); 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker != NULL) { 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(text); 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(search->strength)); 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = new StringSearch(pattern, text, (RuleBasedCollator *)collator, 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, status); 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch2 = strsrch->clone(); 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( strsrch2 == strsrch || *strsrch2 != *strsrch || 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru !assertEqualWithStringSearch(strsrch2, search) 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 505c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("failure with StringSearch.clone()"); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch2; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch2; 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool StringSearchTest::assertCanonicalEqual(const SearchData *search) 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Collator *collator = getCollator(search->collator); 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breaker = getBreakIterator(search->breaker); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch; 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 525c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UBool result = TRUE; 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(search->breaker) { 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; /* skip test */ 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp); 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker != NULL) { 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(text); 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(search->strength)); 546c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = new StringSearch(pattern, text, (RuleBasedCollator *)collator, 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, status); 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 552c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = FALSE; 553c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 557c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru result = FALSE; 558c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 560c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 561c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querubail: 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 563c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_OFF, status); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 565c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 566c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return result; 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool StringSearchTest::assertEqualWithAttribute(const SearchData *search, 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttributeValue canonical, 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USearchAttributeValue overlap) 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Collator *collator = getCollator(search->collator); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breaker = getBreakIterator(search->breaker); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if UCONFIG_NO_BREAK_ITERATION 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(search->breaker) { 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; /* skip test */ 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp); 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker != NULL) { 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(text); 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(search->strength)); 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = new StringSearch(pattern, text, (RuleBasedCollator *)collator, 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, status); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, canonical, status); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, overlap, status); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestOpenClose() 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *result; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breakiter = m_en_wordbreaker_; 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp("a"); 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringCharacterIterator chariter(text); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing null arguments */ 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, NULL, NULL, status); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL arguments should produce an error"); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru chariter.setText(text); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, NULL, NULL, status); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL arguments should produce an error"); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.append(0, 0x1); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, NULL, NULL, status); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Empty pattern should produce an error"); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru chariter.setText(text); 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, NULL, NULL, status); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Empty pattern should produce an error"); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.remove(); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.append(temp); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, NULL, NULL, status); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Empty text should produce an error"); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru chariter.setText(text); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, NULL, NULL, status); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Empty text should produce an error"); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.append(temp); 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, NULL, NULL, status); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL arguments should produce an error"); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru chariter.setText(text); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, NULL, NULL, status); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL arguments should produce an error"); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, m_en_us_, NULL, status); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL break iterator is valid for opening search"); 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, m_en_us_, NULL, status); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL break iterator is valid for opening search"); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, Locale::getEnglish(), NULL, status); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || result == NULL) { 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL break iterator is valid for opening search"); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, Locale::getEnglish(), NULL, status); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: NULL break iterator is valid for opening search"); 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, m_en_us_, breakiter, status); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Break iterator is valid for opening search"); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, chariter, m_en_us_, NULL, status); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: Break iterator is valid for opening search"); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestInitialization() 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString temp("a"); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *result; 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count; 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* simple test on the pattern ce construction */ 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.append(temp); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.append(temp); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.append(temp); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.append(temp); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.append(temp); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, m_en_us_, NULL, status); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening search %s", u_errorName(status)); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *copy = new StringSearch(*result); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*(copy->getCollator()) != *(result->getCollator()) || 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getBreakIterator() != result->getBreakIterator() || 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedLength() != result->getMatchedLength() || 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedStart() != result->getMatchedStart() || 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getOffset() != result->getOffset() || 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getPattern() != result->getPattern() || 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getText() != result->getText() || 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(copy) != *(result)) 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error copying StringSearch"); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete copy; 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy = (StringSearch *)result->safeClone(); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*(copy->getCollator()) != *(result->getCollator()) || 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getBreakIterator() != result->getBreakIterator() || 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedLength() != result->getMatchedLength() || 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedStart() != result->getMatchedStart() || 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getOffset() != result->getOffset() || 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getPattern() != result->getPattern() || 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getText() != result->getText() || 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(copy) != *(result)) { 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error copying StringSearch"); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing if an extremely large pattern will fail the initialization */ 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (count = 0; count < 512; count ++) { 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.append(temp); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = new StringSearch(pattern, text, m_en_us_, NULL, status); 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*result != *result) { 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: string search object expected to match itself"); 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*result == *copy) { 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: string search objects are not expected to match"); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *copy = *result; 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (*(copy->getCollator()) != *(result->getCollator()) || 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getBreakIterator() != result->getBreakIterator() || 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedLength() != result->getMatchedLength() || 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getMatchedStart() != result->getMatchedStart() || 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getOffset() != result->getOffset() || 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getPattern() != result->getPattern() || 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy->getText() != result->getText() || 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *(copy) != *(result)) { 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error copying StringSearch"); 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening search %s", u_errorName(status)); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete result; 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete copy; 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestBasic() 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASIC[count].text != NULL) { 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //printf("count %d", count); 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&BASIC[count])) { 817c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestNormExact() 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting collation normalization %s", 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASIC[count].text != NULL) { 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&BASIC[count])) { 834c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NORMEXACT[count].text != NULL) { 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&NORMEXACT[count])) { 841c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_OFF, status); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONNORMEXACT[count].text != NULL) { 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&NONNORMEXACT[count])) { 849c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestStrength() 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (STRENGTH[count].text != NULL) { 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&STRENGTH[count])) { 860c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestBreakIterator() 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(BREAKITERATOREXACT[0].text, temp, 128); 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(BREAKITERATOREXACT[0].pattern, temp, 128); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setBreakIterator(NULL, status); 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || strsrch->getBreakIterator() != NULL) { 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error usearch_getBreakIterator returned wrong object"); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setBreakIterator(m_en_characterbreaker_, status); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getBreakIterator() != m_en_characterbreaker_) { 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error usearch_getBreakIterator returned wrong object"); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setBreakIterator(m_en_wordbreaker_, status); 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getBreakIterator() != m_en_wordbreaker_) { 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error usearch_getBreakIterator returned wrong object"); 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 4) { 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // special purposes for tests numbers 0-3 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(BREAKITERATOREXACT[count]); 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = getCollator(search->collator); 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breaker = getBreakIterator(search->breaker); 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch; 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker != NULL) { 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(text); 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(search->strength)); 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = new StringSearch(pattern, text, collator, breaker, status); 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getBreakIterator() != breaker) { 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting break iterator"); 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(BREAKITERATOREXACT[count + 1]); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker = getBreakIterator(search->breaker); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker != NULL) { 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(text); 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setBreakIterator(breaker, status); 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getBreakIterator() != breaker) { 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting break iterator"); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 946c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BREAKITERATOREXACT[count].text != NULL) { 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&BREAKITERATOREXACT[count])) { 954c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestVariable() 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, status); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting collation alternate attribute %s", 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (VARIABLE[count].text != NULL) { 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("variable %d", count); 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&VARIABLE[count])) { 974c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru infoln("Error at test number %d", count); 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_NON_IGNORABLE, 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestOverlap() 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (OVERLAP[count].text != NULL) { 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithAttribute(&OVERLAP[count], USEARCH_OFF, 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ON)) { 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at overlap test number %d", count); 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONOVERLAP[count].text != NULL) { 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&NONOVERLAP[count])) { 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at non overlap test number %d", count); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 1) { 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(OVERLAP[count]); 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = getCollator(search->collator); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator, NULL, 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_ON, status); 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_ON) { 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap option"); 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(NONOVERLAP[count]); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_OFF, status); 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_OFF) { 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap option"); 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCollator() 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // test collator that thinks "o" and "p" are the same thing 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATOR[0].text, temp, 128); 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATOR[0].pattern, temp, 128); 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATOR[0])) { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TESTCOLLATORRULE, temp, 128); 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(temp, u_strlen(temp)); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *tailored = new RuleBasedCollator(rules, status); 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tailored->setStrength(getECollationStrength(COLLATOR[1].strength)); 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening rule based collator %s", u_errorName(status)); 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1077b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete tailored; 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setCollator(tailored, status); 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || (*strsrch->getCollator()) != (*tailored)) { 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting rule based collator"); 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1085b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete tailored; 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATOR[1])) { 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1090b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete tailored; 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setCollator(m_en_us_, status); 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || (*strsrch->getCollator()) != (*m_en_us_)) { 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting rule based collator"); 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1099b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete tailored; 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATOR[0])) { 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error searching collator test"); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1105b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho delete tailored; 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestPattern() 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[512]; 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int templength; 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].text, temp, 512); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].pattern, temp, 512); 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(PATTERN[0].strength)); 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getPattern() != pattern) { 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERN[0])) { 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[1].pattern, temp, 512); 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pattern != strsrch->getPattern()) { 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERN[1])) { 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERN[0].pattern, temp, 512); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pattern != strsrch->getPattern()) { 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERN[0])) { 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* enormous pattern size to see if this crashes */ 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (templength = 0; templength != 512; templength ++) { 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp[templength] = 0x61; 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp[511] = 0; 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, 511); 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern with size 512, %s", u_errorName(status)); 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestText() 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].text, temp, 128); 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].pattern, temp, 128); 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXT[0])) { 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[1].text, temp, 128); 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text %s", u_errorName(status)); 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXT[1])) { 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXT[0].text, temp, 128); 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringCharacterIterator chariter(text); 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(chariter, status); 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXT[0])) { 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error searching within set text"); 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCompositeBoundaries() 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (COMPOSITEBOUNDARIES[count].text != NULL) { 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("composite %d", count); 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&COMPOSITEBOUNDARIES[count])) { 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestGetSetOffset() 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("1234567890123456"); 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("12345678901234567890123456789012"); 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, status); 1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing out of bounds error */ 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(-1, status); 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting set offset error"); 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(128, status); 1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting set offset error"); 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int index = 0; 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASIC[index].text != NULL) { 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = BASIC[index ++]; 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, temp, 128); 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, temp, 128); 1301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getCollator()->setStrength(getECollationStrength( 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.strength)); 1306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchlength = search.size[count]; 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != strsrch->getMatchedStart() || 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != strsrch->getMatchedLength()) { 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error match found at %d %d", 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedStart(), 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength()); 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count + 1] == -1 ? -1 : 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[count + 2]; 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.offset[count + 1] != -1) { 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(search.offset[count + 1] + 1, status); 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getOffset() != search.offset[count + 1] + 1) { 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting offset\n"); 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE) { 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error match found at %d %d", 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedStart(), 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength()); 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getCollator()->setStrength(getECollationStrength( 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_TERTIARY)); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestGetSetAttribute() 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening search %s", u_errorName(status)); 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_DEFAULT, status); 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_OFF) { 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap to the default"); 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_ON, status); 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_ON) { 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap true"); 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_OFF, status); 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_OFF) { 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap false"); 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_ATTRIBUTE_VALUE_COUNT, 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap to illegal value"); 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_DEFAULT, status); 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_CANONICAL_MATCH) != USEARCH_OFF) { 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting canonical match to the default"); 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_CANONICAL_MATCH) != USEARCH_ON) { 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting canonical match true"); 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_OFF, status); 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_CANONICAL_MATCH) != USEARCH_OFF) { 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting canonical match false"); 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ATTRIBUTE_VALUE_COUNT, status); 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting canonical match to illegal value"); 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_ATTRIBUTE_COUNT, USEARCH_DEFAULT, status); 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting illegal attribute success"); 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestGetMatch() 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = MATCH[0]; 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, temp, 128); 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, temp, 128); 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString matchtext; 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchlength = search.size[count]; 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != strsrch->getMatchedStart() || 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != strsrch->getMatchedLength()) { 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error match found at %d %d", strsrch->getMatchedStart(), 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength()); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedText(matchtext); 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchtext.length() != matchlength || U_FAILURE(status)){ 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting match text"); 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count]; 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE || 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength() != 0) { 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error end of match not found"); 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedText(matchtext); 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchtext.length() != 0) { 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting null matches"); 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestSetMatch() 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (MATCH[count].text != NULL) { 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = MATCH[count]; 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, temp, 128); 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, temp, 128); 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, status); 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int size = 0; 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (search.offset[size] != -1) { 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru size ++; 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->first(status) != search.offset[0] || U_FAILURE(status)) { 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting first match"); 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->last(status) != search.offset[size -1] || 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting last match"); 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int index = 0; 1514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (index < size) { 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (index + 2 < size) { 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->following(search.offset[index + 2] - 1, status) 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru != search.offset[index + 2] || U_FAILURE(status)) { 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting following match at index %d", 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[index + 2] - 1); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (index + 1 < size) { 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->preceding(search.offset[index + 1] + 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.size[index + 1] + 1, 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status) != search.offset[index + 1] || 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_FAILURE(status)) { 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting preceeding match at index %d", 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[index + 1] + 1); 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru index += 2; 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->following(text.length(), status) != USEARCH_DONE) { 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting out of bounds match"); 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->preceding(0, status) != USEARCH_DONE) { 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting out of bounds match"); 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestReset() 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("fish fish"); 1549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("s"); 1550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 1555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_ON, status); 1560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(9, status); 1562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting attributes and offsets"); 1564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_OFF || 1568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_CANONICAL_MATCH) != USEARCH_OFF || 1569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getOffset() != 0 || strsrch->getMatchedLength() != 0 || 1570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedStart() != USEARCH_DONE) { 1571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error resetting string search"); 1572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->previous(status); 1574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != 7 || 1575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength() != 1) { 1576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error resetting string search\n"); 1577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestSupplementary() 1583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (SUPPLEMENTARY[count].text != NULL) { 1586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&SUPPLEMENTARY[count])) { 1587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestContraction() 1594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONRULE, temp, 128); 1599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 1600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(temp, u_strlen(temp)); 1601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = new RuleBasedCollator(rules, 1602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getECollationStrength(UCOL_TERTIARY), UCOL_ON, status); 1603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening collator %s", u_errorName(status)); 1605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 1607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 1608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, collator, NULL, 1609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (CONTRACTION[count].text != NULL) { 1616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTION[count].text, temp, 128); 1617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTION[count].pattern, temp, 128); 1619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 1621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &CONTRACTION[count])) { 1623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete collator; 1629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestIgnorable() 1632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLERULE, temp, 128); 1635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 1636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(temp, u_strlen(temp)); 1637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = new RuleBasedCollator(rules, 1640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getECollationStrength(IGNORABLE[count].strength), 1641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_ON, status); 1642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening collator %s", u_errorName(status)); 1644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 1647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 1648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, collator, NULL, 1649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete collator; 1653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (IGNORABLE[count].text != NULL) { 1657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLE[count].text, temp, 128); 1658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(IGNORABLE[count].pattern, temp, 128); 1660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 1662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &IGNORABLE[count])) { 1664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete collator; 1670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queruvoid StringSearchTest::TestDiacriticMatch() 1673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator* coll = NULL; 1678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = NULL; 1679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 1681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 1682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search; 1684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru search = &(DIACRITICMATCH[count]); 1686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (search->text != NULL) { 1687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru coll = getCollator(search->collator); 1688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru coll->setStrength(getECollationStrength(search->strength)); 1689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch = new StringSearch(pattern, text, coll, getBreakIterator(search->breaker), status); 1690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 1695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 1697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 1699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1703c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru search = &(DIACRITICMATCH[++count]); 1704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCanonical() 1710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASICCANONICAL[count].text != NULL) { 1713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&BASICCANONICAL[count])) { 1714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestNormCanonical() 1721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); 1724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NORMCANONICAL[count].text != NULL) { 1726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&NORMCANONICAL[count])) { 1727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_OFF, status); 1732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestStrengthCanonical() 1735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (STRENGTHCANONICAL[count].text != NULL) { 1738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&STRENGTHCANONICAL[count])) { 1739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION 1746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestBreakIteratorCanonical() 1748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 4) { 1753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // special purposes for tests numbers 0-3 1754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(BREAKITERATORCANONICAL[count]); 1756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 1758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 1761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = getCollator(search->collator); 1764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(search->strength)); 1765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breaker = getBreakIterator(search->breaker); 1767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, collator, 1768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker, status); 1769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error creating string search data"); 1771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getBreakIterator() != breaker) { 1776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting break iterator"); 1777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru collator->setStrength(getECollationStrength(UCOL_TERTIARY)); 1782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(BREAKITERATOREXACT[count + 1]); 1786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker = getBreakIterator(search->breaker); 1787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (breaker == NULL) { 1788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error creating BreakIterator"); 1789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru breaker->setText(strsrch->getText()); 1792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setBreakIterator(breaker, status); 1793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || strsrch->getBreakIterator() != breaker) { 1794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting break iterator"); 1795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 1806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BREAKITERATORCANONICAL[count].text != NULL) { 1809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqual(&BREAKITERATORCANONICAL[count])) { 1810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 1818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestVariableCanonical() 1820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_SHIFTED, status); 1824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting collation alternate attribute %s", 1826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 1827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (VARIABLE[count].text != NULL) { 1829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("variable %d", count); 1830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&VARIABLE[count])) { 1831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setAttribute(UCOL_ALTERNATE_HANDLING, UCOL_NON_IGNORABLE, 1836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestOverlapCanonical() 1840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 1842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (OVERLAPCANONICAL[count].text != NULL) { 1843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithAttribute(&OVERLAPCANONICAL[count], USEARCH_ON, 1844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USEARCH_ON)) { 1845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at overlap test number %d", count); 1846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (NONOVERLAP[count].text != NULL) { 1851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&NONOVERLAPCANONICAL[count])) { 1852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at non overlap test number %d", count); 1853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = 0; 1858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (count < 1) { 1859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const SearchData *search = &(OVERLAPCANONICAL[count]); 1861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->text, temp, 128); 1864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search->pattern, temp, 128); 1867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = getCollator(search->collator); 1870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, collator, 1871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, status); 1872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_ON, status); 1874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_ON) { 1876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap option"); 1877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search = &(NONOVERLAPCANONICAL[count]); 1883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_OVERLAP, USEARCH_OFF, status); 1884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || 1885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getAttribute(USEARCH_OVERLAP) != USEARCH_OFF) { 1886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting overlap option"); 1887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, search)) { 1890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 1892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 1895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCollatorCanonical() 1900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* test collator that thinks "o" and "p" are the same thing */ 1902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATORCANONICAL[0].text, temp, 128); 1904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1905b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(COLLATORCANONICAL[0].pattern, temp, 128); 1907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, 1912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NULL, status); 1913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATORCANONICAL[0])) { 1918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TESTCOLLATORRULE, temp, 128); 1923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 1924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(temp, u_strlen(temp)); 1925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *tailored = new RuleBasedCollator(rules, 1926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getECollationStrength(COLLATORCANONICAL[1].strength), 1927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCOL_ON, status); 1928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening rule based collator %s", u_errorName(status)); 1931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setCollator(tailored, status); 1934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || *(strsrch->getCollator()) != *tailored) { 1935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting rule based collator"); 1936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATORCANONICAL[1])) { 1940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tailored != NULL) { 1942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete tailored; 1943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1944c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 1945c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru return; 1946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setCollator(m_en_us_, status); 1949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status) || *(strsrch->getCollator()) != *m_en_us_) { 1951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting rule based collator"); 1952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &COLLATORCANONICAL[0])) { 1954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 1956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (tailored != NULL) { 1957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete tailored; 1958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestPatternCanonical() 1962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 1965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].text, temp, 128); 1967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 1968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 1969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].pattern, temp, 128); 1970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 1971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength( 1974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getECollationStrength(PATTERNCANONICAL[0].strength)); 1975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 1978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 1979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 1980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 1982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pattern != strsrch->getPattern()) { 1985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 1986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERNCANONICAL[0])) { 1988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[1].pattern, temp, 128); 1992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 1993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 1994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pattern != strsrch->getPattern()) { 1995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 1996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 1997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 1999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 2000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 2002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERNCANONICAL[1])) { 2004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(PATTERNCANONICAL[0].pattern, temp, 128); 2008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 2009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 2010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (pattern != strsrch->getPattern()) { 2011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern"); 2012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->reset(); 2015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 2016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 2018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &PATTERNCANONICAL[0])) { 2020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 2023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_en_us_->setStrength(getECollationStrength(UCOL_TERTIARY)); 2024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 2025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 2026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestTextCanonical() 2030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 2032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].text, temp, 128); 2033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text; 2034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 2035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].pattern, temp, 128); 2036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern; 2037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 2038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 2041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 2042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 2043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 2046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 2049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 2050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXTCANONICAL[0])) { 2052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[1].text, temp, 128); 2056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 2057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 2058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 2059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 2060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text %s", u_errorName(status)); 2064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXTCANONICAL[1])) { 2066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(TEXTCANONICAL[0].text, temp, 128); 2070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 2071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 2072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (text != strsrch->getText()) { 2073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 2074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting pattern %s", u_errorName(status)); 2078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, &TEXTCANONICAL[0])) { 2080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto ENDTESTPATTERN; 2081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruENDTESTPATTERN: 2083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch != NULL) { 2084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 2085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCompositeBoundariesCanonical() 2089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 2091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (COMPOSITEBOUNDARIESCANONICAL[count].text != NULL) { 2092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("composite %d", count); 2093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&COMPOSITEBOUNDARIESCANONICAL[count])) { 2094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 2095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestGetSetOffsetCanonical() 2101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 2105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 2106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 2107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 2108c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru Collator *collator = strsrch->getCollator(); 2109c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_ON, status); 2111c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 2113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* testing out of bounds error */ 2114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(-1, status); 2115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting set offset error"); 2117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(128, status); 2119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 2120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error expecting set offset error"); 2121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int index = 0; 2123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 2124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (BASICCANONICAL[index].text != NULL) { 2125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchData search = BASICCANONICAL[index ++]; 2126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (BASICCANONICAL[index].text == NULL) { 2127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* skip the last one */ 2128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 2129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.text, temp, 128); 2132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 2133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(search.pattern, temp, 128); 2134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 2135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 2138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 2140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 2142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchindex = search.offset[count]; 2143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (U_SUCCESS(status) && matchindex >= 0) { 2144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchlength = search.size[count]; 2145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 2146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (matchindex != strsrch->getMatchedStart() || 2147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchlength != strsrch->getMatchedLength()) { 2148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 2149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 2150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 2151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 2152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error match found at %d %d", 2153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedStart(), 2154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength()); 2155c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru matchindex = search.offset[count + 1] == -1 ? -1 : 2158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.offset[count + 2]; 2159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.offset[count + 1] != -1) { 2160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setOffset(search.offset[count + 1] + 1, status); 2161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getOffset() != search.offset[count + 1] + 1) { 2162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting offset"); 2163c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count += 2; 2168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->next(status); 2170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (strsrch->getMatchedStart() != USEARCH_DONE) { 2171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char *str = toCharString(strsrch->getText()); 2172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Text: %s", str); 2173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru str = toCharString(strsrch->getPattern()); 2174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Pattern: %s", str); 2175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error match found at %d %d", strsrch->getMatchedStart(), 2176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->getMatchedLength()); 2177c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru goto bail; 2178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2180c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2181c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querubail: 2182c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru collator->setAttribute(UCOL_NORMALIZATION_MODE, UCOL_OFF, status); 2183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 2184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestSupplementaryCanonical() 2187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 2189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (SUPPLEMENTARYCANONICAL[count].text != NULL) { 2190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertCanonicalEqual(&SUPPLEMENTARYCANONICAL[count])) { 2191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 2192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestContractionCanonical() 2198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[128]; 2200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONRULE, temp, 128); 2202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString rules; 2203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rules.setTo(temp, u_strlen(temp)); 2204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru RuleBasedCollator *collator = new RuleBasedCollator(rules, 2207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru getECollationStrength(UCOL_TERTIARY), UCOL_ON, status); 2208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening collator %s", u_errorName(status)); 2210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 2212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 2213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, collator, NULL, 2214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 2215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setAttribute(USEARCH_CANONICAL_MATCH, USEARCH_ON, status); 2216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error opening string search %s", u_errorName(status)); 2218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int count = 0; 2221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (CONTRACTIONCANONICAL[count].text != NULL) { 2222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONCANONICAL[count].text, temp, 128); 2223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru text.setTo(temp, u_strlen(temp)); 2224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_unescape(CONTRACTIONCANONICAL[count].pattern, temp, 128); 2225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern.setTo(temp, u_strlen(temp)); 2226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setText(text, status); 2227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru strsrch->setPattern(pattern, status); 2228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertEqualWithStringSearch(strsrch, 2229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru &CONTRACTIONCANONICAL[count])) { 2230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error at test number %d", count); 2231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count ++; 2233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 2235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete collator; 2236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestUClassID() 2239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char id = *((char *)StringSearch::getStaticClassID()); 2241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (id != 0) { 2242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Static class id for StringSearch should be 0"); 2243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("text"); 2246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("pattern"); 2247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringSearch *strsrch = new StringSearch(pattern, text, m_en_us_, NULL, 2248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 2249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru id = *((char *)strsrch->getDynamicClassID()); 2250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (id != 0) { 2251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Dynamic class id for StringSearch should be 0"); 2252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete strsrch; 2254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass TestSearch : public SearchIterator 2257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 2259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSearch(const TestSearch &obj); 2260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSearch(const UnicodeString &text, 2261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breakiter, 2262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString &pattern); 2263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ~TestSearch(); 2264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void setOffset(int32_t position, UErrorCode &status); 2266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t getOffset() const; 2267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchIterator* safeClone() const; 2268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 2271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for the actual class. 2272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @draft ICU 2.2 2274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); } 2276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 2278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ICU "poor man's RTTI", returns a UClassID for this class. 2279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 2280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @draft ICU 2.2 2281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; } 2283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool operator!=(const TestSearch &that) const; 2285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString m_pattern_; 2287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprotected: 2289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t handleNext(int32_t position, UErrorCode &status); 2290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t handlePrev(int32_t position, UErrorCode &status); 2291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSearch & operator=(const TestSearch &that); 2292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 2294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 2296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The address of this static class variable serves as this class's ID 2297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for ICU "poor man's RTTI". 2298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 2299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const char fgClassID; 2300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t m_offset_; 2301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruconst char TestSearch::fgClassID=0; 2304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestSearch::TestSearch(const TestSearch &obj) : SearchIterator(obj) 2306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = obj.m_offset_; 2308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_pattern_ = obj.m_pattern_; 2309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestSearch::TestSearch(const UnicodeString &text, 2312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru BreakIterator *breakiter, 2313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString &pattern) : SearchIterator() 2314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_breakiterator_ = breakiter; 2316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_pattern_ = pattern; 2317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_text_ = text; 2318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = 0; 2319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_pattern_ = pattern; 2320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestSearch::~TestSearch() 2323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestSearch::setOffset(int32_t position, UErrorCode &status) 2328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (position >= 0 && position <= m_text_.length()) { 2330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = position; 2331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 2333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_INDEX_OUTOFBOUNDS_ERROR; 2334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t TestSearch::getOffset() const 2338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_offset_; 2340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSearchIterator * TestSearch::safeClone() const 2343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return new TestSearch(m_text_, m_breakiterator_, m_pattern_); 2345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruUBool TestSearch::operator!=(const TestSearch &that) const 2348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (SearchIterator::operator !=(that)) { 2350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 2351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return m_offset_ != that.m_offset_ || m_pattern_ != that.m_pattern_; 2353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t TestSearch::handleNext(int32_t start, UErrorCode &status) 2356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 2358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int match = m_text_.indexOf(m_pattern_, start); 2359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (match < 0) { 2360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = m_text_.length(); 2361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchStart(m_offset_); 2362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchLength(0); 2363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 2364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchStart(match); 2366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = match; 2367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchLength(m_pattern_.length()); 2368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return match; 2369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 2371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruint32_t TestSearch::handlePrev(int32_t start, UErrorCode &status) 2375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 2377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int match = m_text_.lastIndexOf(m_pattern_, 0, start); 2378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (match < 0) { 2379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = 0; 2380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchStart(m_offset_); 2381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchLength(0); 2382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 2383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchStart(match); 2385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = match; 2386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru setMatchLength(m_pattern_.length()); 2387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return match; 2388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 2389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USEARCH_DONE; 2390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruTestSearch & TestSearch::operator=(const TestSearch &that) 2394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SearchIterator::operator=(that); 2396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_offset_ = that.m_offset_; 2397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m_pattern_ = that.m_pattern_; 2398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *this; 2399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestSubclass() 2402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 2403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("abc abcd abc"); 2404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString pattern("abc"); 2405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSearch search(text, NULL, pattern); 2406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestSearch search2(search); 2407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int expected[] = {0, 4, 9}; 2408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 2410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringCharacterIterator chariter(text); 2411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.setText(text, status); 2413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.getText() != search2.getText()) { 2414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 2415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.setText(chariter, status); 2418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.getText() != search2.getText()) { 2419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error setting text"); 2420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru search.reset(); 2423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // comparing constructors 2424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < (int)(sizeof(expected) / sizeof(expected[0])); i ++) { 2426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.next(status) != expected[i]) { 2427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting next match"); 2428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.getMatchedLength() != search.m_pattern_.length()) { 2430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting next match length"); 2431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.next(status) != USEARCH_DONE) { 2434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error should have reached the end of the iteration"); 2435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = sizeof(expected) / sizeof(expected[0]) - 1; i >= 0; i --) { 2437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.previous(status) != expected[i]) { 2438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting previous match"); 2439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.getMatchedLength() != search.m_pattern_.length()) { 2441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error getting previous match length"); 2442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (search.previous(status) != USEARCH_DONE) { 2445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error should have reached the start of the iteration"); 2446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass StubSearchIterator:public SearchIterator{ 2450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StubSearchIterator(){} 2452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void setOffset(int32_t , UErrorCode &) {}; 2453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t getOffset(void) const {return 0;}; 2454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual SearchIterator* safeClone(void) const {return NULL;}; 2455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t handleNext(int32_t , UErrorCode &){return 0;}; 2456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual int32_t handlePrev(int32_t , UErrorCode &) {return 0;}; 2457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID() const { 2458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char classID = 0; 2459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UClassID)&classID; 2460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 2462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid StringSearchTest::TestCoverage(){ 2464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StubSearchIterator stub1, stub2; 2465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 2466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stub1 != stub2){ 2468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("new StubSearchIterator should be equal"); 2469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stub2.setText(UnicodeString("ABC"), status); 2472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Error: SearchIterator::SetText"); 2474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru stub1 = stub2; 2477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (stub1 != stub2){ 2478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("SearchIterator::operator = assigned object should be equal"); 2479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 2480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 2481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 2482c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru#endif /* !UCONFIG_NO_BREAK_ITERATION */ 2483c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 2484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_COLLATION */ 2485