summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp68
1 files changed, 60 insertions, 8 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
index f30203ea80c..79c99e9c224 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
@@ -14,6 +14,7 @@ void PatternModifierTest::runIndexedTest(int32_t index, UBool exec, const char *
}
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(testBasic);
+ TESTCASE_AUTO(testPatternWithNoPlaceholder);
TESTCASE_AUTO(testMutableEqualsImmutable);
TESTCASE_AUTO_END;
}
@@ -31,13 +32,19 @@ void PatternModifierTest::testBasic() {
assertSuccess("Spot 2", status);
mod.setSymbols(&symbols, currency, UNUM_UNIT_WIDTH_SHORT, nullptr);
- mod.setNumberProperties(false, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(1, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
- mod.setNumberProperties(true, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(0, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b", u"+a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
+ assertEquals("Pattern a0b", u"a", getPrefix(mod, status));
+ assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
+ mod.setNumberProperties(-1, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b", u"-a", getPrefix(mod, status));
assertEquals("Pattern a0b", u"b", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_NEVER, false);
@@ -50,24 +57,69 @@ void PatternModifierTest::testBasic() {
assertSuccess("Spot 4", status);
mod.setPatternInfo(&patternInfo2);
mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
- mod.setNumberProperties(false, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(1, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_ALWAYS, false);
assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
- mod.setNumberProperties(true, StandardPlural::Form::COUNT);
+ mod.setNumberProperties(0, StandardPlural::Form::COUNT);
+ assertEquals("Pattern a0b;c-0d", u"c+", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
+ mod.setPatternAttributes(UNUM_SIGN_EXCEPT_ZERO, false);
+ assertEquals("Pattern a0b;c-0d", u"a", getPrefix(mod, status));
+ assertEquals("Pattern a0b;c-0d", u"b", getSuffix(mod, status));
+ mod.setNumberProperties(-1, StandardPlural::Form::COUNT);
assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
mod.setPatternAttributes(UNUM_SIGN_NEVER, false);
- assertEquals(
- "Pattern a0b;c-0d",
- u"c-",
- getPrefix(mod, status)); // TODO: What should this behavior be?
+ // TODO: What should this behavior be?
+ assertEquals("Pattern a0b;c-0d", u"c-", getPrefix(mod, status));
assertEquals("Pattern a0b;c-0d", u"d", getSuffix(mod, status));
assertSuccess("Spot 5", status);
}
+void PatternModifierTest::testPatternWithNoPlaceholder() {
+ UErrorCode status = U_ZERO_ERROR;
+ MutablePatternModifier mod(false);
+ ParsedPatternInfo patternInfo;
+ PatternParser::parseToPatternInfo(u"abc", patternInfo, status);
+ assertSuccess("Spot 1", status);
+ mod.setPatternInfo(&patternInfo);
+ mod.setPatternAttributes(UNUM_SIGN_AUTO, false);
+ DecimalFormatSymbols symbols(Locale::getEnglish(), status);
+ CurrencyUnit currency(u"USD", status);
+ assertSuccess("Spot 2", status);
+ mod.setSymbols(&symbols, currency, UNUM_UNIT_WIDTH_SHORT, nullptr);
+ mod.setNumberProperties(1, StandardPlural::Form::COUNT);
+
+ // Unsafe Code Path
+ NumberStringBuilder nsb;
+ nsb.append(u"x123y", UNUM_FIELD_COUNT, status);
+ assertSuccess("Spot 3", status);
+ mod.apply(nsb, 1, 4, status);
+ assertSuccess("Spot 4", status);
+ assertEquals("Unsafe Path", u"xabcy", nsb.toUnicodeString());
+
+ // Safe Code Path
+ nsb.clear();
+ nsb.append(u"x123y", UNUM_FIELD_COUNT, status);
+ assertSuccess("Spot 5", status);
+ MicroProps micros;
+ LocalPointer<ImmutablePatternModifier> imod(mod.createImmutable(status), status);
+ if (U_FAILURE(status)) {
+ dataerrln("%s %d Error in ImmutablePatternModifier creation",
+ __FILE__, __LINE__);
+ assertSuccess("Spot 6", status);
+ return;
+ }
+ DecimalQuantity quantity;
+ imod->applyToMicros(micros, quantity);
+ micros.modMiddle->apply(nsb, 1, 4, status);
+ assertSuccess("Spot 7", status);
+ assertEquals("Safe Path", u"xabcy", nsb.toUnicodeString());
+}
+
void PatternModifierTest::testMutableEqualsImmutable() {
UErrorCode status = U_ZERO_ERROR;
MutablePatternModifier mod(false);