1f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)/**************************************************************************************** 2f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * COPYRIGHT: 3f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Copyright (c) 1997-2010, International Business Machines Corporation and 4f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * others. All Rights Reserved. 5f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Modification History: 6f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 7f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * Date Name Description 8f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) * 05/22/2000 Madhu Added tests for testing new API for utf16 support and more 9f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ****************************************************************************************/ 10f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 11f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include <string.h> 12f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/utypeinfo.h" // for 'typeid' to work 13f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 14f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/chariter.h" 15f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/ustring.h" 16f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/unistr.h" 17f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/schriter.h" 18f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uchriter.h" 19f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/uiter.h" 20f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "unicode/putil.h" 21f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#include "citrtest.h" 22f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 23f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 24f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)class SCharacterIterator : public CharacterIterator { 25f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)public: 26f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SCharacterIterator(const UnicodeString& textStr){ 27f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) text = textStr; 28f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=0; 29f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) textLength = textStr.length(); 30f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) begin = 0; 31f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) end=textLength; 32f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 33f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 34f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 35f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual ~SCharacterIterator(){}; 36f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 37f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 38f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) void setText(const UnicodeString& newText){ 39f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) text = newText; 40f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 41f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 42f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual void getText(UnicodeString& result) { 43f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) text.extract(0,text.length(),result); 44f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 45f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static UClassID getStaticClassID(void){ 46f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (UClassID)(&fgClassID); 47f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 48f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UClassID getDynamicClassID(void) const{ 49f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return getStaticClassID(); 50f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 51f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 52f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool operator==(const ForwardCharacterIterator& /*that*/) const{ 53f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return TRUE; 54f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 55f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 56f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual CharacterIterator* clone(void) const { 57f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return NULL; 58f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 59f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t hashCode(void) const{ 60f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 61f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 62f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar nextPostInc(void){ return text.charAt(pos++);} 63f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 next32PostInc(void){return text.char32At(pos++);} 64f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool hasNext() { return TRUE;}; 65f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar first(){return DONE;}; 66f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 first32(){return DONE;}; 67f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar last(){return DONE;}; 68f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 last32(){return DONE;}; 69f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar setIndex(int32_t /*pos*/){return DONE;}; 70f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 setIndex32(int32_t /*pos*/){return DONE;}; 71f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar current() const{return DONE;}; 72f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 current32() const{return DONE;}; 73f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar next(){return DONE;}; 74f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 next32(){return DONE;}; 75f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar previous(){return DONE;}; 76f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 previous32(){return DONE;}; 77f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t move(int32_t delta,CharacterIterator::EOrigin origin){ 78f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch(origin) { 79f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kStart: 80f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = begin + delta; 81f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 82f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kCurrent: 83f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos += delta; 84f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 85f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kEnd: 86f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = end + delta; 87f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 88f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: 89f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 90f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 91f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 92f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos < begin) { 93f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = begin; 94f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else if(pos > end) { 95f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = end; 96f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 97f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 98f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return pos; 99f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t move32(int32_t delta, CharacterIterator::EOrigin origin){ 101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch(origin) { 102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kStart: 103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = begin; 104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(delta > 0) { 105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UTF_FWD_N(text, pos, end, delta); 106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kCurrent: 109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(delta > 0) { 110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UTF_FWD_N(text, pos, end, delta); 111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UTF_BACK_N(text, begin, pos, -delta); 113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case kEnd: 116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos = end; 117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(delta < 0) { 118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UTF_BACK_N(text, begin, pos, -delta); 119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: 122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return pos; 126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) }; 127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool hasPrevious() {return TRUE;}; 128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SCharacterIterator& operator=(const SCharacterIterator& that){ 130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) text = that.text; 131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return *this; 132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)private: 136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString text; 137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static const char fgClassID; 138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char SCharacterIterator::fgClassID=0; 140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)#define LENGTHOF(array) ((int32_t)(sizeof(array)/sizeof((array)[0]))) 142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)CharIterTest::CharIterTest() 144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles){ 148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (exec) logln("TestSuite CharIterTest: "); 149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch (index) { 150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 0: name = "TestConstructionAndEquality"; if (exec) TestConstructionAndEquality(); break; 151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 1: name = "TestConstructionAndEqualityUChariter"; if (exec) TestConstructionAndEqualityUChariter(); break; 152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 2: name = "TestIteration"; if (exec) TestIteration(); break; 153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 3: name = "TestIterationUChar32"; if (exec) TestIterationUChar32(); break; 154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 4: name = "TestUCharIterator"; if (exec) TestUCharIterator(); break; 155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 5: name = "TestCoverage"; if(exec) TestCoverage(); break; 156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 6: name = "TestCharIteratorSubClasses"; if (exec) TestCharIteratorSubClasses(); break; 157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: name = ""; break; //needed to end loop 158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestCoverage(){ 162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString testText("Now is the time for all good men to come to the aid of their country."); 163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString testText2("\\ud800\\udc01deadbeef"); 164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testText2 = testText2.unescape(); 165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SCharacterIterator* test = new SCharacterIterator(testText); 166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->firstPostInc()!= 0x004E){ 167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: firstPostInc() failed"); 168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->getIndex()!=1){ 170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: getIndex()."); 171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->getLength()!=testText.length()){ 173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: getLength()"); 174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test->setToStart(); 176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->getIndex()!=0){ 177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: setToStart()."); 178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test->setToEnd(); 180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->getIndex()!=testText.length()){ 181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: setToEnd()."); 182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->startIndex() != 0){ 184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: startIndex()"); 185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test->setText(testText2); 187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test->first32PostInc()!= testText2.char32At(0)){ 188f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Failed: first32PostInc() failed"); 189f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 190f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 191f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test; 192f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 193f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 194f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestConstructionAndEquality() { 195f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString testText("Now is the time for all good men to come to the aid of their country."); 196f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString testText2("Don't bother using this string."); 197f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString result1, result2, result3; 198f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 199f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test1 = new StringCharacterIterator(testText); 200f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test1b= new StringCharacterIterator(testText, -1); 201f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test1c= new StringCharacterIterator(testText, 100); 202f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test1d= new StringCharacterIterator(testText, -2, 100, 5); 203f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test1e= new StringCharacterIterator(testText, 100, 20, 5); 204f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test2 = new StringCharacterIterator(testText, 5); 205f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test3 = new StringCharacterIterator(testText, 2, 20, 5); 206f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test4 = new StringCharacterIterator(testText2); 207f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) CharacterIterator* test5 = test1->clone(); 208f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 209f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1d->startIndex() < 0) 210f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: startIndex is negative"); 211f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1d->endIndex() > testText.length()) 212f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: endIndex is greater than the text length"); 213f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1d->getIndex() < test1d->startIndex() || test1d->endIndex() < test1d->getIndex()) 214f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: index is invalid"); 215f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 216f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 == *test2 || *test1 == *test3 || *test1 == *test4) 217f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction or operator== failed: Unequal objects compared equal"); 218f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test5) 219f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("clone() or equals() failed: Two clones tested unequal"); 220f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 221f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1->hashCode() == test2->hashCode() || test1->hashCode() == test3->hashCode() 222f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) || test1->hashCode() == test4->hashCode()) 223f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hashCode() failed: different objects have same hash code"); 224f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 225f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1->hashCode() != test5->hashCode()) 226f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hashCode() failed: identical objects have different hash codes"); 227f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 228f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(test1->getLength() != testText.length()){ 229f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getLength of CharacterIterator failed"); 230f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 231f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1->getText(result1); 232f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1b->getText(result2); 233f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1c->getText(result3); 234f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result1 != result2 || result1 != result3) 235f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("construction failed or getText() failed"); 236f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 237f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 238f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1->setIndex(5); 239f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test2 || *test1 == *test5) 240f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex() failed"); 241f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 242f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *((StringCharacterIterator*)test1) = *((StringCharacterIterator*)test3); 243f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test3 || *test1 == *test5) 244f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("operator= failed"); 245f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 246f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test2; 247f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test3; 248f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test4; 249f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test5; 250f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1b; 251f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1c; 252f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1d; 253f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1e; 254f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 255f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 256f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator* testChar1=new StringCharacterIterator(testText); 257f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator* testChar2=new StringCharacterIterator(testText2); 258f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator* testChar3=(StringCharacterIterator*)test1->clone(); 259f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 260f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar1->getText(result1); 261f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar2->getText(result2); 262f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar3->getText(result3); 263f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result1 != result3 || result1 == result2) 264f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getText() failed"); 265f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar3->setText(testText2); 266f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar3->getText(result3); 267f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result1 == result3 || result2 != result3) 268f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setText() or getText() failed"); 269f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar3->setText(testText); 270f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) testChar3->getText(result3); 271f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result1 != result3 || result1 == result2) 272f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setText() or getText() round-trip failed"); 273f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 274f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete testChar1; 275f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete testChar2; 276f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete testChar3; 277f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1; 278f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 279f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 280f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestConstructionAndEqualityUChariter() { 281f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRING_DECL(testText, "Now is the time for all good men to come to the aid of their country.", 69); 282f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRING_DECL(testText2, "Don't bother using this string.", 31); 283f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 284f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRING_INIT(testText, "Now is the time for all good men to come to the aid of their country.", 69); 285f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U_STRING_INIT(testText2, "Don't bother using this string.", 31); 286f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 287f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString result, result4, result5; 288f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 289f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test1 = new UCharCharacterIterator(testText, u_strlen(testText)); 290f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test2 = new UCharCharacterIterator(testText, u_strlen(testText), 5); 291f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test3 = new UCharCharacterIterator(testText, u_strlen(testText), 2, 20, 5); 292f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test4 = new UCharCharacterIterator(testText2, u_strlen(testText2)); 293f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test5 = (UCharCharacterIterator*)test1->clone(); 294f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test6 = new UCharCharacterIterator(*test1); 295f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 296f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // j785: length=-1 will use u_strlen() 297f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test7a = new UCharCharacterIterator(testText, -1); 298f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test7b = new UCharCharacterIterator(testText, -1); 299f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test7c = new UCharCharacterIterator(testText, -1, 2, 20, 5); 300f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 301f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // Bad parameters. 302f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test8a = new UCharCharacterIterator(testText, -1, -1, 20, 5); 303f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test8b = new UCharCharacterIterator(testText, -1, 2, 100, 5); 304f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharCharacterIterator* test8c = new UCharCharacterIterator(testText, -1, 2, 20, 100); 305f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 306f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test8a->startIndex() < 0) 307f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: startIndex is negative"); 308f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test8b->endIndex() != u_strlen(testText)) 309f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: endIndex is different from the text length"); 310f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test8c->getIndex() < test8c->startIndex() || test8c->endIndex() < test8c->getIndex()) 311f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction failed: index is invalid"); 312f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 313f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 == *test2 || *test1 == *test3 || *test1 == *test4 ) 314f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Construction or operator== failed: Unequal objects compared equal"); 315f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test5 ) 316f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("clone() or equals() failed: Two clones tested unequal"); 317f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 318f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test6 != *test1 ) 319f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("copy construction or equals() failed: Two copies tested unequal"); 320f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 321f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1->hashCode() == test2->hashCode() || test1->hashCode() == test3->hashCode() 322f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) || test1->hashCode() == test4->hashCode()) 323f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hashCode() failed: different objects have same hash code"); 324f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 325f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test1->hashCode() != test5->hashCode()) 326f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hashCode() failed: identical objects have different hash codes"); 327f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 328f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test7a->getText(result); 329f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test7b->getText(result4); 330f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test7c->getText(result5); 331f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 332f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result != UnicodeString(testText) || result4 != result || result5 != result) 333f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error in construction"); 334f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 335f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1->getText(result); 336f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test4->getText(result4); 337f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test5->getText(result5); 338f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result != result5 || result == result4) 339f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getText() failed"); 340f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test5->setText(testText2, u_strlen(testText2)); 341f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test5->getText(result5); 342f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result == result5 || result4 != result5) 343f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setText() or getText() failed"); 344f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test5->setText(testText, u_strlen(testText)); 345f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test5->getText(result5); 346f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(result != result5 || result == result4) 347f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setText() or getText() round-trip failed"); 348f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 349f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 350f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test1->setIndex(5); 351f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test2 || *test1 == *test5) 352f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex() failed"); 353f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) test8b->setIndex32(5); 354f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (test8b->getIndex()!=5) 355f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32() failed"); 356f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 357f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) *test1 = *test3; 358f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (*test1 != *test3 || *test1 == *test5) 359f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("operator= failed"); 360f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 361f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test1; 362f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test2; 363f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test3; 364f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test4; 365f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test5; 366f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test6; 367f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test7a; 368f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test7b; 369f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test7c; 370f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test8a; 371f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test8b; 372f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete test8c; 373f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 374f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 375f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 376f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestIteration() { 377f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString text("Now is the time for all good men to come to the aid of their country."); 378f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 379f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar c; 380f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i; 381f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 382f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator iter(text, 5); 383f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 384f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString iterText; 385f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iter.getText(iterText); 386f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iterText != text) 387f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("iter.getText() failed"); 388f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 389f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current() != text[(int32_t)5]) 390f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator didn't start out in the right place."); 391f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 392f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.first(); 393f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 0; 394f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 395f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 0 || iter.endIndex() != text.length()) 396f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("startIndex() or endIndex() failed"); 397f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 398f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration..."); 399f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 400f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i != text.length()) 401f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 402f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text[i]) 403f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Character mismatch at position " + i + 404f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", iterator has " + UCharToUnicodeString(c) + 405f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", string has " + UCharToUnicodeString(text[i])); 406f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 407f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current() != c) 408f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() isn't working right"); 409f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 410f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 411f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 412f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 413f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.next(); 414f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i++; 415f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 416f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 417f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.next(); 418f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 419f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("next() didn't return DONE at the end"); 420f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.setIndex(text.length()+1); 421f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 422f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex(len+1) didn't return DONE"); 423f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 424f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.last(); 425f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = text.length() - 1; 426f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 427f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing backward iteration..."); 428f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 429f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i >= 0) 430f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 431f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text[i]) 432f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Character mismatch at position " + i + 433f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", iterator has " + UCharToUnicodeString(c) + 434f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", string has " + UCharToUnicodeString(text[i])); 435f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 436f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current() != c) 437f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() isn't working right"); 438f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 439f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 440f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex(i) != c) 441f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex() isn't working right"); 442f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 443f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 444f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.previous(); 445f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i--; 446f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 447f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 448f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 449f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.previous(); 450f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 451f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("previous didn't return DONE at the beginning"); 452f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 453f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 454f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //testing firstPostInc, nextPostInc, setTostart 455f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 0; 456f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.firstPostInc(); 457f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text[i]) 458f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"firstPostInc failed. Expected->" + 459f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharToUnicodeString(text[i]) + " Got->" + UCharToUnicodeString(c)); 460f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.getIndex() != i+1) 461f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"getIndex() after firstPostInc() failed"); 462f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 463f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iter.setToStart(); 464f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=0; 465f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 0) 466f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setToStart failed"); 467f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 468f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration..."); 469f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 470f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) 471f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.nextPostInc(); 472f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 473f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text[i]) 474f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Character mismatch at position " + i + 475f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (UnicodeString)", iterator has " + UCharToUnicodeString(c) + 476f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (UnicodeString)", string has " + UCharToUnicodeString(text[i])); 477f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 478f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i++; 479f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.getIndex() != i) 480f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() aftr nextPostInc() isn't working right"); 481f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.current() != text[i]) 482f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() after nextPostInc() isn't working right"); 483f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (iter.hasNext()); 484f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.nextPostInc(); 485f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 486f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("nextPostInc() didn't return DONE at the beginning"); 487f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 488f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 489f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 490f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator iter(text, 5, 15, 10); 491f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 5 || iter.endIndex() != 15) 492f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("creation of a restricted-range iterator failed"); 493f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 494f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != 10 || iter.current() != text[(int32_t)10]) 495f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("starting the iterator in the middle didn't work"); 496f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 497f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.first(); 498f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 5; 499f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 500f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration over a range..."); 501f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 502f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i != 15) 503f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 504f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text[i]) 505f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Character mismatch at position " + i + 506f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", iterator has " + UCharToUnicodeString(c) + 507f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", string has " + UCharToUnicodeString(text[i])); 508f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 509f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current() != c) 510f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() isn't working right"); 511f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 512f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 513f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex(i) != c) 514f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex() isn't working right"); 515f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 516f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 517f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.next(); 518f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i++; 519f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 520f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 521f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 522f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.last(); 523f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 14; 524f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 525f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing backward iteration over a range..."); 526f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 527f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i >= 5) 528f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 529f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text[i]) 530f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Character mismatch at position " + i + 531f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", iterator has " + UCharToUnicodeString(c) + 532f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ", string has " + UCharToUnicodeString(text[i])); 533f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 534f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current() != c) 535f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() isn't working right"); 536f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 537f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 538f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 539f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 540f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.previous(); 541f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i--; 542f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 543f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 544f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 545f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 546f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 547f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 548f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 549f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)//Tests for new API for utf-16 support 550f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestIterationUChar32() { 551f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar textChars[]={ 0x0061, 0x0062, 0xd841, 0xdc02, 0x20ac, 0xd7ff, 0xd842, 0xdc06, 0xd801, 0xdc00, 0x0061, 0x0000}; 552f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString text(textChars); 553f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 554f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i; 555f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 556f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator iter(text, 1); 557f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 558f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString iterText; 559f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iter.getText(iterText); 560f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iterText != text) 561f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("iter.getText() failed"); 562f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 563f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current32() != text[(int32_t)1]) 564f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator didn't start out in the right place."); 565f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 566f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.setToStart(); 567f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=0; 568f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=iter.move32(1, CharacterIterator::kStart); 569f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.current32(); 570f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At(1) || i!=1) 571f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("move32(1, kStart) didn't work correctly expected %X got %X", c, text.char32At(1) ); 572f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 573f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=iter.move32(2, CharacterIterator::kCurrent); 574f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.current32(); 575f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At(4) || i!=4) 576f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("move32(2, kCurrent) didn't work correctly expected %X got %X i=%ld", c, text.char32At(4), i); 577f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 578f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=iter.move32(-2, CharacterIterator::kCurrent); 579f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.current32(); 580f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At(1) || i!=1) 581f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("move32(-2, kCurrent) didn't work correctly expected %X got %X i=%d", c, text.char32At(1), i); 582f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 583f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 584f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=iter.move32(-2, CharacterIterator::kEnd); 585f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.current32(); 586f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At((text.length()-3)) || i!=(text.length()-3)) 587f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("move32(-2, kEnd) didn't work correctly expected %X got %X i=%d", c, text.char32At((text.length()-3)), i); 588f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 589f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 590f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.first32(); 591f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 0; 592f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 593f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 0 || iter.endIndex() != text.length()) 594f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("startIndex() or endIndex() failed"); 595f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 596f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration..."); 597f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 598f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* logln("c=%d i=%d char32At=%d", c, i, text.char32At(i)); */ 599f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i != text.length()) 600f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 601f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if(iter.hasNext() == FALSE && i != text.length()) 602f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely. Failed at hasNext"); 603f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text.char32At(i)) 604f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i)); 605f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 606f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current32() != c) 607f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current32() isn't working right"); 608f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex32(i) != c) 609f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32() isn't working right"); 610f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 611f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.next32(); 612f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1; 613f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 614f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 615f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.hasNext() == TRUE) 616f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hasNext() returned true at the end of the string"); 617f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 618f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 619f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 620f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.setToEnd(); 621f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.getIndex() != text.length() || iter.hasNext() != FALSE) 622f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setToEnd failed"); 623f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 624f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.next32(); 625f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 626f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("next32 didn't return DONE at the end"); 627f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.setIndex32(text.length()+1); 628f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 629f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32(len+1) didn't return DONE"); 630f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 631f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 632f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.last32(); 633f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = text.length()-1; 634f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing backward iteration..."); 635f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 636f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i >= 0) 637f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Iterator reached start prematurely for i=" + i); 638f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if(iter.hasPrevious() == FALSE && i>0) 639f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"Iterator reached start prematurely for i=" + i); 640f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text.char32At(i)) 641f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i)); 642f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 643f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current32() != c) 644f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current32() isn't working right"); 645f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex32(i) != c) 646f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32() isn't working right"); 647f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 648f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 649f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 650f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.previous32(); 651f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i-2 : i-1; 652f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 653f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 654f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.hasPrevious() == TRUE) 655f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("hasPrevious returned true after reaching the start"); 656f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 657f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.previous32(); 658f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 659f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("previous32 didn't return DONE at the beginning"); 660f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 661f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 662f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 663f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 664f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) //testing first32PostInc, next32PostInc, setTostart 665f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 0; 666f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.first32PostInc(); 667f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At(i)) 668f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("first32PostInc failed. Expected->%X Got->%X", text.char32At(i), c); 669f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.getIndex() != UTF16_CHAR_LENGTH(c) + i) 670f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln((UnicodeString)"getIndex() after first32PostInc() failed"); 671f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 672f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) iter.setToStart(); 673f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=0; 674f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 0) 675f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setToStart failed"); 676f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 677f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration..."); 678f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 679f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) 680f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.next32PostInc(); 681f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 682f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != text.char32At(i)) 683f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i)); 684f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 685f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1; 686f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.getIndex() != i) 687f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() aftr next32PostInc() isn't working right"); 688f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.current32() != text.char32At(i)) 689f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current() after next32PostInc() isn't working right"); 690f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (iter.hasNext()); 691f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.next32PostInc(); 692f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 693f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("next32PostInc() didn't return DONE at the beginning"); 694f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 695f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 696f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 697f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 698f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 699f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator iter(text, 1, 11, 10); 700f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.startIndex() != 1 || iter.endIndex() != 11) 701f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("creation of a restricted-range iterator failed"); 702f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 703f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != 10 || iter.current32() != text.char32At(10)) 704f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("starting the iterator in the middle didn't work"); 705f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 706f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.first32(); 707f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 708f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 1; 709f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 710f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing forward iteration over a range..."); 711f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 712f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i != 11) 713f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 714f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if(iter.hasNext() == FALSE) 715f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached end prematurely"); 716f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text.char32At(i)) 717f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i)); 718f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 719f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current32() != c) 720f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current32() isn't working right"); 721f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex32(i) != c) 722f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32() isn't working right"); 723f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 724f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 725f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.next32(); 726f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i+2 : i+1; 727f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 728f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 729f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.next32(); 730f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c != CharacterIterator::DONE) 731f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error in next32()"); 732f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 733f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 734f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 735f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.last32(); 736f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i = 10; 737f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) logln("Testing backward iteration over a range..."); 738f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) do { 739f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c == CharacterIterator::DONE && i >= 5) 740f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached start prematurely"); 741f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if(iter.hasPrevious() == FALSE && i > 5) 742f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Iterator reached start prematurely"); 743f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) else if (c != text.char32At(i)) 744f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("Character mismatch at position %d, iterator has %X, string has %X", i, c, text.char32At(i)); 745f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.current32() != c) 746f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("current32() isn't working right"); 747f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (iter.getIndex() != i) 748f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("getIndex() isn't working right"); 749f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(iter.setIndex32(i) != c) 750f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("setIndex32() isn't working right"); 751f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 752f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (c != CharacterIterator::DONE) { 753f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c = iter.previous32(); 754f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) i=UTF16_NEED_MULTIPLE_UCHAR(c) ? i-2 : i-1; 755f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 756f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 757f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } while (c != CharacterIterator::DONE); 758f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter.previous32(); 759f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!= CharacterIterator::DONE) 760f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error on previous32"); 761f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 762f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 763f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 764f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 765f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 766f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestUCharIterator(UCharIterator *iter, CharacterIterator &ci, 767f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *moves, const char *which) { 768f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t m; 769f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c, c2; 770f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UBool h, h2; 771f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 772f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) for(m=0;; ++m) { 773f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // move both iter and s[index] 774f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) switch(moves[m]) { 775f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '0': 776f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasNext(iter); 777f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasNext(); 778f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter->current(iter); 779f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.current(); 780f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 781f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '|': 782f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasNext(iter); 783f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasNext(); 784f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=uiter_current32(iter); 785f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.current32(); 786f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 787f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 788f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '+': 789f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasNext(iter); 790f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasNext(); 791f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter->next(iter); 792f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.nextPostInc(); 793f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 794f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '>': 795f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasNext(iter); 796f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasNext(); 797f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=uiter_next32(iter); 798f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.next32PostInc(); 799f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 800f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 801f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '-': 802f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasPrevious(iter); 803f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasPrevious(); 804f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=iter->previous(iter); 805f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.previous(); 806f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 807f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '<': 808f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=iter->hasPrevious(iter); 809f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h2=ci.hasPrevious(); 810f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=uiter_previous32(iter); 811f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=ci.previous32(); 812f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 813f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 814f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '2': 815f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=h2=FALSE; 816f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=(UChar32)iter->move(iter, 2, UITER_CURRENT); 817f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=(UChar32)ci.move(2, CharacterIterator::kCurrent); 818f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 819f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 820f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case '8': 821f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) h=h2=FALSE; 822f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c=(UChar32)iter->move(iter, -2, UITER_CURRENT); 823f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=(UChar32)ci.move(-2, CharacterIterator::kCurrent); 824f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) break; 825f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 826f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) case 0: 827f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 828f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) default: 829f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: unexpected move character '%c' in \"%s\"", moves[m], moves); 830f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return; 831f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 832f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 833f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // compare results 834f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c2==0xffff) { 835f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) c2=(UChar32)-1; 836f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 837f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(c!=c2 || h!=h2 || ci.getIndex()!=iter->getIndex(iter, UITER_CURRENT)) { 838f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(%s) misbehaving at \"%s\"[%d]='%c'", which, moves, m, moves[m]); 839f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 840f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 841f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 842f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 843f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestUCharIterator() { 844f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // test string of length 8 845f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UnicodeString s=UnicodeString("a \\U00010001b\\U0010fffdz", "").unescape(); 846f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) const char *const moves= 847f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "0+++++++++" // 10 moves per line 848f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "----0-----" 849f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ">>|>>>>>>>" 850f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "<<|<<<<<<<" 851f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) "22+>8>-8+2"; 852f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 853f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) StringCharacterIterator sci(s), compareCI(s); 854f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 855f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UCharIterator sIter, cIter, rIter; 856f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 857f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setString(&sIter, s.getBuffer(), s.length()); 858f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setCharacterIterator(&cIter, &sci); 859f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setReplaceable(&rIter, &s); 860f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 861f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TestUCharIterator(&sIter, compareCI, moves, "uiter_setString"); 862f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) compareCI.setIndex(0); 863f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TestUCharIterator(&cIter, compareCI, moves, "uiter_setCharacterIterator"); 864f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) compareCI.setIndex(0); 865f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) TestUCharIterator(&rIter, compareCI, moves, "uiter_setReplaceable"); 866f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 867f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // test move & getIndex some more 868f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.start=2; 869f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.index=3; 870f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.limit=5; 871f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( sIter.getIndex(&sIter, UITER_ZERO)!=0 || 872f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.getIndex(&sIter, UITER_START)!=2 || 873f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.getIndex(&sIter, UITER_CURRENT)!=3 || 874f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.getIndex(&sIter, UITER_LIMIT)!=5 || 875f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.getIndex(&sIter, UITER_LENGTH)!=s.length() 876f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ) { 877f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(string).getIndex returns wrong index"); 878f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 879f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 880f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( sIter.move(&sIter, 4, UITER_ZERO)!=4 || 881f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.move(&sIter, 1, UITER_START)!=3 || 882f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.move(&sIter, 3, UITER_CURRENT)!=5 || 883f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.move(&sIter, -1, UITER_LIMIT)!=4 || 884f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.move(&sIter, -5, UITER_LENGTH)!=3 || 885f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.move(&sIter, 0, UITER_CURRENT)!=sIter.getIndex(&sIter, UITER_CURRENT) || 886f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sIter.getIndex(&sIter, UITER_CURRENT)!=3 887f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ) { 888f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(string).move sets/returns wrong index"); 889f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 890f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 891f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) sci=StringCharacterIterator(s, 2, 5, 3); 892f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setCharacterIterator(&cIter, &sci); 893f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( cIter.getIndex(&cIter, UITER_ZERO)!=0 || 894f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.getIndex(&cIter, UITER_START)!=2 || 895f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.getIndex(&cIter, UITER_CURRENT)!=3 || 896f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.getIndex(&cIter, UITER_LIMIT)!=5 || 897f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.getIndex(&cIter, UITER_LENGTH)!=s.length() 898f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ) { 899f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(character iterator).getIndex returns wrong index"); 900f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 901f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 902f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if( cIter.move(&cIter, 4, UITER_ZERO)!=4 || 903f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.move(&cIter, 1, UITER_START)!=3 || 904f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.move(&cIter, 3, UITER_CURRENT)!=5 || 905f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.move(&cIter, -1, UITER_LIMIT)!=4 || 906f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.move(&cIter, -5, UITER_LENGTH)!=3 || 907f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.move(&cIter, 0, UITER_CURRENT)!=cIter.getIndex(&cIter, UITER_CURRENT) || 908f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) cIter.getIndex(&cIter, UITER_CURRENT)!=3 909f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) ) { 910f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(character iterator).move sets/returns wrong index"); 911f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 912f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 913f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 914f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(cIter.getIndex(&cIter, (enum UCharIteratorOrigin)-1) != -1) 915f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 916f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(char iter).getIndex did not return error value"); 917f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 918f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 919f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(cIter.move(&cIter, 0, (enum UCharIteratorOrigin)-1) != -1) 920f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 921f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(char iter).move did not return error value"); 922f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 923f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 924f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 925f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(rIter.getIndex(&rIter, (enum UCharIteratorOrigin)-1) != -1) 926f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 927f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(repl iter).getIndex did not return error value"); 928f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 929f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 930f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(rIter.move(&rIter, 0, (enum UCharIteratorOrigin)-1) != -1) 931f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 932f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(repl iter).move did not return error value"); 933f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 934f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 935f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 936f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(sIter.getIndex(&sIter, (enum UCharIteratorOrigin)-1) != -1) 937f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 938f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(string iter).getIndex did not return error value"); 939f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 940f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 941f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(sIter.move(&sIter, 0, (enum UCharIteratorOrigin)-1) != -1) 942f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) { 943f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: UCharIterator(string iter).move did not return error value"); 944f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 945f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 946f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) /* Testing function coverage on bad input */ 947f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UErrorCode status = U_ZERO_ERROR; 948f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setString(&sIter, NULL, 1); 949f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setState(&sIter, 1, &status); 950f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status != U_UNSUPPORTED_ERROR) { 951f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: uiter_setState returned %s instead of U_UNSUPPORTED_ERROR", u_errorName(status)); 952f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 953f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) status = U_ZERO_ERROR; 954f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) uiter_setState(NULL, 1, &status); 955f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (status != U_ILLEGAL_ARGUMENT_ERROR) { 956f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: uiter_setState returned %s instead of U_ILLEGAL_ARGUMENT_ERROR", u_errorName(status)); 957f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 958f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if (uiter_getState(&sIter) != UITER_NO_STATE) { 959f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("error: uiter_getState did not return UITER_NO_STATE on bad input"); 960f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 961f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 962f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 963f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)// subclass test, and completing API coverage ------------------------------- 964f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 965f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)class SubCharIter : public CharacterIterator { 966f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)public: 967f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // public default constructor, to get coverage of CharacterIterator() 968f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubCharIter() : CharacterIterator() { 969f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) textLength=end=LENGTHOF(s); 970f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s[0]=0x61; // 'a' 971f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s[1]=0xd900; // U+50400 972f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s[2]=0xdd00; 973f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) s[3]=0x2029; // PS 974f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 975f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 976f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // useful stuff, mostly dummy but testing coverage and subclassability 977f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar nextPostInc() { 978f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 979f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s[pos++]; 980f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 981f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 982f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 983f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 984f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 985f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 next32PostInc() { 986f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 987f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 988f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_NEXT(s, pos, LENGTHOF(s), c); 989f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c; 990f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 991f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 992f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 993f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 994f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 995f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool hasNext() { 996f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return pos<LENGTHOF(s); 997f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 998f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 999f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar first() { 1000f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=0; 1001f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s[0]; 1002f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1003f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1004f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 first32() { 1005f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 1006f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=0; 1007f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_NEXT(s, pos, LENGTHOF(s), c); 1008f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=0; 1009f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c; 1010f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1011f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1012f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar setIndex(int32_t position) { 1013f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(0<=position && position<=LENGTHOF(s)) { 1014f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=position; 1015f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1016f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s[pos]; 1017f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1018f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1019f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1020f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1021f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1022f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 setIndex32(int32_t position) { 1023f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(0<=position && position<=LENGTHOF(s)) { 1024f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) pos=position; 1025f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1026f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 1027f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_GET(s, 0, pos, LENGTHOF(s), c); 1028f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c; 1029f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1030f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1031f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1032f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1033f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1034f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar current() const { 1035f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1036f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s[pos]; 1037f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1038f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1039f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1040f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1041f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1042f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 current32() const { 1043f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1044f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 1045f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_GET(s, 0, pos, LENGTHOF(s), c); 1046f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c; 1047f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1048f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1049f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1050f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1051f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1052f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar next() { 1053f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s) && ++pos<LENGTHOF(s)) { 1054f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return s[pos]; 1055f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1056f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1057f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1058f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1059f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1060f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 next32() { 1061f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1062f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_FWD_1(s, pos, LENGTHOF(s)); 1063f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1064f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(pos<LENGTHOF(s)) { 1065f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar32 c; 1066f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) int32_t i=pos; 1067f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) U16_NEXT(s, i, LENGTHOF(s), c); 1068f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return c; 1069f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } else { 1070f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return DONE; 1071f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1072f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1073f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1074f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool hasPrevious() { 1075f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return pos>0; 1076f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1077f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1078f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual void getText(UnicodeString &result) { 1079f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) result.setTo(s, LENGTHOF(s)); 1080f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1081f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1082f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // dummy implementations of other pure virtual base class functions 1083f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UBool operator==(const ForwardCharacterIterator &that) const { 1084f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 1085f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) this==&that || 1086f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) (typeid(*this)==typeid(that) && pos==((SubCharIter &)that).pos); 1087f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1088f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1089f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t hashCode() const { 1090f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 2; 1091f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1092f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1093f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual CharacterIterator *clone() const { 1094f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return NULL; 1095f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1096f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1097f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar last() { 1098f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1099f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1100f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1101f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 last32() { 1102f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1103f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1104f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1105f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar previous() { 1106f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1107f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1108f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1109f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UChar32 previous32() { 1110f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1111f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1112f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1113f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t move(int32_t /*delta*/, EOrigin /*origin*/) { 1114f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1115f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1116f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1117f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual int32_t move32(int32_t /*delta*/, EOrigin /*origin*/) { 1118f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return 0; 1119f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1120f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1121f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // RTTI 1122f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static UClassID getStaticClassID() { 1123f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return (UClassID)(&fgClassID); 1124f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1125f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1126f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) virtual UClassID getDynamicClassID() const { 1127f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) return getStaticClassID(); 1128f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1129f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1130f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)private: 1131f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // dummy string data 1132f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) UChar s[4]; 1133f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1134f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static const char fgClassID; 1135f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 1136f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1137f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const char SubCharIter::fgClassID = 0; 1138f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1139f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)class SubStringCharIter : public StringCharacterIterator { 1140f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)public: 1141f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubStringCharIter() { 1142f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) setText(UNICODE_STRING("abc", 3)); 1143f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1144f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 1145f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1146f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)class SubUCharCharIter : public UCharCharacterIterator { 1147f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)public: 1148f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubUCharCharIter() { 1149f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) setText(u, 3); 1150f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1151f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1152f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)private: 1153f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) static const UChar u[3]; 1154f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)}; 1155f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1156f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)const UChar SubUCharCharIter::u[3]={ 0x61, 0x62, 0x63 }; 1157f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1158f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)void CharIterTest::TestCharIteratorSubClasses() { 1159f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubCharIter *p; 1160f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1161f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // coverage - call functions that are not otherwise tested 1162f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // first[32]PostInc() are default implementations that are overridden 1163f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // in ICU's own CharacterIterator subclasses 1164f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) p=new SubCharIter; 1165f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(p->firstPostInc()!=0x61) { 1166f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("SubCharIter.firstPosInc() failed\n"); 1167f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1168f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete p; 1169f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1170f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) p=new SubCharIter[2]; 1171f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(p[1].first32PostInc()!=0x61) { 1172f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("SubCharIter.first32PosInc() failed\n"); 1173f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1174f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) delete [] p; 1175f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1176f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // coverage: StringCharacterIterator default constructor 1177f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubStringCharIter sci; 1178f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(sci.firstPostInc()!=0x61) { 1179f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("SubStringCharIter.firstPostInc() failed\n"); 1180f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1181f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) 1182f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) // coverage: UCharCharacterIterator default constructor 1183f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) SubUCharCharIter uci; 1184f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) if(uci.firstPostInc()!=0x61) { 1185f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) errln("SubUCharCharIter.firstPostInc() failed\n"); 1186f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles) } 1187f4ed1cf5d184064c4cf0e4359c6d5d8aadb50afaTorne (Richard Coles)} 1188