1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * 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 "dtfmapts.h" 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/decimfmt.h" 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/choicfmt.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/msgfmt.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This is an API test, not a unit test. It doesn't test very many cases, and doesn't 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// try to test the full functionality. It just calls each function in the class and 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// verifies that it works on a basic level. 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::runIndexedTest( int32_t index, UBool exec, const char* &name, char* /*par*/ ) 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) logln("TestSuite DateFormatAPI"); 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch (index) { 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: name = "DateFormat API test"; 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DateFormat API test---"); logln(""); 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale saveLocale; 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(Locale::getEnglish(), status); 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: Could not set default locale, test may not give correct results"); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testAPI(/*par*/); 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale::setDefault(saveLocale, status); 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: name = "TestEquals"; 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestEquals---"); logln(""); 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestEquals(); 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: name = "TestNameHiding"; 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("TestNameHiding---"); logln(""); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestNameHiding(); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 5650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho case 3: name = "TestCoverage"; 5750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (exec) { 5850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho logln("TestCoverage---"); logln(""); 5950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho TestCoverage(); 6050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 6150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho break; 6250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: name = ""; break; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 6850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Add better code coverage. 6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 7050294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehovoid IntlTestDateFormatAPI::TestCoverage(void) 7150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho{ 7250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char *LOCALES[] = { 7350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "zh_CN@calendar=chinese", 7450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "cop_EG@calendar=coptic", 7550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "hi_IN@calendar=indian", 7650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho "am_ET@calendar=ethiopic" 7750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho }; 7850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t numOfLocales = 4; 7950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 8050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (int32_t i = 0; i < numOfLocales; i++) { 8150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho DateFormat *df = DateFormat::createDateTimeInstance(DateFormat::kMedium, DateFormat::kMedium, Locale(LOCALES[i])); 8250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (df == NULL){ 8350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Error creating DateFormat instances."); 8450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return; 8550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 8650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho delete df; 8750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/** 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the equals method works correctly. 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::TestEquals(void) 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Create two objects at different system times 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *a = DateFormat::createInstance(); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate start = Calendar::getNow(); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (Calendar::getNow() == start) ; // Wait for time to change 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *b = DateFormat::createInstance(); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (a == NULL || b == NULL){ 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dataerrln("Error calling DateFormat::createInstance()"); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete b; 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!(*a == *b)) 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: DateFormat objects created at different times are unequal."); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 11127f654740f2a26ad62a5c155af9199af9e69b889claireho SimpleDateFormat *sdtfmt = dynamic_cast<SimpleDateFormat *>(b); 11227f654740f2a26ad62a5c155af9199af9e69b889claireho if (sdtfmt != NULL) 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double ONE_YEAR = 365*24*60*60*1000.0; 11527f654740f2a26ad62a5c155af9199af9e69b889claireho sdtfmt->set2DigitYearStart(start + 50*ONE_YEAR, status); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: setTwoDigitStartDate failed."); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (*a == *b) 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: DateFormat objects with different two digit start dates are equal."); 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete a; 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete b; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This test checks various generic API methods in DateFormat to achieve 100% 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * API coverage. 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid IntlTestDateFormatAPI::testAPI(/* char* par */) 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test constructors 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing DateFormat constructors"); 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *def = DateFormat::createInstance(); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *fr = DateFormat::createTimeInstance(DateFormat::FULL, Locale::getFrench()); 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *it = DateFormat::createDateInstance(DateFormat::MEDIUM, Locale::getItalian()); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *de = DateFormat::createDateTimeInstance(DateFormat::LONG, DateFormat::LONG, Locale::getGerman()); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (def == NULL || fr == NULL || it == NULL || de == NULL){ 14350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("Error creating DateFormat instances."); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test equality 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && def != NULL) 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing equality operator"); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *fr == *it ) { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: == failed"); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test various format() methods 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && it != NULL && de != NULL) 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing various format() methods"); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 837039928046.0; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable fD(d, Formattable::kIsDate); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString res1, res2, res3; 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition pos1(0), pos2(0); 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res1 = fr->format(d, res1, pos1, status); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: format() failed (French)"); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + d + " formatted to " + res1); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res2 = it->format(d, res2, pos2); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + d + " formatted to " + res2); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru res3 = de->format(d, res3); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln( (UnicodeString) "" + d + " formatted to " + res3); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test parse() 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (def != NULL) 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing parse()"); 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString text("02/03/76 2:50 AM, CST"); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable result1; 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate result2, result3; 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition pos(0), pos01(0); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def->parseObject(text, result1, pos); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result1.getType() != Formattable::kDate) { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: parseObject() failed for " + text); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + result1.getDate()); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result2 = def->parse(text, status); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: parse() failed, stopping testing"); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + result2); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result3 = def->parse(text, pos01); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(text + " parsed into " + result3); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getters and setters 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruif (fr != NULL && it != NULL && de != NULL) 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getters and setters"); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count = 0; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale *locales = DateFormat::getAvailableLocales(count); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString) "Got " + count + " locales" ); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(int32_t i = 0; i < count; i++) { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString name; 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = locales[i].getName(); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(name); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr->setLenient(it->isLenient()); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fr->isLenient() != it->isLenient()) { 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: setLenient() failed"); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Calendar *cal = def->getCalendar(); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *newCal = cal->clone(); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru de->adoptCalendar(newCal); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru it->setCalendar(*newCal); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *(de->getCalendar()) != *(it->getCalendar())) { 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: adopt or set Calendar() failed"); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const NumberFormat *nf = def->getNumberFormat(); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *newNf = (NumberFormat*) nf->clone(); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru de->adoptNumberFormat(newNf); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru it->setNumberFormat(*newNf); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( *(de->getNumberFormat()) != *(it->getNumberFormat())) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: adopt or set NumberFormat() failed"); 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const TimeZone& tz = def->getTimeZone(); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TimeZone *newTz = tz.clone(); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru de->adoptTimeZone(newTz); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru it->setTimeZone(*newTz); 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( de->getTimeZone() != it->getTimeZone()) { 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: adopt or set TimeZone() failed"); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// ======= Test getStaticClassID() 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Testing getStaticClassID()"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *test = new SimpleDateFormat(status); 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 25850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("ERROR: Couldn't create a DateFormat - %s", u_errorName(status)); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(test->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) { 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("ERROR: getDynamicClassID() didn't return the expected value"); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete test; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete def; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fr; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete it; 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete de; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test hiding of parse() and format() APIs in the Format hierarchy. 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * We test the entire hierarchy, even though this test is located in 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the DateFormat API test. 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruIntlTestDateFormatAPI::TestNameHiding(void) { 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // N.B.: This test passes if it COMPILES, since it's a test of 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // compile-time name hiding. 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable dateObj(0, Formattable::kIsDate); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable numObj(3.1415926535897932384626433832795); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable obj; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString str; 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition fpos; 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition ppos; 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DateFormat calling Format API 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DateFormat"); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormat *dateFmt = DateFormat::createInstance(); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (dateFmt) { 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateFmt->format(dateObj, str, status); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru dateFmt->format(dateObj, str, fpos, status); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete dateFmt; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Can't create DateFormat"); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // SimpleDateFormat calling Format & DateFormat API 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("SimpleDateFormat"); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat sdf(status); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Format API 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.format(dateObj, str, status); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.format(dateObj, str, fpos, status); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DateFormat API 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.format((UDate)0, str, fpos); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.format((UDate)0, str); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.parse(str, status); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sdf.parse(str, ppos); 31727f654740f2a26ad62a5c155af9199af9e69b889claireho sdf.getNumberFormat(); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NumberFormat calling Format API 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("NumberFormat"); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru NumberFormat *fmt = NumberFormat::createInstance(status); 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (fmt) { 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(numObj, str, status); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt->format(numObj, str, fpos, status); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fmt; 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("FAIL: Can't create NumberFormat()"); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // DecimalFormat calling Format & NumberFormat API 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("DecimalFormat"); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DecimalFormat fmt(status); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_SUCCESS(status)) { 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Format API 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(numObj, str, status); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(numObj, str, fpos, status); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NumberFormat API 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2.71828, str); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format((int32_t)1234567, str); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(1.41421, str, fpos); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format((int32_t)9876543, str, fpos); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, obj, ppos); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, obj, status); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 3516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: Couldn't instantiate DecimalFormat, error %s. Quitting test", u_errorName(status)); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ChoiceFormat calling Format & NumberFormat API 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("ChoiceFormat"); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ChoiceFormat fmt("0#foo|1#foos|2#foos", status); 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Format API 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(numObj, str, status); 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(numObj, str, fpos, status); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // NumberFormat API 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(2.71828, str); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format((int32_t)1234567, str); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(1.41421, str, fpos); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format((int32_t)9876543, str, fpos); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, obj, ppos); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.parse(str, obj, status); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // MessageFormat calling Format API 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("MessageFormat"); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru MessageFormat fmt("", status); 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Format API 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // We use dateObj, which MessageFormat should reject. 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // We're testing name hiding, not the format method. 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(dateObj, str, status); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(dateObj, str, fpos, status); 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 386