1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Copyright (c) 1997-2011, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************************** 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File CDATTST.C 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Madhu Katragadda Creation 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************* 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* C API TEST FOR DATE FORMAT */ 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udat.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucal.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cdattst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cformtst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <math.h> 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestExtremeDates(void); 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAllLocales(void); 36b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeCrash(void); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LEN(a) (sizeof(a)/sizeof(a[0])) 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDateForTest(TestNode** root); 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TESTCASE(x) addTest(root, &x, "tsformat/cdattst/" #x) 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDateForTest(TestNode** root) 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDateFormat); 47b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestRelativeDateFormat); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestSymbols); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDateFormatCalendar); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestExtremeDates); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestAllLocales); 52b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestRelativeCrash); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Testing the DateFormat API */ 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDateFormat() 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def, *fr, *it, *de, *def1, *fr_pat; 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *any; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *copy; 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* result = NULL; 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UCalendar *cal; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UNumberFormat *numformat1, *numformat2; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[50]; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numlocales; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlengthneeded; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t parsepos; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 837039928046.0; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num = -10456.37; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*const char* str="yyyy.MM.dd G 'at' hh:mm:ss z"; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char t[]="2/3/76 2:50 AM";*/ 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_open() to open a dateformat */ 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting udat_open() with various parameters\n"); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL,0, NULL, 0,&status); 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* def = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0, &status); */ 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def = udat_open(UDAT_SHORT, UDAT_SHORT, "en_US", NULL, 0,NULL, 0, &status); 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru it = udat_open(UDAT_DEFAULT, UDAT_MEDIUM, "it_IT", NULL, 0, NULL, 0,&status); 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using medium date style with italian locale\n %s\n", 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru de = udat_open(UDAT_LONG, UDAT_LONG, "de_DE", NULL, 0, NULL, 0,&status); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using long time and date styles with german locale\n %s\n", 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status)); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a default dateformat */ 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def1 = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0,NULL, 0, &status); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_getAvailable() and udat_countAvailable()*/ 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getAvailableLocales and countAvailable()\n"); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numlocales=udat_countAvailable(); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* use something sensible w/o hardcoding the count */ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(numlocales < 0) 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: error in countAvailable\n"); 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("The number of locales for which date/time formatting patterns are available is %d\n", numlocales); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<numlocales;i++) { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing open of %s\n", udat_getAvailable(i)); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru any = udat_open(UDAT_SHORT, UDAT_SHORT, udat_getAvailable(i), NULL ,0, NULL, 0, &subStatus); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(subStatus)) { 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: date format %s (getAvailable(%d)) is not instantiable: %s\n", udat_getAvailable(i), i, u_errorName(subStatus)); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(any); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_clone()*/ 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_clone() function of date format\n"); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy=udat_clone(def, &status); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in creating the clone using udat_clone: %s\n", myErrorName(status) ); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*if(def != copy) 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in udat_clone");*/ /*how should i check for equality???? */ 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_format()*/ 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_format() function of date format\n"); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(temp, "7/10/96 4:05 PM"); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using def */ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=udat_format(def, d, NULL, resultlength, NULL, &status); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded+1; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_format(def, d, result, resultlength, NULL, &status); 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || !result) 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in formatting using udat_format(.....) %s\n", myErrorName(status) ); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: formatting successful\n"); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)==0) 173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("PASS: Date Format for US locale successful using udat_format()\n"); 174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru else { 175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char xbuf[2048]; 176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char gbuf[2048]; 177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_austrcpy(xbuf, temp); 178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_austrcpy(gbuf, result); 179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: Date Format for US locale failed using udat_format() - expected %s got %s\n", xbuf, gbuf); 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using fr */ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_unescape("10 juil. 1996 16:05:28 heure avanc\\u00E9e du Pacifique", temp, 50); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=myDateFormat(fr, d); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)==0) 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: Date Format for french locale successful using udat_format()\n"); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Date Format for french locale failed using udat_format().\n" ); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using it */ 19550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(temp, "10/lug/1996 16:05:28"); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *fmtted; 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char g[100]; 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char x[100]; 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmtted = myDateFormat(it,d); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(g, fmtted); 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(x, temp); 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(fmtted, temp)==0) { 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: Date Format for italian locale successful uisng udat_format() - wanted %s, got %s\n", x, g); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Date Format for italian locale failed using udat_format() - wanted %s, got %s\n", x, g); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing parsing using udat_parse()*/ 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting parsing using udat_parse()\n"); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(temp,"2/3/76 2:50 AM"); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parsepos=0; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=udat_parse(def, temp, u_strlen(temp), &parsepos, &status); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parsing using udat_parse(.....) %s\n", myErrorName(status) ); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parsing succesful\n"); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format it back and check for equality */ 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(def, d1),temp)!=0) 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in parsing\n"); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing parsing using udat_parse()*/ 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting parsing using udat_parse()\n"); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(temp,"2/Don't parse this part"); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=udat_parse(def, temp, u_strlen(temp), NULL, &status); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_PARSE_ERROR) 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parse(\"bad string\") passed when it should have failed\n"); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parsing succesful\n"); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_openPattern() */ 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_openPattern with a specified pattern\n"); 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*for french locale */ 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr_pat=udat_open(UDAT_IGNORE, UDAT_IGNORE,"fr_FR",NULL,0,temp, u_strlen(temp), &status); 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in creating a date format using udat_openPattern \n %s\n", 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n"); 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing applyPattern and toPattern */ 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting applyPattern and toPattern()\n"); 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_applyPattern(def1, FALSE, temp, u_strlen(temp)); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Extracting the pattern\n"); 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=udat_toPattern(def1, FALSE, NULL, resultlength, &status); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded + 1; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(def1, FALSE, result, resultlength, &status); 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)!=0) 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in extracting the pattern\n"); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: applyPattern and toPattern work fine\n"); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing getter and setter functions*/ 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*isLenient and setLenient()*/ 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the isLenient and setLenient properties\n"); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setLenient(fr, udat_isLenient(it)); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_isLenient(fr) != udat_isLenient(it)) 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: setLenient() failed\n"); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setLenient() successful\n"); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test get2DigitYearStart set2DigitYearStart */ 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the get and set 2DigitYearStart properties\n"); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1= udat_get2DigitYearStart(fr_pat,&status); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: udat_get2DigitYearStart failed %s\n", myErrorName(status) ); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_set2DigitYearStart(def1 ,d1, &status); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_get2DigitYearStart(fr_pat, &status) != udat_get2DigitYearStart(def1, &status)) 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in set2DigitYearStart\n"); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: set2DigitYearStart successful\n"); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try setting it to another value */ 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_set2DigitYearStart(de, 2000.0, &status); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_get2DigitYearStart(de, &status) != 2000) 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in set2DigitYearStart\n"); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: set2DigitYearStart successful\n"); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test getNumberFormat() and setNumberFormat() */ 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the get and set NumberFormat properties of date format\n"); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat1=udat_getNumberFormat(fr_pat); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setNumberFormat(def1, numformat1); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat2=udat_getNumberFormat(def1); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS:setNumberFormat and getNumberFormat succesful\n"); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try setting the number format to another format */ 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat1=udat_getNumberFormat(def); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setNumberFormat(def1, numformat1); 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat2=udat_getNumberFormat(def1); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setNumberFormat and getNumberFormat succesful\n"); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test getCalendar and setCalendar*/ 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_getCalendar() and udat_setCalendar() properties\n"); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=udat_getCalendar(fr_pat); 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setCalendar(def1, cal); 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!ucal_equivalentTo(udat_getCalendar(fr_pat), udat_getCalendar(def1))) 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in setting and getting the calendar\n"); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getting and setting calendar successful\n"); 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=NULL) { 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Closing the UDateForamt */ 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(it); 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(de); 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def1); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr_pat); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(copy); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/* 376b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruTest combined relative date formatting (relative date + non-relative time). 377b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruThis is a bit tricky since we can't have static test data for comparison, the 378b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querurelative date formatting is relative to the time the tests are run. We generate 379b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruthe data for comparison dynamically. However, the tests could fail if they are 380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querurun right at midnight Pacific time and the call to ucal_getNow() is before midnight 381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruwhile the calls to udat_format are after midnight or span midnight. 382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru*/ 383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UDate dayInterval = 24.0*60.0*60.0*1000.0; 384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar trdfZone[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; /* US/Pacific */ 385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const char trdfLocale[] = "en_US"; 386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar minutesPatn[] = { 0x006D, 0x006D, 0 }; /* "mm" */ 387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthLongPatn[] = { 0x004D, 0x004D, 0x004D, 0x004D, 0 }; /* "MMMM" */ 388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthMediumPatn[] = { 0x004D, 0x004D, 0x004D, 0 }; /* "MMM" */ 389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthShortPatn[] = { 0x004D, 0 }; /* "M" */ 390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UDateFormatStyle dateStylesList[] = { UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT, UDAT_NONE }; 391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar *monthPatnsList[] = { monthLongPatn, monthLongPatn, monthMediumPatn, monthShortPatn, NULL }; 392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar newTimePatn[] = { 0x0048, 0x0048, 0x002C, 0x006D, 0x006D, 0 }; /* "HH,mm" */ 393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar minutesStr[] = { 0x0034, 0x0039, 0 }; /* "49", minutes string to search for in output */ 394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruenum { kDateOrTimeOutMax = 96, kDateAndTimeOutMax = 192 }; 395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeDateFormat() 397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate today = 0.0; 399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UDateFormatStyle * stylePtr; 400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar ** monthPtnPtr; 401b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 402b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UCalendar * ucal = ucal_open(trdfZone, -1, trdfLocale, UCAL_GREGORIAN, &status); 403b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t year, month, day; 405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setMillis(ucal, ucal_getNow(), &status); 406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru year = ucal_get(ucal, UCAL_YEAR, &status); 407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru month = ucal_get(ucal, UCAL_MONTH, &status); 408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru day = ucal_get(ucal, UCAL_DATE, &status); 409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setDateTime(ucal, year, month, day, 18, 49, 0, &status); /* set to today at 18:49:00 */ 410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru today = ucal_getMillis(ucal, &status); 411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_close(ucal); 412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) || today == 0.0 ) { 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("Generate UDate for a specified time today fails, error %s - (Are you missing data?)\n", myErrorName(status) ); 415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (stylePtr = dateStylesList, monthPtnPtr = monthPatnsList; *stylePtr != UDAT_NONE; ++stylePtr, ++monthPtnPtr) { 418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtRelDateTime; 419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtRelDate; 420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtTime; 421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t dayOffset, limit; 422b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UFieldPosition fp; 423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar strDateTime[kDateAndTimeOutMax]; 424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar strDate[kDateOrTimeOutMax]; 425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar strTime[kDateOrTimeOutMax]; 426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UChar * strPtr; 427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t dtpatLen; 428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtRelDateTime = udat_open(UDAT_SHORT, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 4316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("udat_open timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s (Are you missing data?)\n", *stylePtr, myErrorName(status) ); 432b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 433b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 434b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtRelDate = udat_open(UDAT_NONE, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_open timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 439b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtTime = udat_open(UDAT_SHORT, UDAT_NONE, trdfLocale, trdfZone, -1, NULL, 0, &status); 441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_open timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDate); 445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPatternRelativeDate(fmtRelDateTime, strDate, kDateAndTimeOutMax, &status); 449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDate, *monthPtnPtr) == NULL || dtpatLen != u_strlen(strDate) ) { 453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) date pattern incorrect\n", *stylePtr ); 454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPatternRelativeTime(fmtRelDateTime, strTime, kDateAndTimeOutMax, &status); 456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 459b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strTime, minutesPatn) == NULL || dtpatLen != u_strlen(strTime) ) { 460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) time pattern incorrect\n", *stylePtr ); 461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 466b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strDate) == NULL || u_strstr(strDateTime, strTime) == NULL || dtpatLen != u_strlen(strDateTime) ) { 467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) dateTime pattern incorrect\n", *stylePtr ); 468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), newTimePatn, u_strlen(newTimePatn), &status); 470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 475b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, newTimePatn) == NULL ) { 479b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) didn't update time pattern\n", *stylePtr ); 480b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 482b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), strTime, u_strlen(strTime), &status); /* restore original */ 483b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 484b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fp.field = UDAT_MINUTE_FIELD; 485b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (dayOffset = -2, limit = 2; dayOffset <= limit; ++dayOffset) { 486b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate dateToUse = today + (float)dayOffset*dayInterval; 487b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 488b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtRelDateTime, dateToUse, strDateTime, kDateAndTimeOutMax, &fp, &status); 489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtRelDate, dateToUse, strDate, kDateOrTimeOutMax, NULL, &status); 494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strDate) == NULL ) { 498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("relative date string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 501b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtTime, dateToUse, strTime, kDateOrTimeOutMax, NULL, &status); 502b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 503b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 504b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 505b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strTime) == NULL ) { 506b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("time string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 507b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 508b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 509b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru strPtr = u_strstr(strDateTime, minutesStr); 510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( strPtr != NULL ) { 511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t beginIndex = strPtr - strDateTime; 512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( fp.beginIndex != beginIndex ) { 513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("UFieldPosition beginIndex %d, expected %d, in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", fp.beginIndex, beginIndex, *stylePtr ); 514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 516b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("minutes string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 517b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 518b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 519b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 520b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 521b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 522b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDate); 523b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtTime); 524b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Testing udat_getSymbols() and udat_setSymbols() and udat_countSymbols()*/ 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSymbols() 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def, *fr; 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result = NULL; 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength; 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlengthout; 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern; 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a dateformat with french locale */ 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\ncreating a date format with french locale\n"); 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL, 0, NULL, 0, &status); 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 5446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a default dateformat */ 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\ncreating a date format with default locale\n"); 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, &status); */ 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US", NULL, 0, NULL, 0, &status); 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in creating the dateformat using short date and time style\n %s\n", 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing countSymbols, getSymbols and setSymbols*/ 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting countSymbols\n"); 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*since the month names has the last string empty and week names are 1 based 1.e first string in the weeknames array is empty */ 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_countSymbols(def, UDAT_ERAS)!=2 || udat_countSymbols(def, UDAT_MONTHS)!=12 || 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_SHORT_MONTHS)!=12 || udat_countSymbols(def, UDAT_WEEKDAYS)!=8 || 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_SHORT_WEEKDAYS)!=8 || udat_countSymbols(def, UDAT_AM_PMS)!=2 || 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_QUARTERS) != 4 || udat_countSymbols(def, UDAT_SHORT_QUARTERS) != 4 || 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_LOCALIZED_CHARS)!=1) 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in udat_countSymbols\n"); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: udat_countSymbols() successful\n"); 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing getSymbols*/ 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getSymbols\n"); 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * 10); 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "jeudi"); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(fr, UDAT_WEEKDAYS, 5 , NULL, resultlength, &status); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(fr, UDAT_WEEKDAYS, 5, result, resultlength, &status); 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_getSymbols().... %s\n", myErrorName(status) ); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols succesful\n"); 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols retrieved the right value\n"); 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: getSymbols retrieved the wrong value\n"); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test getsymbols regressively*/ 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getSymbols() regressively\n"); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_WEEKDAYS, 1, "dimanche"); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_WEEKDAYS, 1, "Sunday"); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_WEEKDAYS, 7, "sam."); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Sat"); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_MONTHS, 11, "December"); 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_MONTHS, 0, "January"); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_ERAS, 0, "av. J.-C."); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_AM_PMS, 0, "AM"); 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_AM_PMS, 1, "PM"); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_MONTHS, 0, "janv."); 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_MONTHS, 11, "Dec"); 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_QUARTERS, 0, "1er trimestre"); 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_QUARTERS, 3, "4th quarter"); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "T2"); 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_QUARTERS, 2, "Q3"); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqV"); 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufree(pattern); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting setSymbols\n"); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*applying the pattern so that setSymbolss works */ 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_toPattern(fr, FALSE, NULL, resultlength, &status); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout + 1; 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * resultlength); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(fr, FALSE, pattern, resultlength, &status); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_applyPattern(def, FALSE, pattern, u_strlen(pattern)); 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_toPattern(def, FALSE, NULL, resultlength,&status); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout + 1; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(fr, FALSE,result, resultlength, &status); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern applied properly\n"); 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("pattern could not be applied properly\n"); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufree(pattern); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing set symbols */ 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(fr, UDAT_MONTHS, 11 , NULL, resultlength, &status); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(fr, UDAT_MONTHS, 11, result, resultlength, &status); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setSymbols(def, UDAT_MONTHS, 11, result, resultlength, &status); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: SetSymbols successful\n"); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(def, UDAT_MONTHS, 11, NULL, resultlength, &status); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * resultlength); 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(def, UDAT_MONTHS, 11, value, resultlength, &status); 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n"); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0) 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Error in settting and getting symbols\n"); 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test setSymbols regressively*/ 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting setSymbols regressively\n"); 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_ERAS, 0, "BeforeChrist"); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_ERA_NAMES, 1, "AnnoDomini"); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_WEEKDAYS, 1, "Sundayweek"); 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Satweek"); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_NARROW_WEEKDAYS, 4, "M"); 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_WEEKDAYS, 1, "Sonntagweek"); 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_SHORT_WEEKDAYS, 7, "Sams"); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_NARROW_WEEKDAYS, 4, "V"); 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_MONTHS, 11, "december"); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_SHORT_MONTHS, 0, "Jan"); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_NARROW_MONTHS, 1, "R"); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_MONTHS, 11, "dezember"); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_MONTHS, 7, "Aug"); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_NARROW_MONTHS, 2, "M"); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_QUARTERS, 0, "1. Quart"); 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "QQ2"); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_QUARTERS, 2, "3rd Quar."); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_QUARTERS, 3, "4QQ"); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test get and setSymbols regressively*/ 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting get and set symbols regressively\n"); 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 1); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 7); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 1); 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 7); 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_MONTHS, 0); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_MONTHS, 0); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_ERAS,1); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_LOCALIZED_CHARS, 0); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_AM_PMS, 1); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*closing*/ 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDateFormatCalendar() { 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *date=0, *time=0, *full=0; 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal=0; 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[256]; 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cbuf[256]; 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate when; 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &ec); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a formatter for date fields. */ 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = udat_open(UDAT_NONE, UDAT_SHORT, "en_US", NULL, 0, NULL, 0, &ec); 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 7816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: udat_open(NONE, SHORT, en_US) failed with %s (Are you missing data?)\n", 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a formatter for time fields. */ 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru time = udat_open(UDAT_SHORT, UDAT_NONE, "en_US", NULL, 0, NULL, 0, &ec); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(SHORT, NONE, en_US) failed with %s\n", 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a full format for output */ 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full = udat_open(UDAT_FULL, UDAT_FULL, "en_US", NULL, 0, NULL, 0, &ec); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(FULL, FULL, en_US) failed with %s\n", 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a calendar */ 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &ec); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_open(en_US) failed with %s\n", 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Parse the date */ 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buf, "4/5/2001"); 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = 0; 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_parseCalendar(date, cal, buf, -1, &pos, &ec); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parseCalendar(4/5/2001) failed at %d with %s\n", 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos, u_errorName(ec)); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Parse the time */ 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buf, "5:45 PM"); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = 0; 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_parseCalendar(time, cal, buf, -1, &pos, &ec); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parseCalendar(17:45) failed at %d with %s\n", 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos, u_errorName(ec)); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Check result */ 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru when = ucal_getMillis(cal, &ec); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getMillis() failed with %s\n", u_errorName(ec)); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_format(full, when, buf, sizeof(buf), NULL, &ec); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_format() failed with %s\n", u_errorName(ec)); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(cbuf, buf); 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Thursday, April 5, 2001 5:45:00 PM PDT 986517900000 */ 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (when == 986517900000.0) { 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Ok: Parsed result: %s\n", cbuf); 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Parsed result: %s, exp 4/5/2001 5:45 PM\n", cbuf); 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FAIL: 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(date); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(time); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(full); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*INTERNAL FUNCTIONS USED*/ 860b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/* N.B.: use idx instead of index to avoid 'shadow' warnings in strict mode. */ 861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifygetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern=NULL; 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1)); 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, expected); 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(datfor, type, idx , NULL, resultlength, &status); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 878b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(datfor, type, idx, result, resultlength, &status); 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_getSymbols()... %s\n", myErrorName(status) ); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols retrieved the right value\n"); 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: getSymbols retrieved the wrong value\n Expected %s Got %s\n", austrdup(pattern), 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result) ); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 896b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifysetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 900b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 901b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 902b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 903b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * (strlen(expected) + 1)); 904b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(value, expected); 905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_setSymbols(datfor, type, idx, value, u_strlen(value), &status); 906b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() %s\n", myErrorName(status) ); 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(datfor, type, idx, NULL, resultlength, &status); 914b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 917b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(datfor, type, idx, result, resultlength, &status); 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols after setting it previously\n %s\n", 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0){ 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(value), 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result) ); 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 930b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 938b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifygetsetSymbols(UDateFormat* from, UDateFormat* to, UDateFormatSymbolType type, int32_t idx) 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(from, type, idx , NULL, resultlength, &status); 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(from, type, idx, result, resultlength, &status); 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 959b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_setSymbols(to, type, idx, result, resultlength, &status); 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 967b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(to, type, idx, NULL, resultlength, &status); 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * resultlength); 972b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(to, type, idx, value, resultlength, &status); 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n %s\n", 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0){ 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(result), 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(value) ); 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar* myNumformat(const UNumberFormat* numfor, double d) 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result2=NULL; 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthneeded; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=unum_formatDouble(numfor, d, NULL, resultlength, NULL, &status); 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded+1; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*result2=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /* this leaks */ 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result2=(UChar*)ctst_malloc(sizeof(UChar) * resultlength); /*this won't*/ 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(numfor, d, result2, resultlength, NULL, &status); 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in formatting using unum_format(.....) %s\n", myErrorName(status) ); 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result2; 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The search depth for TestExtremeDates. The total number of 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * dates that will be tested is (2^EXTREME_DATES_DEPTH) - 1. 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define EXTREME_DATES_DEPTH 8 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Support for TestExtremeDates (below). 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test a single date to see whether udat_format handles it properly. 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _aux1ExtremeDates(UDateFormat* fmt, UDate date, 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* buf, int32_t buflen, char* cbuf, 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = udat_format(fmt, date, buf, buflen, 0, ec); 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("udat_format", ec)) return FALSE; 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(cbuf, buf, buflen); 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (len < 4) { 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_format(%g) => \"%s\"\n", date, cbuf); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("udat_format(%g) => \"%s\"\n", date, cbuf); 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Support for TestExtremeDates (below). 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Recursively test between 'small' and 'large', up to the depth 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit specified by EXTREME_DATES_DEPTH. 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _aux2ExtremeDates(UDateFormat* fmt, UDate small, UDate large, 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* buf, int32_t buflen, char* cbuf, 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count, 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Logarithmic midpoint; see below */ 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate mid = (UDate) exp((log(small) + log(large)) / 2); 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count == EXTREME_DATES_DEPTH) { 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux1ExtremeDates(fmt, mid, buf, buflen, cbuf, ec) && 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, small, mid, buf, buflen, cbuf, count+1, ec) && 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, mid, large, buf, buflen, cbuf, count+1, ec); 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * http://www.jtcsv.com/cgibin/icu-bugs?findid=3659 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For certain large dates, udat_format crashes on MacOS. This test 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * attempts to reproduce this problem by doing a recursive logarithmic* 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * binary search of a predefined interval (from 'small' to 'large'). 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The limit of the search is given by EXTREME_DATES_DEPTH, above. 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * *The search has to be logarithmic, not linear. A linear search of the 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * range 0..10^30, for example, will find 0.5*10^30, then 0.25*10^30 and 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0.75*10^30, etc. A logarithmic search will find 10^15, then 10^7.5 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and 10^22.5, etc. 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestExtremeDates() { 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *fmt; 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec; 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[256]; 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cbuf[256]; 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const double small = 1000; /* 1 sec */ 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const double large = 1e+30; /* well beyond usable UDate range */ 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* There is no need to test larger values from 1e+30 to 1e+300; 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the failures occur around 1e+27, and never above 1e+30. */ 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = udat_open(UDAT_LONG, UDAT_LONG, "en_US", 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 0, 0, 0, &ec); 10916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(ec)) { 10926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: udat_open (%s) (Are you missing data?)\n", u_errorName(ec)); 10936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 10946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, small, large, buf, LEN(buf), cbuf, 0, &ec); 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fmt); 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAllLocales(void) { 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t idx, dateIdx, timeIdx, localeCount; 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UDateFormatStyle style[] = { 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localeCount = uloc_countAvailable(); 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (idx = 0; idx < localeCount; idx++) { 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (dateIdx = 0; dateIdx < (int32_t)(sizeof(style)/sizeof(style[0])); dateIdx++) { 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (timeIdx = 0; timeIdx < (int32_t)(sizeof(style)/sizeof(style[0])); timeIdx++) { 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(udat_open(style[dateIdx], style[timeIdx], 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getAvailable(idx), NULL, 0, NULL, 0, &status)); 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(%s) failed with (%s) dateIdx=%d, timeIdx=%d\n", 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getAvailable(idx), u_errorName(status), dateIdx, timeIdx); 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1122b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeCrash(void) { 1123b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static const UChar tzName[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; 1124b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static const UDate aDate = -631152000000.0; 1125b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1126b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1127b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode expectStatus = U_ILLEGAL_ARGUMENT_ERROR; 1128b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat icudf; 1129b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1130b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru icudf = udat_open(UDAT_NONE, UDAT_SHORT_RELATIVE, "en", tzName, -1, NULL, 0, &status); 1131b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1132b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *what = "???"; 1133b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_set2DigitYearStart"; 1136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_set2DigitYearStart(icudf, aDate, &subStatus); 1138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1143b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1145b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* clone works polymorphically. try it anyways */ 1146b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1147b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat *oth; 1148b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "clone"; 1149b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1150b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru oth = udat_clone(icudf, &subStatus); 1151b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == U_ZERO_ERROR) { 1152b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1153b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(oth); /* ? */ 1154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1157b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1158b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1159b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1160b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_get2DigitYearStart"; 1161b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1162b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_get2DigitYearStart(icudf, &subStatus); 1163b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1164b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1165b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1166b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1167b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1168b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1169b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1170b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Now udat_toPattern works for relative date formatters, unless localized is TRUE */ 1171b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1172b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_toPattern"; 1173b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1174b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_toPattern(icudf, TRUE,NULL,0, &subStatus); 1175b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1176b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1177b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_applyPattern"; 1184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPattern(icudf, FALSE,tzName,-1); 1186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* what it should be, if this took an errorcode. */ 1187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1191b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1193b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UChar erabuf[32]; 1195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1196b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_getSymbols"; 1197b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1198b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho udat_getSymbols(icudf, UDAT_ERAS,0,erabuf,sizeof(erabuf)/sizeof(erabuf[0]), &subStatus); 1199b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(subStatus == U_ZERO_ERROR) { 1200b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("Success: %s returned %s.\n", what, u_errorName(subStatus)); 1201b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1202b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("FAIL: didn't crash on %s, but got %s instead of U_ZERO_ERROR.\n", what, u_errorName(subStatus)); 120327f654740f2a26ad62a5c155af9199af9e69b889claireho } 120427f654740f2a26ad62a5c155af9199af9e69b889claireho } 120527f654740f2a26ad62a5c155af9199af9e69b889claireho { 120627f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode subStatus = U_ZERO_ERROR; 120727f654740f2a26ad62a5c155af9199af9e69b889claireho UChar symbolValue = 0x0041; 120827f654740f2a26ad62a5c155af9199af9e69b889claireho what = "udat_setSymbols"; 120927f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Trying %s on a relative date..\n", what); 121027f654740f2a26ad62a5c155af9199af9e69b889claireho udat_setSymbols(icudf, UDAT_ERAS,0,&symbolValue,1, &subStatus); /* bogus values */ 121127f654740f2a26ad62a5c155af9199af9e69b889claireho if(subStatus == expectStatus) { 121227f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 121327f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 121427f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1218b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1219b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_countSymbols"; 1220b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1221b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_countSymbols(icudf, UDAT_ERAS); 1222b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* should have an errorcode. */ 1223b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1224b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1225b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1226b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1227b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1228b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1229b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1230b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(icudf); 1231b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 12326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: err calling udat_open() ->%s (Are you missing data?)\n", u_errorName(status)); 1233b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1234b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1235b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1237