6daab85db4
- StringSegment, ICU4C: * Moved to top icu namespace * Compilation unit renamed to string_segment. - NumberStringBuilder, C and J: * Moved to main icu namespace * Compilation unit renamed to formatted_string_builder * Renamed class to FormattedStringBuilder - Moves nextPosition logic of NumberStringBuilder to helper class
121 lines
4.7 KiB
C++
121 lines
4.7 KiB
C++
// © 2018 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#if !UCONFIG_NO_FORMATTING
|
|
|
|
#include "string_segment.h"
|
|
#include "intltest.h"
|
|
|
|
class StringSegmentTest : public IntlTest {
|
|
public:
|
|
void testOffset();
|
|
void testLength();
|
|
void testCharAt();
|
|
void testGetCodePoint();
|
|
void testCommonPrefixLength();
|
|
|
|
void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par = 0);
|
|
};
|
|
|
|
static const char16_t* SAMPLE_STRING = u"📻 radio 📻";
|
|
|
|
void StringSegmentTest::runIndexedTest(int32_t index, UBool exec, const char*&name, char*) {
|
|
if (exec) {
|
|
logln("TestSuite StringSegmentTest: ");
|
|
}
|
|
TESTCASE_AUTO_BEGIN;
|
|
TESTCASE_AUTO(testOffset);
|
|
TESTCASE_AUTO(testLength);
|
|
TESTCASE_AUTO(testCharAt);
|
|
TESTCASE_AUTO(testGetCodePoint);
|
|
TESTCASE_AUTO(testCommonPrefixLength);
|
|
TESTCASE_AUTO_END;
|
|
}
|
|
|
|
void StringSegmentTest::testOffset() {
|
|
// Note: sampleString needs function scope so it is valid while the StringSegment is valid
|
|
UnicodeString sampleString(SAMPLE_STRING);
|
|
StringSegment segment(sampleString, false);
|
|
assertEquals("Initial Offset", 0, segment.getOffset());
|
|
segment.adjustOffset(3);
|
|
assertEquals("Adjust A", 3, segment.getOffset());
|
|
segment.adjustOffset(2);
|
|
assertEquals("Adjust B", 5, segment.getOffset());
|
|
segment.setOffset(4);
|
|
assertEquals("Set Offset", 4, segment.getOffset());
|
|
}
|
|
|
|
void StringSegmentTest::testLength() {
|
|
// Note: sampleString needs function scope so it is valid while the StringSegment is valid
|
|
UnicodeString sampleString(SAMPLE_STRING);
|
|
StringSegment segment(sampleString, false);
|
|
assertEquals("Initial length", 11, segment.length());
|
|
segment.adjustOffset(3);
|
|
assertEquals("Adjust", 8, segment.length());
|
|
segment.setLength(4);
|
|
assertEquals("Set Length", 4, segment.length());
|
|
segment.setOffset(5);
|
|
assertEquals("After adjust offset", 2, segment.length());
|
|
segment.resetLength();
|
|
assertEquals("After reset length", 6, segment.length());
|
|
}
|
|
|
|
void StringSegmentTest::testCharAt() {
|
|
// Note: sampleString needs function scope so it is valid while the StringSegment is valid
|
|
UnicodeString sampleString(SAMPLE_STRING);
|
|
StringSegment segment(sampleString, false);
|
|
assertEquals("Initial", SAMPLE_STRING, segment.toUnicodeString());
|
|
assertEquals("Initial", SAMPLE_STRING, segment.toTempUnicodeString());
|
|
segment.adjustOffset(3);
|
|
assertEquals("After adjust-offset", UnicodeString(u"radio 📻"), segment.toUnicodeString());
|
|
assertEquals("After adjust-offset", UnicodeString(u"radio 📻"), segment.toTempUnicodeString());
|
|
segment.setLength(5);
|
|
assertEquals("After adjust-length", UnicodeString(u"radio"), segment.toUnicodeString());
|
|
assertEquals("After adjust-length", UnicodeString(u"radio"), segment.toTempUnicodeString());
|
|
}
|
|
|
|
void StringSegmentTest::testGetCodePoint() {
|
|
// Note: sampleString needs function scope so it is valid while the StringSegment is valid
|
|
UnicodeString sampleString(SAMPLE_STRING);
|
|
StringSegment segment(sampleString, false);
|
|
assertEquals("Double-width code point", 0x1F4FB, segment.getCodePoint());
|
|
segment.setLength(1);
|
|
assertEquals("Inalid A", -1, segment.getCodePoint());
|
|
segment.resetLength();
|
|
segment.adjustOffset(1);
|
|
assertEquals("Invalid B", -1, segment.getCodePoint());
|
|
segment.adjustOffset(1);
|
|
assertEquals("Valid again", 0x20, segment.getCodePoint());
|
|
}
|
|
|
|
void StringSegmentTest::testCommonPrefixLength() {
|
|
// Note: sampleString needs function scope so it is valid while the StringSegment is valid
|
|
UnicodeString sampleString(SAMPLE_STRING);
|
|
StringSegment segment(sampleString, false);
|
|
assertEquals("", 11, segment.getCommonPrefixLength(SAMPLE_STRING));
|
|
assertEquals("", 4, segment.getCommonPrefixLength(u"📻 r"));
|
|
assertEquals("", 3, segment.getCommonPrefixLength(u"📻 x"));
|
|
assertEquals("", 0, segment.getCommonPrefixLength(u"x"));
|
|
segment.adjustOffset(3);
|
|
assertEquals("", 0, segment.getCommonPrefixLength(u"RADiO"));
|
|
assertEquals("", 5, segment.getCommonPrefixLength(u"radio"));
|
|
assertEquals("", 2, segment.getCommonPrefixLength(u"rafio"));
|
|
assertEquals("", 0, segment.getCommonPrefixLength(u"fadio"));
|
|
segment.setLength(3);
|
|
assertEquals("", 3, segment.getCommonPrefixLength(u"radio"));
|
|
assertEquals("", 2, segment.getCommonPrefixLength(u"rafio"));
|
|
assertEquals("", 0, segment.getCommonPrefixLength(u"fadio"));
|
|
segment.resetLength();
|
|
segment.setOffset(11); // end of string
|
|
assertEquals("", 0, segment.getCommonPrefixLength(u"foo"));
|
|
}
|
|
|
|
|
|
extern IntlTest *createStringSegmentTest() {
|
|
return new StringSegmentTest();
|
|
}
|
|
|
|
#endif
|