| Index: icu46/source/test/intltest/tsdcfmsy.cpp
|
| ===================================================================
|
| --- icu46/source/test/intltest/tsdcfmsy.cpp (revision 0)
|
| +++ icu46/source/test/intltest/tsdcfmsy.cpp (revision 0)
|
| @@ -0,0 +1,232 @@
|
| +/********************************************************************
|
| + * COPYRIGHT:
|
| + * Copyright (c) 1997-2010, International Business Machines Corporation and
|
| + * others. All Rights Reserved.
|
| + ********************************************************************/
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#include "unicode/dcfmtsym.h"
|
| +#include "unicode/decimfmt.h"
|
| +#include "unicode/unum.h"
|
| +#include "tsdcfmsy.h"
|
| +
|
| +void IntlTestDecimalFormatSymbols::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ )
|
| +{
|
| + if (exec) logln("TestSuite DecimalFormatSymbols");
|
| + switch (index) {
|
| + case 0: name = "DecimalFormatSymbols test";
|
| + if (exec) {
|
| + logln("DecimalFormatSymbols test---"); logln("");
|
| + testSymbols(/*par*/);
|
| + }
|
| + break;
|
| +
|
| + default: name = ""; break;
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Test the API of DecimalFormatSymbols; primarily a simple get/set set.
|
| + */
|
| +void IntlTestDecimalFormatSymbols::testSymbols(/* char *par */)
|
| +{
|
| + UErrorCode status = U_ZERO_ERROR;
|
| +
|
| + DecimalFormatSymbols fr(Locale::getFrench(), status);
|
| + if(U_FAILURE(status)) {
|
| + errcheckln(status, "ERROR: Couldn't create French DecimalFormatSymbols - %s", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| + status = U_ZERO_ERROR;
|
| + DecimalFormatSymbols en(Locale::getEnglish(), status);
|
| + if(U_FAILURE(status)) {
|
| + errcheckln(status, "ERROR: Couldn't create English DecimalFormatSymbols - %s", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| + if(en == fr || ! (en != fr) ) {
|
| + errln("ERROR: English DecimalFormatSymbols equal to French");
|
| + }
|
| +
|
| + // just do some VERY basic tests to make sure that get/set work
|
| +
|
| + UnicodeString zero = en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kZeroDigitSymbol, zero);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kZeroDigitSymbol)) {
|
| + errln("ERROR: get/set ZeroDigit failed");
|
| + }
|
| +
|
| + UnicodeString group = en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, group);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol)) {
|
| + errln("ERROR: get/set GroupingSeparator failed");
|
| + }
|
| +
|
| + UnicodeString decimal = en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, decimal);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol)) {
|
| + errln("ERROR: get/set DecimalSeparator failed");
|
| + }
|
| +
|
| + UnicodeString perMill = en.getSymbol(DecimalFormatSymbols::kPerMillSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kPerMillSymbol, perMill);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kPerMillSymbol) != en.getSymbol(DecimalFormatSymbols::kPerMillSymbol)) {
|
| + errln("ERROR: get/set PerMill failed");
|
| + }
|
| +
|
| + UnicodeString percent = en.getSymbol(DecimalFormatSymbols::kPercentSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kPercentSymbol, percent);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kPercentSymbol) != en.getSymbol(DecimalFormatSymbols::kPercentSymbol)) {
|
| + errln("ERROR: get/set Percent failed");
|
| + }
|
| +
|
| + UnicodeString digit(en.getSymbol(DecimalFormatSymbols::kDigitSymbol));
|
| + fr.setSymbol(DecimalFormatSymbols::kDigitSymbol, digit);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kDigitSymbol) != en.getSymbol(DecimalFormatSymbols::kDigitSymbol)) {
|
| + errln("ERROR: get/set Percent failed");
|
| + }
|
| +
|
| + UnicodeString patternSeparator = en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol, patternSeparator);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol) != en.getSymbol(DecimalFormatSymbols::kPatternSeparatorSymbol)) {
|
| + errln("ERROR: get/set PatternSeparator failed");
|
| + }
|
| +
|
| + UnicodeString infinity(en.getSymbol(DecimalFormatSymbols::kInfinitySymbol));
|
| + fr.setSymbol(DecimalFormatSymbols::kInfinitySymbol, infinity);
|
| + UnicodeString infinity2(fr.getSymbol(DecimalFormatSymbols::kInfinitySymbol));
|
| + if(infinity != infinity2) {
|
| + errln("ERROR: get/set Infinity failed");
|
| + }
|
| +
|
| + UnicodeString nan(en.getSymbol(DecimalFormatSymbols::kNaNSymbol));
|
| + fr.setSymbol(DecimalFormatSymbols::kNaNSymbol, nan);
|
| + UnicodeString nan2(fr.getSymbol(DecimalFormatSymbols::kNaNSymbol));
|
| + if(nan != nan2) {
|
| + errln("ERROR: get/set NaN failed");
|
| + }
|
| +
|
| + UnicodeString minusSign = en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol);
|
| + fr.setSymbol(DecimalFormatSymbols::kMinusSignSymbol, minusSign);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kMinusSignSymbol) != en.getSymbol(DecimalFormatSymbols::kMinusSignSymbol)) {
|
| + errln("ERROR: get/set MinusSign failed");
|
| + }
|
| +
|
| + UnicodeString exponential(en.getSymbol(DecimalFormatSymbols::kExponentialSymbol));
|
| + fr.setSymbol(DecimalFormatSymbols::kExponentialSymbol, exponential);
|
| + if(fr.getSymbol(DecimalFormatSymbols::kExponentialSymbol) != en.getSymbol(DecimalFormatSymbols::kExponentialSymbol)) {
|
| + errln("ERROR: get/set Exponential failed");
|
| + }
|
| +
|
| + // Test get currency spacing before the currency.
|
| + status = U_ZERO_ERROR;
|
| + for (int32_t i = 0; i < (int32_t)DecimalFormatSymbols::kCurrencySpacingCount; i++) {
|
| + UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing(
|
| + (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status);
|
| + if(U_FAILURE(status)) {
|
| + errln("Error: cannot get CurrencyMatch for locale:en");
|
| + status = U_ZERO_ERROR;
|
| + }
|
| + UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing(
|
| + (DecimalFormatSymbols::ECurrencySpacing)i, TRUE, status);
|
| + if(U_FAILURE(status)) {
|
| + errln("Error: cannot get CurrencyMatch for locale:fr");
|
| + }
|
| + if (enCurrencyPattern != frCurrencyPattern) {
|
| + errln("ERROR: get CurrencySpacing failed");
|
| + }
|
| + }
|
| + // Test get currencySpacing after the currency.
|
| + status = U_ZERO_ERROR;
|
| + for (int32_t i = 0; i < DecimalFormatSymbols::kCurrencySpacingCount; i++) {
|
| + UnicodeString enCurrencyPattern = en.getPatternForCurrencySpacing(
|
| + (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status);
|
| + if(U_FAILURE(status)) {
|
| + errln("Error: cannot get CurrencyMatch for locale:en");
|
| + status = U_ZERO_ERROR;
|
| + }
|
| + UnicodeString frCurrencyPattern = fr.getPatternForCurrencySpacing(
|
| + (DecimalFormatSymbols::ECurrencySpacing)i, FALSE, status);
|
| + if(U_FAILURE(status)) {
|
| + errln("Error: cannot get CurrencyMatch for locale:fr");
|
| + }
|
| + if (enCurrencyPattern != frCurrencyPattern) {
|
| + errln("ERROR: get CurrencySpacing failed");
|
| + }
|
| + }
|
| + // Test set curerncySpacing APIs
|
| + status = U_ZERO_ERROR;
|
| + UnicodeString dash = UnicodeString("-");
|
| + en.setPatternForCurrencySpacing(DecimalFormatSymbols::kInsert, TRUE, dash);
|
| + UnicodeString enCurrencyInsert = en.getPatternForCurrencySpacing(
|
| + DecimalFormatSymbols::kInsert, TRUE, status);
|
| + if (dash != enCurrencyInsert) {
|
| + errln("Error: Failed to setCurrencyInsert for locale:en");
|
| + }
|
| +
|
| + status = U_ZERO_ERROR;
|
| + DecimalFormatSymbols foo(status);
|
| +
|
| + DecimalFormatSymbols bar(foo);
|
| +
|
| + en = fr;
|
| +
|
| + if(en != fr || foo != bar) {
|
| + errln("ERROR: Copy Constructor or Assignment failed");
|
| + }
|
| +
|
| + // test get/setSymbol()
|
| + if((int) UNUM_FORMAT_SYMBOL_COUNT != (int) DecimalFormatSymbols::kFormatSymbolCount) {
|
| + errln("unum.h and decimfmt.h have inconsistent numbers of format symbols!");
|
| + return;
|
| + }
|
| +
|
| + int i;
|
| + for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) {
|
| + foo.setSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i, UnicodeString((UChar32)(0x10330 + i)));
|
| + }
|
| + for(i = 0; i < (int)DecimalFormatSymbols::kFormatSymbolCount; ++i) {
|
| + if(foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) != UnicodeString((UChar32)(0x10330 + i))) {
|
| + errln("get/setSymbol did not roundtrip, got " +
|
| + foo.getSymbol((DecimalFormatSymbols::ENumberFormatSymbol)i) +
|
| + ", expected " +
|
| + UnicodeString((UChar32)(0x10330 + i)));
|
| + }
|
| + }
|
| +
|
| + DecimalFormatSymbols sym(Locale::getUS(), status);
|
| +
|
| + UnicodeString customDecSeperator("S");
|
| + Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34.50");
|
| + sym.setSymbol(DecimalFormatSymbols::kDecimalSeparatorSymbol, customDecSeperator);
|
| + Verify(34.5, (UnicodeString)"00.00", sym, (UnicodeString)"34S50");
|
| + sym.setSymbol(DecimalFormatSymbols::kPercentSymbol, (UnicodeString)"P");
|
| + Verify(34.5, (UnicodeString)"00 %", sym, (UnicodeString)"3450 P");
|
| + sym.setSymbol(DecimalFormatSymbols::kCurrencySymbol, (UnicodeString)"D");
|
| + Verify(34.5, CharsToUnicodeString("\\u00a4##.##"), sym, (UnicodeString)"D34.5");
|
| + sym.setSymbol(DecimalFormatSymbols::kGroupingSeparatorSymbol, (UnicodeString)"|");
|
| + Verify(3456.5, (UnicodeString)"0,000.##", sym, (UnicodeString)"3|456S5");
|
| +
|
| +}
|
| +
|
| +void IntlTestDecimalFormatSymbols::Verify(double value, const UnicodeString& pattern, DecimalFormatSymbols sym, const UnicodeString& expected){
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + DecimalFormat *df = new DecimalFormat(pattern, sym, status);
|
| + if(U_FAILURE(status)){
|
| + errln("ERROR: construction of decimal format failed");
|
| + }
|
| + UnicodeString buffer;
|
| + FieldPosition pos(FieldPosition::DONT_CARE);
|
| + buffer = df->format(value, buffer, pos);
|
| + if(buffer != expected){
|
| + errln((UnicodeString)"ERROR: format failed after setSymbols()\n Expected " +
|
| + expected + ", Got " + buffer);
|
| + }
|
| + delete df;
|
| +}
|
| +
|
| +#endif /* #if !UCONFIG_NO_FORMATTING */
|
|
|
| Property changes on: icu46/source/test/intltest/tsdcfmsy.cpp
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|