summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp59
1 files changed, 43 insertions, 16 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
index 831642241e6..1a4ec97f37d 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
@@ -49,6 +49,7 @@ void ListFormatterTest::runIndexedTest(int32_t index, UBool exec,
TESTCASE_AUTO(TestContextual);
TESTCASE_AUTO(TestNextPosition);
TESTCASE_AUTO(TestInt32Overflow);
+ TESTCASE_AUTO(Test21871);
TESTCASE_AUTO_END;
}
@@ -276,7 +277,7 @@ void ListFormatterTest::RunTestFieldPositionIteratorWithNItemsPatternShift(
const char* testName) {
IcuTestErrorCode errorCode(*this, testName);
LocalPointer<ListFormatter> formatter(ListFormatter::createInstance(
- Locale("ur", "IN"),
+ Locale("ur", "IN"), // in CLDR 41 alpha1 the "backwards order" patterns in this and other locales were removed.
ULISTFMT_TYPE_UNITS,
ULISTFMT_WIDTH_NARROW,
errorCode));
@@ -329,21 +330,21 @@ void ListFormatterTest::TestFieldPositionIteratorWith3Items() {
}
void ListFormatterTest::TestFieldPositionIteratorWith3ItemsPatternShift() {
- // 0 1
- // 012345678901234
- // "cc bbb a"
+ // Note: In CLDR 41 alpha1 the "backwards order" patterns in ur_IN (and one or two
+ // other locales) were removed, ur_IN now just inherits list patterns from ur.
+ // So this test may no longer be interesting.
UnicodeString data[3] = {"a", "bbb", "cc"};
int32_t expected[] = {
- ULISTFMT_ELEMENT_FIELD, 7, 8,
- ULISTFMT_LITERAL_FIELD, 6, 7,
+ ULISTFMT_ELEMENT_FIELD, 0, 1,
+ ULISTFMT_LITERAL_FIELD, 1, 3,
ULISTFMT_ELEMENT_FIELD, 3, 6,
- ULISTFMT_LITERAL_FIELD, 2, 3,
- ULISTFMT_ELEMENT_FIELD, 0, 2
+ ULISTFMT_LITERAL_FIELD, 6, 12,
+ ULISTFMT_ELEMENT_FIELD, 12, 14
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
RunTestFieldPositionIteratorWithNItemsPatternShift(
data, 3, expected, tupleCount,
- u"cc bbb a",
+ u"a، bbb، اور cc",
"TestFieldPositionIteratorWith3ItemsPatternShift");
}
@@ -365,19 +366,19 @@ void ListFormatterTest::TestFieldPositionIteratorWith2Items() {
}
void ListFormatterTest::TestFieldPositionIteratorWith2ItemsPatternShift() {
- // 0 1
- // 01234567890
- // "cc bbb"
+ // Note: In CLDR 41 alpha1 the "backwards order" patterns in ur_IN (and one or two
+ // other locales) were removed, ur_IN now just inherits list patterns from ur.
+ // So this test may no longer be interesting.
UnicodeString data[2] = {"bbb", "cc"};
int32_t expected[] = {
- ULISTFMT_ELEMENT_FIELD, 3, 6,
- ULISTFMT_LITERAL_FIELD, 2, 3,
- ULISTFMT_ELEMENT_FIELD, 0, 2
+ ULISTFMT_ELEMENT_FIELD, 0, 3,
+ ULISTFMT_LITERAL_FIELD, 3, 8,
+ ULISTFMT_ELEMENT_FIELD, 8, 10
};
int32_t tupleCount = sizeof(expected)/(3 * sizeof(*expected));
RunTestFieldPositionIteratorWithNItemsPatternShift(
data, 2, expected, tupleCount,
- u"cc bbb",
+ u"bbb اور cc",
"TestFieldPositionIteratorWith2ItemsPatternShift");
}
@@ -840,4 +841,30 @@ void ListFormatterTest::TestInt32Overflow() {
status.expectErrorAndReset(U_INPUT_TOO_LONG_ERROR);
}
+
+void ListFormatterTest::Test21871() {
+ IcuTestErrorCode status(*this, "Test21871");
+ LocalPointer<ListFormatter> fmt(ListFormatter::createInstance("en", status), status);
+ {
+ UnicodeString strings[] = {{u"A"}, {u""}};
+ FormattedList result = fmt->formatStringsToValue(strings, 2, status);
+ ConstrainedFieldPosition cfp;
+ cfp.constrainField(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD);
+ assertTrue("nextPosition 1", result.nextPosition(cfp, status));
+ assertEquals("start", cfp.getStart(), 0);
+ assertEquals("limit", cfp.getLimit(), 1);
+ assertFalse("nextPosition 2", result.nextPosition(cfp, status));
+ }
+ {
+ UnicodeString strings[] = {{u""}, {u"B"}};
+ FormattedList result = fmt->formatStringsToValue(strings, 2, status);
+ ConstrainedFieldPosition cfp;
+ cfp.constrainField(UFIELD_CATEGORY_LIST, ULISTFMT_ELEMENT_FIELD);
+ assertTrue("nextPosition 1", result.nextPosition(cfp, status));
+ assertEquals("start", cfp.getStart(), 5);
+ assertEquals("limit", cfp.getLimit(), 6);
+ assertFalse("nextPosition 2", result.nextPosition(cfp, status));
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */