]> granicus.if.org Git - icu/commitdiff
ICU-13634 More assorted number formatting/parsing fixes.
authorShane Carr <shane@unicode.org>
Fri, 30 Mar 2018 10:37:24 +0000 (10:37 +0000)
committerShane Carr <shane@unicode.org>
Fri, 30 Mar 2018 10:37:24 +0000 (10:37 +0000)
X-SVN-Rev: 41179

icu4c/source/i18n/decimfmt.cpp
icu4c/source/test/intltest/numbertest_skeletons.cpp
icu4c/source/test/intltest/numfmtst.cpp
icu4j/main/tests/core/src/com/ibm/icu/dev/test/number/NumberSkeletonTest.java

index 5fd757daeef6980ca8326bf78f5d709cd96cf3f0..b15b962bf84f5b4081a5e0600847f1e18631a941 100644 (file)
@@ -337,7 +337,7 @@ DecimalFormat::DecimalFormat(const UnicodeString& pattern, const DecimalFormatSy
 }
 
 DecimalFormat::DecimalFormat(const DecimalFormat& source) {
-    fProperties.adoptInstead(new DecimalFormatProperties());
+    fProperties.adoptInstead(new DecimalFormatProperties(*source.fProperties));
     fExportedProperties.adoptInstead(new DecimalFormatProperties());
     fWarehouse.adoptInstead(new DecimalFormatWarehouse());
     fSymbols.adoptInstead(new DecimalFormatSymbols(*source.fSymbols));
index 80196f9fc8f2245638f1601fdb6b1829c61034ad..29d09f1a26e53ab36d0867b567072d197f403608 100644 (file)
@@ -121,6 +121,7 @@ void NumberSkeletonTest::invalidTokens() {
             u".00/@@#",
             u".00/@@#+",
             u".00/floor/@@+", // wrong order
+            u"round-increment/français", // non-invariant characters for C++
             u"round-currency-cash/XXX",
             u"scientific/ee",
             u"round-increment/xxx",
@@ -143,7 +144,6 @@ void NumberSkeletonTest::unknownTokens() {
             u"français",
             u"measure-unit/français-français", // non-invariant characters for C++
             u"numbering-system/français", // non-invariant characters for C++
-            u"round-increment/français", // non-invariant characters for C++
             u"currency-USD"};
 
     expectedErrorSkeleton(cases, sizeof(cases) / sizeof(*cases));
index d042ccd7c8658b119255e850a29a29296bc0dcdb..e481acca225b7cb9dbcf6abcae2d62a71ef5d10d 100644 (file)
@@ -753,7 +753,7 @@ NumberFormatTest::TestPatterns(void)
 
     const char* pat[]    = { "#.#", "#.", ".#", "#" };
     int32_t pat_length = UPRV_LENGTHOF(pat);
-    const char* newpat[] = { "#0.#", "#0.", "#.0", "#" };
+    const char* newpat[] = { "0.#", "0.", "#.0", "0" };
     const char* num[]    = { "0",   "0.", ".0", "0" };
     for (int32_t i=0; i<pat_length; ++i)
     {
@@ -1338,7 +1338,7 @@ void NumberFormatTest::TestCurrencyObject() {
                    1234.56, CharsToUnicodeString("\\u00A51,235")); // Yen
 
     expectCurrency(*fmt, Locale("fr", "CH", ""),
-                   1234.56, "CHF1,234.56"); // no more 0.05 rounding here, see cldrbug 5548
+                   1234.56, "CHF 1,234.56"); // no more 0.05 rounding here, see cldrbug 5548
 
     expectCurrency(*fmt, Locale::getUS(),
                    1234.56, "$1,234.56");
@@ -1481,7 +1481,8 @@ NumberFormatTest::TestLenientParse(void)
 
             if (U_FAILURE(status) || n.getType() != Formattable::kLong ||
                n.getLong() != 1) {
-               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t] + (UnicodeString) "\"");
+               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientAffixTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                status = U_ZERO_ERROR;
             }
        }
@@ -1504,7 +1505,8 @@ NumberFormatTest::TestLenientParse(void)
             logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
 
             if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
-                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
+                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                 status = U_ZERO_ERROR;
             }
         }
@@ -1524,7 +1526,8 @@ NumberFormatTest::TestLenientParse(void)
             logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
 
             if (U_FAILURE(status) || n.getType() != Formattable::kLong || n.getLong() != -5) {
-                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t] + (UnicodeString) "\"");
+                errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientMinusTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                 status = U_ZERO_ERROR;
             }
         }
@@ -1545,7 +1548,8 @@ NumberFormatTest::TestLenientParse(void)
 
             if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
                n.getLong() != 1000) {
-               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t] + (UnicodeString) "\"");
+               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientCurrencyTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                status = U_ZERO_ERROR;
             }
         }
@@ -1558,7 +1562,8 @@ NumberFormatTest::TestLenientParse(void)
 
             if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
                n.getLong() != -1000) {
-               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t] + (UnicodeString) "\"");
+               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativeCurrencyTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                status = U_ZERO_ERROR;
             }
         }
@@ -1580,7 +1585,8 @@ NumberFormatTest::TestLenientParse(void)
 
             if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
                n.getDouble() != 0.25) {
-               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t] + (UnicodeString) "\"");
+               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientPercentTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                status = U_ZERO_ERROR;
             }
         }
@@ -1593,7 +1599,8 @@ NumberFormatTest::TestLenientParse(void)
 
             if (U_FAILURE(status) ||n.getType() != Formattable::kDouble ||
                n.getDouble() != -0.25) {
-               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t] + (UnicodeString) "\"");
+               errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) lenientNegativePercentTestCases[t]
+                      + (UnicodeString) "\"; error code = " + u_errorName(status));
                status = U_ZERO_ERROR;
             }
         }
@@ -1616,7 +1623,8 @@ NumberFormatTest::TestLenientParse(void)
               logln((UnicodeString)"parse(" + testCase + ") = " + n.getLong());
 
               if (! U_FAILURE(status)) {
-                      errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
+                      errln((UnicodeString)"Strict Parse succeeded for \"" + (UnicodeString) strictFailureTestCases[t]
+                     + (UnicodeString) "\"; error code = " + u_errorName(status));
               }
 
               status = U_ZERO_ERROR;
@@ -1632,7 +1640,8 @@ NumberFormatTest::TestLenientParse(void)
 
               if (U_FAILURE(status) ||n.getType() != Formattable::kLong ||
                        n.getLong() != 1000) {
-                      errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t] + (UnicodeString) "\"");
+                      errln((UnicodeString)"Lenient parse failed for \"" + (UnicodeString) strictFailureTestCases[t]
+                     + (UnicodeString) "\"; error code = " + u_errorName(status));
                       status = U_ZERO_ERROR;
               }
        }
index 37815f69157b4b611087abb98f62e56d5f683fb0..cd260d54a81187dc22683badb0ed22f6cc39b757 100644 (file)
@@ -115,6 +115,7 @@ public class NumberSkeletonTest {
                 ".00/@@#",
                 ".00/@@#+",
                 ".00/floor/@@+", // wrong order
+                "round-increment/français", // non-invariant characters for C++
                 "round-currency-cash/XXX",
                 "scientific/ee",
                 "round-increment/xxx",
@@ -145,7 +146,6 @@ public class NumberSkeletonTest {
                 "français",
                 "measure-unit/français-français", // non-invariant characters for C++
                 "numbering-system/français", // non-invariant characters for C++
-                "round-increment/français", // non-invariant characters for C++
                 "currency-USD" };
 
         for (String cas : cases) {