1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************** 285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho * COPYRIGHT: 359d709d503bab6e2b61931737e662dd293b40578ccornelius * Copyright (c) 1997-2013, International Business Machines Corporation and 4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * others. All Rights Reserved. 5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ********************************************************************/ 6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h" 8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/dcfmtsym.h" 12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/decimfmt.h" 13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/unum.h" 14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "tsdcfmsy.h" 15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid IntlTestDecimalFormatSymbols::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 1859d709d503bab6e2b61931737e662dd293b40578ccornelius if (exec) { 1959d709d503bab6e2b61931737e662dd293b40578ccornelius logln("TestSuite DecimalFormatSymbols:"); 20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 2159d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO_BEGIN; 2259d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(testSymbols); 2359d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO(testLastResortData); 2459d709d503bab6e2b61931737e662dd293b40578ccornelius TESTCASE_AUTO_END; 25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/** 28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * Test the API of DecimalFormatSymbols; primarily a simple get/set set. 29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */ 30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid IntlTestDecimalFormatSymbols::testSymbols(/* char *par */) 31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{ 32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DecimalFormatSymbols fr(Locale::getFrench(), status); 35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)) { 3685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errcheckln(status, "ERROR: Couldn't create French DecimalFormatSymbols - %s", u_errorName(status)); 3785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return; 38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DecimalFormatSymbols en(Locale::getEnglish(), status); 42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)) { 4385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errcheckln(status, "ERROR: Couldn't create English DecimalFormatSymbols - %s", u_errorName(status)); 4485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho return; 45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(en == fr || ! (en != fr) ) { 48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: English DecimalFormatSymbols equal to French"); 49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // just do some VERY basic tests to make sure that get/set work 52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString zero = en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol); 54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero); 55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol)) { 56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set ZeroDigit failed"); 57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString group = en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol); 60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, group); 61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)) { 62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set GroupingSeparator failed"); 63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString decimal = en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol); 66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, decimal); 67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol)) { 68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set DecimalSeparator failed"); 69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString perMill = en.getSymbol(DecimalFormatSymbols::kPerMillSymbol); 72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kPerMillSymbol, perMill); 73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kPerMillSymbol) != en.getSymbol(DecimalFormatSymbols::kPerMillSymbol)) { 74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set PerMill failed"); 75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString percent = en.getSymbol(DecimalFormatSymbols::kPercentSymbol); 78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kPercentSymbol, percent); 79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kPercentSymbol) != en.getSymbol(DecimalFormatSymbols::kPercentSymbol)) { 80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set Percent failed"); 81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString digit(en.getSymbol(DecimalFormatSymbols::kDigitSymbol)); 84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kDigitSymbol, digit); 85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kDigitSymbol)) { 86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set Percent failed"); 87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString patternSeparator = en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol); 90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, patternSeparator); 91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol)) { 92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set PatternSeparator failed"); 93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString infinity(en.getSymbol(DecimalFormatSymbols::kInfinitySymbol)); 96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kInfinitySymbol, infinity); 97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString infinity2(fr.getSymbol(DecimalFormatSymbols::kInfinitySymbol)); 98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(infinity != infinity2) { 99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set Infinity failed"); 100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString nan(en.getSymbol(DecimalFormatSymbols::kNaNSymbol)); 103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kNaNSymbol, nan); 104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString nan2(fr.getSymbol(DecimalFormatSymbols::kNaNSymbol)); 105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(nan != nan2) { 106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set NaN failed"); 107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString minusSign = en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol); 110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, minusSign); 111ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kMinusSignSymbol) != en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol)) { 112ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set MinusSign failed"); 113ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 11485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 115ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString exponential(en.getSymbol(DecimalFormatSymbols::kExponentialSymbol)); 116ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru fr.setSymbol(DecimalFormatSymbols::kExponentialSymbol, exponential); 117ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(fr.getSymbol(DecimalFormatSymbols::kExponentialSymbol) != en.getSymbol(DecimalFormatSymbols::kExponentialSymbol)) { 118ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: get/set Exponential failed"); 119ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 120ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 12185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Test get currency spacing before the currency. 12285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 123b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t i = 0; i < (int32_t)UNUM_CURRENCY_SPACING_COUNT; i++) { 12485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing( 125b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (UCurrencySpacing)i, TRUE, status); 12685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)) { 12785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("Error: cannot get CurrencyMatch for locale:en"); 12885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 12985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing( 131b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (UCurrencySpacing)i, TRUE, status); 13285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)) { 13385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("Error: cannot get CurrencyMatch for locale:fr"); 13485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (enCurrencyPattern != frCurrencyPattern) { 13685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("ERROR: get CurrencySpacing failed"); 13785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 13985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Test get currencySpacing after the currency. 14085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (int32_t i = 0; i < UNUM_CURRENCY_SPACING_COUNT; i++) { 14285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing( 143b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (UCurrencySpacing)i, FALSE, status); 14485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)) { 14585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("Error: cannot get CurrencyMatch for locale:en"); 14685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 14785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 14885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing( 149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho (UCurrencySpacing)i, FALSE, status); 15085bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if(U_FAILURE(status)) { 15185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("Error: cannot get CurrencyMatch for locale:fr"); 15285bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (enCurrencyPattern != frCurrencyPattern) { 15485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("ERROR: get CurrencySpacing failed"); 15585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 15785bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho // Test set curerncySpacing APIs 15885bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho status = U_ZERO_ERROR; 15985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString dash = UnicodeString("-"); 160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho en.setPatternForCurrencySpacing(UNUM_CURRENCY_INSERT, TRUE, dash); 16185bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho UnicodeString enCurrencyInsert = en.getPatternForCurrencySpacing( 162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UNUM_CURRENCY_INSERT, TRUE, status); 16385bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho if (dash != enCurrencyInsert) { 16485bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho errln("Error: Failed to setCurrencyInsert for locale:en"); 16585bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho } 16685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 167ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru status = U_ZERO_ERROR; 168ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DecimalFormatSymbols foo(status); 16985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 170ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DecimalFormatSymbols bar(foo); 171ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 172ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru en = fr; 173ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 174ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(en != fr || foo != bar) { 175ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("ERROR: Copy Constructor or Assignment failed"); 176ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 177ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 178ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru // test get/setSymbol() 179ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if((int) UNUM_FORMAT_SYMBOL_COUNT != (int) DecimalFormatSymbols::kFormatSymbolCount) { 180ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("unum.h and decimfmt.h have inconsistent numbers of format symbols!"); 181ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru return; 182ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 183ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 184ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru int i; 185ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) { 186ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru foo.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i, UnicodeString((UChar32)(0x10330 + i))); 187ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 188ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) { 189ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) != UnicodeString((UChar32)(0x10330 + i))) { 190ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru errln("get/setSymbol did not roundtrip, got " + 191ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) + 192ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ", expected " + 193ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString((UChar32)(0x10330 + i))); 194ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 195ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 19685bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 197ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru DecimalFormatSymbols sym(Locale::getUS(), status); 198ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 199ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString customDecSeperator("S"); 200ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34.50"); 20127f654740f2a26ad62a5c155af9199af9e69b889claireho sym.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, customDecSeperator); 202ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34S50"); 20327f654740f2a26ad62a5c155af9199af9e69b889claireho sym.setSymbol(DecimalFormatSymbols::kPercentSymbol, (UnicodeString)"P"); 204ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Verify(34.5, (UnicodeString)"00 %", sym, (UnicodeString)"3450 P"); 20527f654740f2a26ad62a5c155af9199af9e69b889claireho sym.setSymbol(DecimalFormatSymbols::kCurrencySymbol, (UnicodeString)"D"); 206ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Verify(34.5, CharsToUnicodeString("\\u00a4##.##"), sym, (UnicodeString)"D34.5"); 20727f654740f2a26ad62a5c155af9199af9e69b889claireho sym.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, (UnicodeString)"|"); 208ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru Verify(3456.5, (UnicodeString)"0,000.##", sym, (UnicodeString)"3|456S5"); 20985bf2e2fbc60a9f938064abc8127d61da7d19882Claire Ho 210ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 211ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 21259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid IntlTestDecimalFormatSymbols::testLastResortData() { 21359d709d503bab6e2b61931737e662dd293b40578ccornelius IcuTestErrorCode errorCode(*this, "testLastResortData"); 21459d709d503bab6e2b61931737e662dd293b40578ccornelius LocalPointer<DecimalFormatSymbols> lastResort( 21559d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols::createWithLastResortData(errorCode)); 21659d709d503bab6e2b61931737e662dd293b40578ccornelius if(errorCode.logIfFailureAndReset("DecimalFormatSymbols::createWithLastResortData() failed")) { 21759d709d503bab6e2b61931737e662dd293b40578ccornelius return; 21859d709d503bab6e2b61931737e662dd293b40578ccornelius } 21959d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols root(Locale::getRoot(), errorCode); 22059d709d503bab6e2b61931737e662dd293b40578ccornelius if(errorCode.logDataIfFailureAndReset("DecimalFormatSymbols(root) failed")) { 22159d709d503bab6e2b61931737e662dd293b40578ccornelius return; 22259d709d503bab6e2b61931737e662dd293b40578ccornelius } 22359d709d503bab6e2b61931737e662dd293b40578ccornelius // Note: It is not necessary that the last resort data matches the root locale, 22459d709d503bab6e2b61931737e662dd293b40578ccornelius // but it seems weird if most symbols did not match. 22559d709d503bab6e2b61931737e662dd293b40578ccornelius // Also, one purpose for calling operator==() is to find uninitialized memory in a debug build. 22659d709d503bab6e2b61931737e662dd293b40578ccornelius if(*lastResort == root) { 22759d709d503bab6e2b61931737e662dd293b40578ccornelius errln("DecimalFormatSymbols last resort data unexpectedly matches root"); 22859d709d503bab6e2b61931737e662dd293b40578ccornelius } 22959d709d503bab6e2b61931737e662dd293b40578ccornelius // Here we adjust for expected differences. 23059d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals("last-resort grouping separator", 23159d709d503bab6e2b61931737e662dd293b40578ccornelius "", lastResort->getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)); 23259d709d503bab6e2b61931737e662dd293b40578ccornelius lastResort->setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, ","); 23359d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals("last-resort monetary grouping separator", 23459d709d503bab6e2b61931737e662dd293b40578ccornelius "", lastResort->getSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol)); 23559d709d503bab6e2b61931737e662dd293b40578ccornelius lastResort->setSymbol(DecimalFormatSymbols::kMonetaryGroupingSeparatorSymbol, ","); 23659d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals("last-resort NaN", 23759d709d503bab6e2b61931737e662dd293b40578ccornelius UnicodeString((UChar)0xfffd), lastResort->getSymbol(DecimalFormatSymbols::kNaNSymbol)); 23859d709d503bab6e2b61931737e662dd293b40578ccornelius lastResort->setSymbol(DecimalFormatSymbols::kNaNSymbol, "NaN"); 23959d709d503bab6e2b61931737e662dd293b40578ccornelius // Check that now all of the symbols match root. 24059d709d503bab6e2b61931737e662dd293b40578ccornelius for(int32_t i = 0; i < DecimalFormatSymbols::kFormatSymbolCount; ++i) { 24159d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormatSymbols::ENumberFormatSymbol e = (DecimalFormatSymbols::ENumberFormatSymbol)i; 24259d709d503bab6e2b61931737e662dd293b40578ccornelius assertEquals("last-resort symbol vs. root", root.getSymbol(e), lastResort->getSymbol(e)); 24359d709d503bab6e2b61931737e662dd293b40578ccornelius } 24459d709d503bab6e2b61931737e662dd293b40578ccornelius // Also, the CurrencySpacing patterns are empty in the last resort instance, 24559d709d503bab6e2b61931737e662dd293b40578ccornelius // but not in root. 24659d709d503bab6e2b61931737e662dd293b40578ccornelius Verify(1234567.25, "#,##0.##", *lastResort, "1,234,567.25"); 24759d709d503bab6e2b61931737e662dd293b40578ccornelius} 24859d709d503bab6e2b61931737e662dd293b40578ccornelius 24959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid IntlTestDecimalFormatSymbols::Verify(double value, const UnicodeString& pattern, 25059d709d503bab6e2b61931737e662dd293b40578ccornelius const DecimalFormatSymbols &sym, const UnicodeString& expected){ 251ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 25259d709d503bab6e2b61931737e662dd293b40578ccornelius DecimalFormat df(pattern, sym, status); 253ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(U_FAILURE(status)){ 25459d709d503bab6e2b61931737e662dd293b40578ccornelius errln("ERROR: construction of decimal format failed - %s", u_errorName(status)); 255ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 256ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru UnicodeString buffer; 257ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru FieldPosition pos(FieldPosition::DONT_CARE); 25859d709d503bab6e2b61931737e662dd293b40578ccornelius buffer = df.format(value, buffer, pos); 259ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru if(buffer != expected){ 26059d709d503bab6e2b61931737e662dd293b40578ccornelius errln((UnicodeString)"ERROR: format() returns wrong result\n Expected " + 261ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru expected + ", Got " + buffer); 262ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru } 263ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru} 264ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru 265ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 266