// © 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 "numbertest.h" #include "numparse_stringsegment.h" 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() { StringSegment segment(SAMPLE_STRING, 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() { StringSegment segment(SAMPLE_STRING, 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() { StringSegment segment(SAMPLE_STRING, 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() { StringSegment segment(SAMPLE_STRING, 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() { StringSegment segment(SAMPLE_STRING, 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")); } #endif