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