blob: 9bf56d5f804a857f771167f4b26751f9a2ba8c76 [file] [log] [blame]
/********************************************************************
* COPYRIGHT:
* Copyright (c) 1997-1999, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
#include "citrtest.h"
#include "unicode/schriter.h"
CharIterTest::CharIterTest()
{
}
CharIterTest::~CharIterTest()
{
}
void CharIterTest::runIndexedTest( int32_t index, bool_t exec, char* &name, char* par )
{
if (exec) logln("TestSuite LocaleTest: ");
switch (index) {
case 0: name = "TestConstructionAndEquality"; if (exec) TestConstructionAndEquality(); break;
case 1: name = "TestIteration"; if (exec) TestIteration(); break;
default: name = ""; break; //needed to end loop
}
}
void CharIterTest::TestConstructionAndEquality() {
UnicodeString testText("Now is the time for all good men to come to the aid of their country.");
UnicodeString testText2("Don't bother using this string.");
CharacterIterator* test1 = new StringCharacterIterator(testText);
CharacterIterator* test2 = new StringCharacterIterator(testText, 5);
CharacterIterator* test3 = new StringCharacterIterator(testText, 2, 20, 5);
CharacterIterator* test4 = new StringCharacterIterator(testText2);
CharacterIterator* test5 = test1->clone();
if (*test1 == *test2 || *test1 == *test3 || *test1 == *test4)
errln("Construction or operator== failed: Unequal objects compared equal");
if (*test1 != *test5)
errln("clone() or equals() failed: Two clones tested unequal");
if (test1->hashCode() == test2->hashCode() || test1->hashCode() == test3->hashCode()
|| test1->hashCode() == test4->hashCode())
errln("hashCode() failed: different objects have same hash code");
if (test1->hashCode() != test5->hashCode())
errln("hashCode() failed: identical objects have different hash codes");
test1->setIndex(5);
if (*test1 != *test2 || *test1 == *test5)
errln("setIndex() failed");
*((StringCharacterIterator*)test1) = *((StringCharacterIterator*)test3);
if (*test1 != *test3 || *test1 == *test5)
errln("operator= failed");
delete test1;
delete test2;
delete test3;
delete test4;
delete test5;
}
void CharIterTest::TestIteration() {
UnicodeString text("Now is the time for all good men to come to the aid of their country.");
UChar c;
UTextOffset i;
{
StringCharacterIterator iter(text, 5);
UnicodeString iterText;
iter.getText(iterText);
if (iterText != text)
errln("iter.getText() failed");
if (iter.current() != text[(UTextOffset)5])
errln("Iterator didn't start out in the right place.");
c = iter.first();
i = 0;
if (iter.startIndex() != 0 || iter.endIndex() != text.length())
errln("startIndex() or endIndex() failed");
logln("Testing forward iteration...");
do {
if (c == CharacterIterator::DONE && i != text.length())
errln("Iterator reached end prematurely");
else if (c != text[i])
errln((UnicodeString)"Character mismatch at position " + i +
", iterator has " + UCharToUnicodeString(c) +
", string has " + UCharToUnicodeString(text[i]));
if (iter.current() != c)
errln("current() isn't working right");
if (iter.getIndex() != i)
errln("getIndex() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.next();
i++;
}
} while (c != CharacterIterator::DONE);
c = iter.last();
i = text.length() - 1;
logln("Testing backward iteration...");
do {
if (c == CharacterIterator::DONE && i >= 0)
errln("Iterator reached end prematurely");
else if (c != text[i])
errln((UnicodeString)"Character mismatch at position " + i +
", iterator has " + UCharToUnicodeString(c) +
", string has " + UCharToUnicodeString(text[i]));
if (iter.current() != c)
errln("current() isn't working right");
if (iter.getIndex() != i)
errln("getIndex() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.previous();
i--;
}
} while (c != CharacterIterator::DONE);
}
{
StringCharacterIterator iter(text, 5, 15, 10);
if (iter.startIndex() != 5 || iter.endIndex() != 15)
errln("creation of a restricted-range iterator failed");
if (iter.getIndex() != 10 || iter.current() != text[(UTextOffset)10])
errln("starting the iterator in the middle didn't work");
c = iter.first();
i = 5;
logln("Testing forward iteration over a range...");
do {
if (c == CharacterIterator::DONE && i != 15)
errln("Iterator reached end prematurely");
else if (c != text[i])
errln((UnicodeString)"Character mismatch at position " + i +
", iterator has " + UCharToUnicodeString(c) +
", string has " + UCharToUnicodeString(text[i]));
if (iter.current() != c)
errln("current() isn't working right");
if (iter.getIndex() != i)
errln("getIndex() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.next();
i++;
}
} while (c != CharacterIterator::DONE);
c = iter.last();
i = 14;
logln("Testing backward iteration over a range...");
do {
if (c == CharacterIterator::DONE && i >= 5)
errln("Iterator reached end prematurely");
else if (c != text[i])
errln((UnicodeString)"Character mismatch at position " + i +
", iterator has " + UCharToUnicodeString(c) +
", string has " + UCharToUnicodeString(text[i]));
if (iter.current() != c)
errln("current() isn't working right");
if (iter.getIndex() != i)
errln("getIndex() isn't working right");
if (c != CharacterIterator::DONE) {
c = iter.previous();
i--;
}
} while (c != CharacterIterator::DONE);
}
}