X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/a01113dcd0f39d5da295ef82785beff9ed86fe38..340931cb2e044a2141d11567dd0f782524e32994:/icuSources/test/intltest/string_segment_test.cpp diff --git a/icuSources/test/intltest/string_segment_test.cpp b/icuSources/test/intltest/string_segment_test.cpp new file mode 100644 index 00000000..0548d9ad --- /dev/null +++ b/icuSources/test/intltest/string_segment_test.cpp @@ -0,0 +1,120 @@ +// © 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