summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp53
1 files changed, 52 insertions, 1 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
index 323c4bd6859..76d27e1b12a 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
@@ -23,6 +23,7 @@ void NumberStringBuilderTest::runIndexedTest(int32_t index, UBool exec, const ch
}
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(testInsertAppendUnicodeString);
+ TESTCASE_AUTO(testSplice);
TESTCASE_AUTO(testInsertAppendCodePoint);
TESTCASE_AUTO(testCopy);
TESTCASE_AUTO(testFields);
@@ -75,6 +76,55 @@ void NumberStringBuilderTest::testInsertAppendUnicodeString() {
}
}
+void NumberStringBuilderTest::testSplice() {
+ const struct TestCase {
+ const char16_t* input;
+ const int32_t startThis;
+ const int32_t endThis;
+ } cases[] = {
+ { u"", 0, 0 },
+ { u"abc", 0, 0 },
+ { u"abc", 1, 1 },
+ { u"abc", 1, 2 },
+ { u"abc", 0, 2 },
+ { u"abc", 0, 3 },
+ { u"lorem ipsum dolor sit amet", 8, 8 },
+ { u"lorem ipsum dolor sit amet", 8, 11 }, // 3 chars, equal to replacement "xyz"
+ { u"lorem ipsum dolor sit amet", 8, 18 } }; // 10 chars, larger than several replacements
+
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString sb1;
+ NumberStringBuilder sb2;
+ for (auto cas : cases) {
+ for (const char16_t* replacementPtr : EXAMPLE_STRINGS) {
+ UnicodeString replacement(replacementPtr);
+
+ // Test replacement with full string
+ sb1.remove();
+ sb1.append(cas.input);
+ sb1.replace(cas.startThis, cas.endThis - cas.startThis, replacement);
+ sb2.clear();
+ sb2.append(cas.input, UNUM_FIELD_COUNT, status);
+ sb2.splice(cas.startThis, cas.endThis, replacement, 0, replacement.length(), UNUM_FIELD_COUNT, status);
+ assertSuccess("Splicing into sb2 first time", status);
+ assertEqualsImpl(sb1, sb2);
+
+ // Test replacement with partial string
+ if (replacement.length() <= 2) {
+ continue;
+ }
+ sb1.remove();
+ sb1.append(cas.input);
+ sb1.replace(cas.startThis, cas.endThis - cas.startThis, UnicodeString(replacement, 1, 2));
+ sb2.clear();
+ sb2.append(cas.input, UNUM_FIELD_COUNT, status);
+ sb2.splice(cas.startThis, cas.endThis, replacement, 1, 3, UNUM_FIELD_COUNT, status);
+ assertSuccess("Splicing into sb2 second time", status);
+ assertEqualsImpl(sb1, sb2);
+ }
+ }
+}
+
void NumberStringBuilderTest::testInsertAppendCodePoint() {
static const UChar32 cases[] = {
0, 1, 60, 127, 128, 0x7fff, 0x8000, 0xffff, 0x10000, 0x1f000, 0x10ffff};
@@ -230,7 +280,8 @@ void NumberStringBuilderTest::assertEqualsImpl(const UnicodeString &a, const Num
for (int32_t i = 0; i < a.length(); i++) {
IntlTest::assertEquals(
UnicodeString(u"Char at position ") + Int64ToUnicodeString(i) +
- UnicodeString(u" in string ") + a, a.charAt(i), b.charAt(i));
+ UnicodeString(u" in \"") + a + UnicodeString("\" versus \"") +
+ b.toUnicodeString() + UnicodeString("\""), a.charAt(i), b.charAt(i));
}
}