]> granicus.if.org Git - icu/commitdiff
ICU-12567 port NumberFormatTest.Test12567 to C++
authorMarkus Scherer <markus.icu@gmail.com>
Mon, 7 May 2018 22:07:43 +0000 (22:07 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Mon, 7 May 2018 22:07:43 +0000 (22:07 +0000)
X-SVN-Rev: 41335

icu4c/source/i18n/decimfmt.cpp
icu4c/source/test/intltest/numfmtst.cpp
icu4c/source/test/intltest/numfmtst.h

index 662325bcc9e496c7d19a610f51216e17cef92609..8e37bd2e84e6fe82225e345764481433d7b6cd43 100644 (file)
@@ -623,7 +623,11 @@ void DecimalFormat::adoptCurrencyPluralInfo(CurrencyPluralInfo* toAdopt) {
 }
 
 void DecimalFormat::setCurrencyPluralInfo(const CurrencyPluralInfo& info) {
-    *fields->properties->currencyPluralInfo.fPtr = info; // copy-assignment operator
+    if (fields->properties->currencyPluralInfo.fPtr.isNull()) {
+        fields->properties->currencyPluralInfo.fPtr.adoptInstead(info.clone());
+    } else {
+        *fields->properties->currencyPluralInfo.fPtr = info; // copy-assignment operator
+    }
     touchNoError();
 }
 
index 754679b6d7e6b7899f77b0f30a3af0d25d578631..e5178ed63f5716b8f5ac610b80840eecbd9f3ef1 100644 (file)
@@ -665,6 +665,7 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n
   TESTCASE_AUTO(Test11897_LocalizedPatternSeparator);
   TESTCASE_AUTO(Test10354);
   TESTCASE_AUTO(Test11645_ApplyPatternEquality);
+  TESTCASE_AUTO(Test12567);
   TESTCASE_AUTO_END;
 }
 
@@ -9220,4 +9221,22 @@ void NumberFormatTest::Test11645_ApplyPatternEquality() {
     assertFalse("currencyUsage", *fmt == *fmtCopy);
 }
 
+void NumberFormatTest::Test12567() {
+    IcuTestErrorCode errorCode(*this, "Test12567");
+    // Ticket #12567: DecimalFormat.equals() may not be symmetric
+    LocalPointer<DecimalFormat> df1((DecimalFormat *)
+        NumberFormat::createInstance(Locale::getUS(), UNUM_CURRENCY_PLURAL, errorCode));
+    LocalPointer<DecimalFormat> df2((DecimalFormat *)
+        NumberFormat::createInstance(Locale::getUS(), UNUM_DECIMAL, errorCode));
+    df2->setCurrency(df1->getCurrency());
+    df2->setCurrencyPluralInfo(*df1->getCurrencyPluralInfo());
+    df1->applyPattern(u"0.00", errorCode);
+    df2->applyPattern(u"0.00", errorCode);
+    // TODO(shane): assertTrue("df1 == df2", *df1 == *df2);
+    // TODO(shane): assertTrue("df2 == df1", *df2 == *df1);
+    df2->setPositivePrefix(u"abc");
+    assertTrue("df1 != df2", *df1 != *df2);
+    assertTrue("df2 != df1", *df2 != *df1);
+}
+
 #endif /* #if !UCONFIG_NO_FORMATTING */
index af0bd5bf11d59b85b28262fc38ebdb7f17ff8971..8a5b35681a5df9d3a647b3d9dcb0d5e52d1160f5 100644 (file)
@@ -230,6 +230,7 @@ class NumberFormatTest: public CalendarTimeZoneTest {
     void Test11897_LocalizedPatternSeparator();
     void Test10354();
     void Test11645_ApplyPatternEquality();
+    void Test12567();
 
  private:
     UBool testFormattableAsUFormattable(const char *file, int line, Formattable &f);