ICU-12961 port NumberFormatTest.TestLocalizedPatternSymbolCoverage to C++
authorMarkus Scherer <markus.icu@gmail.com>
Mon, 7 May 2018 23:03:56 +0000 (23:03 +0000)
committerMarkus Scherer <markus.icu@gmail.com>
Mon, 7 May 2018 23:03:56 +0000 (23:03 +0000)
X-SVN-Rev: 41341

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

index 41622220702a7f4a7ac2e70cdbeb819efbbe7475..7baf98538d66cca26ba6ec182b8b57ce9808660d 100644 (file)
@@ -594,6 +594,7 @@ void NumberFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &n
   TESTCASE_AUTO(TestCurrencyAmount);
   TESTCASE_AUTO(TestCurrencyUnit);
   TESTCASE_AUTO(TestCoverage);
+  TESTCASE_AUTO(TestLocalizedPatternSymbolCoverage);
   TESTCASE_AUTO(TestJB3832);
   TESTCASE_AUTO(TestHost);
   TESTCASE_AUTO(TestHostClone);
@@ -764,6 +765,58 @@ NumberFormatTest::TestCoverage(void){
     };
 }
 
+void NumberFormatTest::TestLocalizedPatternSymbolCoverage() {
+    IcuTestErrorCode errorCode(*this, "TestLocalizedPatternSymbolCoverage");
+    // Ticket #12961: DecimalFormat::toLocalizedPattern() is not working as designed.
+    DecimalFormatSymbols dfs(errorCode);
+    dfs.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, u'⁖');
+    dfs.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, u'⁘');
+    dfs.setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, u'⁙');
+    dfs.setSymbol(DecimalFormatSymbols::kDigitSymbol, u'▰');
+    dfs.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, u'໐');
+    dfs.setSymbol(DecimalFormatSymbols::kSignificantDigitSymbol, u'⁕');
+    dfs.setSymbol(DecimalFormatSymbols::kPlusSignSymbol, u'†');
+    dfs.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, u'‡');
+    dfs.setSymbol(DecimalFormatSymbols::kPercentSymbol, u'⁜');
+    dfs.setSymbol(DecimalFormatSymbols::kPerMillSymbol, u'‱');
+    dfs.setSymbol(DecimalFormatSymbols::kExponentialSymbol, u"⁑⁑"); // tests multi-char sequence
+    dfs.setSymbol(DecimalFormatSymbols::kPadEscapeSymbol, u'⁂');
+
+    {
+        UnicodeString standardPattern(u"#,##0.05+%;#,##0.05-%");
+        UnicodeString localizedPattern(u"▰⁖▰▰໐⁘໐໕†⁜⁙▰⁖▰▰໐⁘໐໕‡⁜");
+
+        DecimalFormat df1("#", new DecimalFormatSymbols(dfs), errorCode);
+        df1.applyPattern(standardPattern, errorCode);
+        DecimalFormat df2("#", new DecimalFormatSymbols(dfs), errorCode);
+        df2.applyLocalizedPattern(localizedPattern, errorCode);
+        assertTrue("DecimalFormat instances should be equal", df1 == df2);
+        UnicodeString p2;
+        assertEquals("toPattern should match on localizedPattern instance",
+                standardPattern, df2.toPattern(p2));
+        UnicodeString lp1;
+        assertEquals("toLocalizedPattern should match on standardPattern instance",
+                localizedPattern, df1.toLocalizedPattern(lp1));
+    }
+
+    {
+        UnicodeString standardPattern(u"* @@@E0‰");
+        UnicodeString localizedPattern(u"⁂ ⁕⁕⁕⁑⁑໐‱");
+
+        DecimalFormat df1("#", new DecimalFormatSymbols(dfs), errorCode);
+        df1.applyPattern(standardPattern, errorCode);
+        DecimalFormat df2("#", new DecimalFormatSymbols(dfs), errorCode);
+        df2.applyLocalizedPattern(localizedPattern, errorCode);
+        assertTrue("DecimalFormat instances should be equal", df1 == df2);
+        UnicodeString p2;
+        assertEquals("toPattern should match on localizedPattern instance",
+                standardPattern, df2.toPattern(p2));
+        UnicodeString lp1;
+        assertEquals("toLocalizedPattern should match on standardPattern instance",
+                localizedPattern, df1.toLocalizedPattern(lp1));
+    }
+}
+
 // Test various patterns
 void
 NumberFormatTest::TestPatterns(void)
index 5147ef93b6c049d5e4c9c731e6cb0ae02d8db230..6634cd30677562cffcab76bcecf4a5941f09c937 100644 (file)
@@ -45,6 +45,7 @@ class NumberFormatTest: public CalendarTimeZoneTest {
     void TestAPI(void);
 
     void TestCoverage(void);
+    void TestLocalizedPatternSymbolCoverage();
 
     /**
      * Test the handling of quotes