diff options
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.cpp | 68 |
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); |