aa0b0a88e8
X-SVN-Rev: 2
194 lines
7.2 KiB
C++
194 lines
7.2 KiB
C++
/*
|
|
*****************************************************************************************
|
|
* *
|
|
* COPYRIGHT: *
|
|
* (C) Copyright Taligent, Inc., 1997 *
|
|
* (C) Copyright International Business Machines Corporation, 1997-1998 *
|
|
* Licensed Material - Program-Property of IBM - All Rights Reserved. *
|
|
* US Government Users Restricted Rights - Use, duplication, or disclosure *
|
|
* restricted by GSA ADP Schedule Contract with IBM Corp. *
|
|
* *
|
|
*****************************************************************************************
|
|
*/
|
|
|
|
#include "citrtest.h"
|
|
#include "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.size())
|
|
errln("startIndex() or endIndex() failed");
|
|
|
|
logln("Testing forward iteration...");
|
|
do {
|
|
if (c == CharacterIterator::DONE && i != text.size())
|
|
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.size() - 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);
|
|
}
|
|
}
|