10596faeddefbf198de137d5e893708495ab1584cFredrik Roubert// © 2016 and later: Unicode, Inc. and others. 264339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********************************************************************** 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 527f654740f2a26ad62a5c155af9199af9e69b889claireho * Copyright (c) 1997-2010, International Business Machines Corporation 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and others. All Rights Reserved. 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/ 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "nmfmapts.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/numfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/strenum.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestNumberFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite NumberFormatAPI"); 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "NumberFormat API test"; 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("NumberFormat API test---"); logln(""); 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Could not set default locale, test may not give correct results"); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(/* par */); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "NumberFormatRegistration"; 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("NumberFormat Registration test---"); logln(""); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Could not set default locale, test may not give correct results"); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testRegistration(); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test does round-trip testing (format -> parse -> format -> parse -> etc.) of 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NumberFormat. 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestNumberFormatAPI::testAPI(/* char* par */) 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test constructors 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing NumberFormat constructors"); 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *def = NumberFormat::createInstance(status); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (default) - %s", u_errorName(status)); 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *fr = NumberFormat::createInstance(Locale::getFrench(), status); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (French) - %s", u_errorName(status)); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *cur = NumberFormat::createCurrencyInstance(status); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (currency, default) - %s", u_errorName(status)); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *cur_fr = NumberFormat::createCurrencyInstance(Locale::getFrench(), status); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (currency, French) - %s", u_errorName(status)); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *per = NumberFormat::createPercentInstance(status); 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (percent, default) - %s", u_errorName(status)); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *per_fr = NumberFormat::createPercentInstance(Locale::getFrench(), status); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 1016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("ERROR: Could not create NumberFormat (percent, French) - %s", u_errorName(status)); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test equality 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (per_fr != NULL && cur_fr != NULL) 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing equality operator"); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *per_fr == *cur_fr || ! ( *per_fr != *cur_fr) ) { 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: == failed"); 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test various format() methods 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (cur_fr != NULL) 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing various format() methods"); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double d = -10456.0037; 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t l = 100000000; 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fD(d); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fL(l); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString res1, res2, res3, res4, res5, res6; 12564339d36f8bd4db5025fe2988eda22b491a9219cFredrik Roubert FieldPosition pos1(FieldPosition::DONT_CARE), pos2(FieldPosition::DONT_CARE), pos3(FieldPosition::DONT_CARE), pos4(FieldPosition::DONT_CARE); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res1 = cur_fr->format(d, res1); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res1); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res2 = cur_fr->format(l, res2); 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) l + " formatted to " + res2); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res3 = cur_fr->format(d, res3, pos1); 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + (int32_t) d + " formatted to " + res3); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res4 = cur_fr->format(l, res4, pos2); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) l + " formatted to " + res4); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res5 = cur_fr->format(fD, res5, pos3, status); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: format(Formattable [double]) failed"); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + (int32_t) fD.getDouble() + " formatted to " + res5); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res6 = cur_fr->format(fL, res6, pos4, status); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: format(Formattable [long]) failed"); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "" + fL.getLong() + " formatted to " + res6); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test parse() 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL) 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing parse()"); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double d = -10456.0037; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("-10,456.0037"); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result1, result2, result3; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0), pos01(0); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->parseObject(text, result1, pos); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result1.getType() != Formattable::kDouble && result1.getDouble() != d) { 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Roundtrip failed (via parse()) for " + text); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result1.getDouble()); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->parse(text, result2, pos01); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result2.getType() != Formattable::kDouble && result2.getDouble() != d) { 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Roundtrip failed (via parse()) for " + text); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result2.getDouble()); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->parse(text, result3, status); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: parse() failed"); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result3.getType() != Formattable::kDouble && result3.getDouble() != d) { 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Roundtrip failed (via parse()) for " + text); 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + (int32_t) result3.getDouble()); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getters and setters 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && def != NULL) 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getters and setters"); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count = 0; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale *locales = NumberFormat::getAvailableLocales(count); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "Got " + count + " locales" ); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0; i < count; i++) { 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name(locales[i].getName(),""); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setParseIntegerOnly( def->isParseIntegerOnly() ); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->isParseIntegerOnly() != def->isParseIntegerOnly() ) { 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setParseIntegerOnly() failed"); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setGroupingUsed( def->isGroupingUsed() ); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->isGroupingUsed() != def->isGroupingUsed() ) { 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setGroupingUsed() failed"); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setMaximumIntegerDigits( def->getMaximumIntegerDigits() ); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->getMaximumIntegerDigits() != def->getMaximumIntegerDigits() ) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setMaximumIntegerDigits() failed"); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setMinimumIntegerDigits( def->getMinimumIntegerDigits() ); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->getMinimumIntegerDigits() != def->getMinimumIntegerDigits() ) { 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setMinimumIntegerDigits() failed"); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setMaximumFractionDigits( def->getMaximumFractionDigits() ); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->getMaximumFractionDigits() != def->getMaximumFractionDigits() ) { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setMaximumFractionDigits() failed"); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setMinimumFractionDigits( def->getMinimumFractionDigits() ); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->getMinimumFractionDigits() != def->getMinimumFractionDigits() ) { 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setMinimumFractionDigits() failed"); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getStaticClassID() 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getStaticClassID()"); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *test = new DecimalFormat(status); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 2376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "ERROR: Couldn't create a NumberFormat - %s", u_errorName(status)); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != DecimalFormat::getStaticClassID()) { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getDynamicClassID() didn't return the expected value"); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete def; 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fr; 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cur; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete cur_fr; 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete per; 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete per_fr; 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define SRC_LOC Locale::getFrance() 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define SWAP_LOC Locale::getUS() 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass NFTestFactory : public SimpleNumberFormatFactory { 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat* currencyStyle; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NFTestFactory() 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : SimpleNumberFormatFactory(SRC_LOC, TRUE) 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru currencyStyle = NumberFormat::createInstance(SWAP_LOC, status); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~NFTestFactory() 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete currencyStyle; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual NumberFormat* createFormat(const Locale& /* loc */, UNumberFormatStyle formatType) 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (formatType == UNUM_CURRENCY) { 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (NumberFormat*)currencyStyle->clone(); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return NULL; 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual inline UClassID getDynamicClassID() const 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UClassID)&gID; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static inline UClassID getStaticClassID() 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UClassID)&gID; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static char gID; 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruchar NFTestFactory::gID = 0; 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTestNumberFormatAPI::testRegistration() 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_SERVICE 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f0(NumberFormat::createInstance(SWAP_LOC, status)); 30650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f1(NumberFormat::createInstance(SRC_LOC, status)); 30750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f2(NumberFormat::createCurrencyInstance(SRC_LOC, status)); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru URegistryKey key = NumberFormat::registerFactory(new NFTestFactory(), status); 30950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f3(NumberFormat::createCurrencyInstance(SRC_LOC, status)); 31050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f3a(NumberFormat::createCurrencyInstance(SRC_LOC, status)); 31150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f4(NumberFormat::createInstance(SRC_LOC, status)); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru StringEnumeration* locs = NumberFormat::getAvailableLocales(); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 31550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUNumberFormatPointer uf3(unum_open(UNUM_CURRENCY, NULL, 0, SRC_LOC.getName(), NULL, &status)); 31650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUNumberFormatPointer uf4(unum_open(UNUM_DEFAULT, NULL, 0, SRC_LOC.getName(), NULL, &status)); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* res; 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (res = locs->snext(status); res; res = locs->snext(status)) { 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(*res); // service is still in synch 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat::unregister(key, status); // restore for other tests 32450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalPointer<NumberFormat> f5(NumberFormat::createCurrencyInstance(SRC_LOC, status)); 32550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho LocalUNumberFormatPointer uf5(unum_open(UNUM_CURRENCY, NULL, 0, SRC_LOC.getName(), NULL, &status)); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error creating instnaces."); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru float n = 1234.567f; 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString res0, res1, res2, res3, res4, res5; 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ures3[50]; 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ures4[50]; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ures5[50]; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f0->format(n, res0); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f1->format(n, res1); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f2->format(n, res2); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f3->format(n, res3); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f4->format(n, res4); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru f5->format(n, res5); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho unum_formatDouble(uf3.getAlias(), n, ures3, 50, NULL, &status); 34550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho unum_formatDouble(uf4.getAlias(), n, ures4, 50, NULL, &status); 34650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho unum_formatDouble(uf5.getAlias(), n, ures5, 50, NULL, &status); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f0 swap int: " + res0); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f1 src int: " + res1); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f2 src cur: " + res2); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f3 reg cur: " + res3); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f4 reg int: " + res4); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"f5 unreg cur: " + res5); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log("uf3 reg cur: "); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(ures3); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log("uf4 reg int: "); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(ures4); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log("uf5 ureg cur: "); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(ures5); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (f3.getAlias() == f3a.getAlias()) { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("did not get new instance from service"); 36350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho f3a.orphan(); 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res3 != res0) { 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("registered service did not match"); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res4 != res1) { 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("registered service did not inherit"); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res5 != res2) { 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unregistered service did not match original"); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res0 != ures3) { 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("registered service did not match / unum"); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res1 != ures4) { 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("registered service did not inherit / unum"); 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (res2 != ures5) { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("unregistered service did not match original / unum"); 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (res = locs->snext(status); res; res = locs->snext(status)) { 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(*res); // service should be out of synch 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locs->reset(status); // now in synch again, we hope 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (res = locs->snext(status); res; res = locs->snext(status)) { 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(*res); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete locs; 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 401