1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 3fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, 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" 24103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "unicode/udatpg.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucal.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unum.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cdattst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cformtst.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <math.h> 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestExtremeDates(void); 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAllLocales(void); 37b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeCrash(void); 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic void TestContext(void); 398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic void TestCalendarDateParse(void); 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LEN(a) (sizeof(a)/sizeof(a[0])) 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDateForTest(TestNode** root); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define TESTCASE(x) addTest(root, &x, "tsformat/cdattst/" #x) 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addDateForTest(TestNode** root) 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDateFormat); 50b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestRelativeDateFormat); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestSymbols); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestDateFormatCalendar); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestExtremeDates); 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TESTCASE(TestAllLocales); 55b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru TESTCASE(TestRelativeCrash); 56103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius TESTCASE(TestContext); 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius TESTCASE(TestCalendarDateParse); 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Testing the DateFormat API */ 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDateFormat() 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def, *fr, *it, *de, *def1, *fr_pat; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *any; 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *copy; 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* result = NULL; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UCalendar *cal; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UNumberFormat *numformat1, *numformat2; 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[50]; 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t numlocales; 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1; 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int i; 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength; 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlengthneeded; 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t parsepos; 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d = 837039928046.0; 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double num = -10456.37; 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*const char* str="yyyy.MM.dd G 'at' hh:mm:ss z"; 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char t[]="2/3/76 2:50 AM";*/ 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_open() to open a dateformat */ 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting udat_open() with various parameters\n"); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL,0, NULL, 0,&status); 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* def = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0, &status); */ 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def = udat_open(UDAT_SHORT, UDAT_SHORT, "en_US", NULL, 0,NULL, 0, &status); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru it = udat_open(UDAT_DEFAULT, UDAT_MEDIUM, "it_IT", NULL, 0, NULL, 0,&status); 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using medium date style with italian locale\n %s\n", 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru de = udat_open(UDAT_LONG, UDAT_LONG, "de_DE", NULL, 0, NULL, 0,&status); 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using long time and date styles with german locale\n %s\n", 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status)); 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a default dateformat */ 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def1 = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0,NULL, 0, &status); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_getAvailable() and udat_countAvailable()*/ 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getAvailableLocales and countAvailable()\n"); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numlocales=udat_countAvailable(); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* use something sensible w/o hardcoding the count */ 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(numlocales < 0) 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: error in countAvailable\n"); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("The number of locales for which date/time formatting patterns are available is %d\n", numlocales); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<numlocales;i++) { 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing open of %s\n", udat_getAvailable(i)); 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru any = udat_open(UDAT_SHORT, UDAT_SHORT, udat_getAvailable(i), NULL ,0, NULL, 0, &subStatus); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(subStatus)) { 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: date format %s (getAvailable(%d)) is not instantiable: %s\n", udat_getAvailable(i), i, u_errorName(subStatus)); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(any); 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_clone()*/ 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_clone() function of date format\n"); 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru copy=udat_clone(def, &status); 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in creating the clone using udat_clone: %s\n", myErrorName(status) ); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*if(def != copy) 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in udat_clone");*/ /*how should i check for equality???? */ 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_format()*/ 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_format() function of date format\n"); 15554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_uastrcpy(temp, "7/10/96, 4:05 PM"); 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using def */ 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=udat_format(def, d, NULL, resultlength, NULL, &status); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded+1; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_format(def, d, result, resultlength, NULL, &status); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status) || !result) 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in formatting using udat_format(.....) %s\n", myErrorName(status) ); 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: formatting successful\n"); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)==0) 178b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("PASS: Date Format for US locale successful using udat_format()\n"); 179b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru else { 180b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char xbuf[2048]; 181b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru char gbuf[2048]; 182b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_austrcpy(xbuf, temp); 183b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_austrcpy(gbuf, result); 184b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: Date Format for US locale failed using udat_format() - expected %s got %s\n", xbuf, gbuf); 185b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using fr */ 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru u_unescape("10 juil. 1996 16:05:28 heure avanc\\u00E9e du Pacifique", temp, 50); 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=myDateFormat(fr, d); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)==0) 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: Date Format for french locale successful using udat_format()\n"); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Date Format for french locale failed using udat_format().\n" ); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format using it */ 20050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho u_uastrcpy(temp, "10/lug/1996 16:05:28"); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *fmtted; 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char g[100]; 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char x[100]; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmtted = myDateFormat(it,d); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(g, fmtted); 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(x, temp); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(fmtted, temp)==0) { 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: Date Format for italian locale successful uisng udat_format() - wanted %s, got %s\n", x, g); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Date Format for italian locale failed using udat_format() - wanted %s, got %s\n", x, g); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing parsing using udat_parse()*/ 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting parsing using udat_parse()\n"); 21954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_uastrcpy(temp,"2/3/76, 2:50 AM"); 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru parsepos=0; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=udat_parse(def, temp, u_strlen(temp), &parsepos, &status); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in parsing using udat_parse(.....) %s\n", myErrorName(status) ); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parsing succesful\n"); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*format it back and check for equality */ 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(def, d1),temp)!=0) 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in parsing\n"); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing parsing using udat_parse()*/ 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting parsing using udat_parse()\n"); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(temp,"2/Don't parse this part"); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=udat_parse(def, temp, u_strlen(temp), NULL, &status); 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_PARSE_ERROR) 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parse(\"bad string\") passed when it should have failed\n"); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: parsing succesful\n"); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_openPattern() */ 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_openPattern with a specified pattern\n"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*for french locale */ 25554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fr_pat=udat_open(UDAT_PATTERN, UDAT_PATTERN,"fr_FR",NULL,0,temp, u_strlen(temp), &status); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in creating a date format using udat_openPattern \n %s\n", 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n"); 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing applyPattern and toPattern */ 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting applyPattern and toPattern()\n"); 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_applyPattern(def1, FALSE, temp, u_strlen(temp)); 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Extracting the pattern\n"); 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=udat_toPattern(def1, FALSE, NULL, resultlength, &status); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded + 1; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(def1, FALSE, result, resultlength, &status); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, temp)!=0) 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in extracting the pattern\n"); 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: applyPattern and toPattern work fine\n"); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing getter and setter functions*/ 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*isLenient and setLenient()*/ 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the isLenient and setLenient properties\n"); 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setLenient(fr, udat_isLenient(it)); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_isLenient(fr) != udat_isLenient(it)) 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: setLenient() failed\n"); 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setLenient() successful\n"); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test get2DigitYearStart set2DigitYearStart */ 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the get and set 2DigitYearStart properties\n"); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1= udat_get2DigitYearStart(fr_pat,&status); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: udat_get2DigitYearStart failed %s\n", myErrorName(status) ); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_set2DigitYearStart(def1 ,d1, &status); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_get2DigitYearStart(fr_pat, &status) != udat_get2DigitYearStart(def1, &status)) 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in set2DigitYearStart\n"); 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: set2DigitYearStart successful\n"); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try setting it to another value */ 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_set2DigitYearStart(de, 2000.0, &status); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_get2DigitYearStart(de, &status) != 2000) 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in set2DigitYearStart\n"); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: set2DigitYearStart successful\n"); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test getNumberFormat() and setNumberFormat() */ 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the get and set NumberFormat properties of date format\n"); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat1=udat_getNumberFormat(fr_pat); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setNumberFormat(def1, numformat1); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat2=udat_getNumberFormat(def1); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS:setNumberFormat and getNumberFormat succesful\n"); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*try setting the number format to another format */ 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat1=udat_getNumberFormat(def); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setNumberFormat(def1, numformat1); 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numformat2=udat_getNumberFormat(def1); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setNumberFormat and getNumberFormat succesful\n"); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test getCalendar and setCalendar*/ 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the udat_getCalendar() and udat_setCalendar() properties\n"); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=udat_getCalendar(fr_pat); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setCalendar(def1, cal); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!ucal_equivalentTo(udat_getCalendar(fr_pat), udat_getCalendar(def1))) 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in setting and getting the calendar\n"); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getting and setting calendar successful\n"); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result!=NULL) { 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Closing the UDateForamt */ 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr); 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(it); 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(de); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def1); 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr_pat); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(copy); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 380b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/* 381b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruTest combined relative date formatting (relative date + non-relative time). 382b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste QueruThis is a bit tricky since we can't have static test data for comparison, the 383b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querurelative date formatting is relative to the time the tests are run. We generate 384b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruthe data for comparison dynamically. However, the tests could fail if they are 385b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querurun right at midnight Pacific time and the call to ucal_getNow() is before midnight 386b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruwhile the calls to udat_format are after midnight or span midnight. 387b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru*/ 388b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UDate dayInterval = 24.0*60.0*60.0*1000.0; 389b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar trdfZone[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; /* US/Pacific */ 390b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const char trdfLocale[] = "en_US"; 391b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar minutesPatn[] = { 0x006D, 0x006D, 0 }; /* "mm" */ 392b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthLongPatn[] = { 0x004D, 0x004D, 0x004D, 0x004D, 0 }; /* "MMMM" */ 393b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthMediumPatn[] = { 0x004D, 0x004D, 0x004D, 0 }; /* "MMM" */ 394b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar monthShortPatn[] = { 0x004D, 0 }; /* "M" */ 395b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UDateFormatStyle dateStylesList[] = { UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT, UDAT_NONE }; 396b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar *monthPatnsList[] = { monthLongPatn, monthLongPatn, monthMediumPatn, monthShortPatn, NULL }; 397b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar newTimePatn[] = { 0x0048, 0x0048, 0x002C, 0x006D, 0x006D, 0 }; /* "HH,mm" */ 398b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UChar minutesStr[] = { 0x0034, 0x0039, 0 }; /* "49", minutes string to search for in output */ 399b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruenum { kDateOrTimeOutMax = 96, kDateAndTimeOutMax = 192 }; 400b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 40154dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UDate minutesTolerance = 2 * 60.0 * 1000.0; 40254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UDate daysTolerance = 2 * 24.0 * 60.0 * 60.0 * 1000.0; 40354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 404b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeDateFormat() 405b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru{ 406b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate today = 0.0; 407b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UDateFormatStyle * stylePtr; 408b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UChar ** monthPtnPtr; 409b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 410b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UCalendar * ucal = ucal_open(trdfZone, -1, trdfLocale, UCAL_GREGORIAN, &status); 411b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 412b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t year, month, day; 413b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setMillis(ucal, ucal_getNow(), &status); 414b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru year = ucal_get(ucal, UCAL_YEAR, &status); 415b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru month = ucal_get(ucal, UCAL_MONTH, &status); 416b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru day = ucal_get(ucal, UCAL_DATE, &status); 417b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setDateTime(ucal, year, month, day, 18, 49, 0, &status); /* set to today at 18:49:00 */ 418b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru today = ucal_getMillis(ucal, &status); 419b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_close(ucal); 420b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 421b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) || today == 0.0 ) { 42250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("Generate UDate for a specified time today fails, error %s - (Are you missing data?)\n", myErrorName(status) ); 423b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 424b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 425b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (stylePtr = dateStylesList, monthPtnPtr = monthPatnsList; *stylePtr != UDAT_NONE; ++stylePtr, ++monthPtnPtr) { 426b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtRelDateTime; 427b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtRelDate; 428b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat* fmtTime; 429b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t dayOffset, limit; 430b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UFieldPosition fp; 43154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar strDateTime[kDateAndTimeOutMax]; 43254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar strDate[kDateOrTimeOutMax]; 43354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar strTime[kDateOrTimeOutMax]; 43454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar * strPtr; 435b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t dtpatLen; 436b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 437b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtRelDateTime = udat_open(UDAT_SHORT, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 438b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 4396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("udat_open timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s (Are you missing data?)\n", *stylePtr, myErrorName(status) ); 440b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 441b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 442b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtRelDate = udat_open(UDAT_NONE, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 443b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 444b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_open timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 445b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 446b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 447b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 448b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fmtTime = udat_open(UDAT_SHORT, UDAT_NONE, trdfLocale, trdfZone, -1, NULL, 0, &status); 449b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 450b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_open timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 451b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 452b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDate); 453b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 454b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 455b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 456b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPatternRelativeDate(fmtRelDateTime, strDate, kDateAndTimeOutMax, &status); 457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 45854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 45954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 460b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDate, *monthPtnPtr) == NULL || dtpatLen != u_strlen(strDate) ) { 46154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) date pattern incorrect\n", *stylePtr ); 462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPatternRelativeTime(fmtRelDateTime, strTime, kDateAndTimeOutMax, &status); 464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 46554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 46654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 467b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strTime, minutesPatn) == NULL || dtpatLen != u_strlen(strTime) ) { 46854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) time pattern incorrect\n", *stylePtr ); 469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru dtpatLen = udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 471b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 47254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 47354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strDate) == NULL || u_strstr(strDateTime, strTime) == NULL || dtpatLen != u_strlen(strDateTime) ) { 47554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) dateTime pattern incorrect\n", *stylePtr ); 476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), newTimePatn, u_strlen(newTimePatn), &status); 478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 47954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 48054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 481b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 48254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 48354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_FAILURE(status) ) { 48454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 48554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 48654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( u_strstr(strDateTime, newTimePatn) == NULL ) { 48754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) didn't update time pattern\n", *stylePtr ); 48854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 489b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 490b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), strTime, u_strlen(strTime), &status); /* restore original */ 491b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 492b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fp.field = UDAT_MINUTE_FIELD; 493b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (dayOffset = -2, limit = 2; dayOffset <= limit; ++dayOffset) { 494b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate dateToUse = today + (float)dayOffset*dayInterval; 495b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 496b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtRelDateTime, dateToUse, strDateTime, kDateAndTimeOutMax, &fp, &status); 497b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 498b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 499b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 500b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 50154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t parsePos = 0; 50254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate dateResult = udat_parse(fmtRelDateTime, strDateTime, -1, &parsePos, &status); 50354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate dateDiff = (dateResult >= dateToUse)? dateResult - dateToUse: dateToUse - dateResult; 50454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_FAILURE(status) || dateDiff > minutesTolerance ) { 50554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_parse timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s, expect approx %.1f, got %.1f, parsePos %d\n", 50654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius *stylePtr, myErrorName(status), dateToUse, dateResult, parsePos ); 50754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 50854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 50954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 510b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtRelDate, dateToUse, strDate, kDateOrTimeOutMax, NULL, &status); 511b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 512b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 513b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 514b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strDate) == NULL ) { 515b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("relative date string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 51654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 51754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius parsePos = 0; 51854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dateResult = udat_parse(fmtRelDate, strDate, -1, &parsePos, &status); 51954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dateDiff = (dateResult >= dateToUse)? dateResult - dateToUse: dateToUse - dateResult; 52054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_FAILURE(status) || dateDiff > daysTolerance ) { 52154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("udat_parse timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s, expect approx %.1f, got %.1f, parsePos %d\n", 52254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius *stylePtr, myErrorName(status), dateToUse, dateResult, parsePos ); 52354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 52454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 525b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 526b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 527b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_format(fmtTime, dateToUse, strTime, kDateOrTimeOutMax, NULL, &status); 528b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_FAILURE(status) ) { 529b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("udat_format timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 530b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 531b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if ( u_strstr(strDateTime, strTime) == NULL ) { 532b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("time string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 533b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 534b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 535b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru strPtr = u_strstr(strDateTime, minutesStr); 536b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( strPtr != NULL ) { 537b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t beginIndex = strPtr - strDateTime; 538b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( fp.beginIndex != beginIndex ) { 539b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("UFieldPosition beginIndex %d, expected %d, in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", fp.beginIndex, beginIndex, *stylePtr ); 540b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 541b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 542b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("minutes string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 543b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 544b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 545b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 546b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 547b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDateTime); 548b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtRelDate); 549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(fmtTime); 550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 551b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Testing udat_getSymbols() and udat_setSymbols() and udat_countSymbols()*/ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestSymbols() 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *def, *fr; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result = NULL; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlengthout; 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a dateformat with french locale */ 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\ncreating a date format with french locale\n"); 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL, 0, NULL, 0, &status); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 5706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*creating a default dateformat */ 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\ncreating a date format with default locale\n"); 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, &status); */ 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US", NULL, 0, NULL, 0, &status); 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in creating the dateformat using short date and time style\n %s\n", 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing countSymbols, getSymbols and setSymbols*/ 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting countSymbols\n"); 590b13da9df870a61b11249bf741347908dbea0edd8Jean-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 */ 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(udat_countSymbols(def, UDAT_ERAS)!=2 || udat_countSymbols(def, UDAT_MONTHS)!=12 || 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_SHORT_MONTHS)!=12 || udat_countSymbols(def, UDAT_WEEKDAYS)!=8 || 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_SHORT_WEEKDAYS)!=8 || udat_countSymbols(def, UDAT_AM_PMS)!=2 || 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_countSymbols(def, UDAT_QUARTERS) != 4 || udat_countSymbols(def, UDAT_SHORT_QUARTERS) != 4 || 5958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_countSymbols(def, UDAT_LOCALIZED_CHARS)!=1 || udat_countSymbols(def, UDAT_SHORTER_WEEKDAYS)!=8) 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in udat_countSymbols\n"); 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: udat_countSymbols() successful\n"); 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing getSymbols*/ 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getSymbols\n"); 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * 10); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, "jeudi"); 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(fr, UDAT_WEEKDAYS, 5 , NULL, resultlength, &status); 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(fr, UDAT_WEEKDAYS, 5, result, resultlength, &status); 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_getSymbols().... %s\n", myErrorName(status) ); 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols succesful\n"); 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols retrieved the right value\n"); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: getSymbols retrieved the wrong value\n"); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test getsymbols regressively*/ 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getSymbols() regressively\n"); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_WEEKDAYS, 1, "dimanche"); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_WEEKDAYS, 1, "Sunday"); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_WEEKDAYS, 7, "sam."); 6378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius VerifygetSymbols(fr, UDAT_SHORTER_WEEKDAYS, 7, "sa"); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Sat"); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_MONTHS, 11, "December"); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_MONTHS, 0, "January"); 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_ERAS, 0, "av. J.-C."); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_AM_PMS, 0, "AM"); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_AM_PMS, 1, "PM"); 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_MONTHS, 0, "janv."); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_MONTHS, 11, "Dec"); 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_QUARTERS, 0, "1er trimestre"); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_QUARTERS, 3, "4th quarter"); 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "T2"); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetSymbols(def, UDAT_SHORT_QUARTERS, 2, "Q3"); 650fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr"); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufree(pattern); 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting setSymbols\n"); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*applying the pattern so that setSymbolss works */ 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_toPattern(fr, FALSE, NULL, resultlength, &status); 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout + 1; 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * resultlength); 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(fr, FALSE, pattern, resultlength, &status); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_applyPattern(def, FALSE, pattern, u_strlen(pattern)); 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_toPattern(def, FALSE, NULL, resultlength,&status); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout + 1; 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_toPattern(fr, FALSE,result, resultlength, &status); 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pattern applied properly\n"); 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("pattern could not be applied properly\n"); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querufree(pattern); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing set symbols */ 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(fr, UDAT_MONTHS, 11 , NULL, resultlength, &status); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(fr, UDAT_MONTHS, 11, result, resultlength, &status); 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_setSymbols(def, UDAT_MONTHS, 11, result, resultlength, &status); 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: SetSymbols successful\n"); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthout=udat_getSymbols(def, UDAT_MONTHS, 11, NULL, resultlength, &status); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * resultlength); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_getSymbols(def, UDAT_MONTHS, 11, value, resultlength, &status); 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n"); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0) 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Error in settting and getting symbols\n"); 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test setSymbols regressively*/ 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting setSymbols regressively\n"); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_ERAS, 0, "BeforeChrist"); 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_ERA_NAMES, 1, "AnnoDomini"); 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_WEEKDAYS, 1, "Sundayweek"); 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Satweek"); 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_NARROW_WEEKDAYS, 4, "M"); 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_WEEKDAYS, 1, "Sonntagweek"); 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_SHORT_WEEKDAYS, 7, "Sams"); 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(def, UDAT_STANDALONE_NARROW_WEEKDAYS, 4, "V"); 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_MONTHS, 11, "december"); 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_SHORT_MONTHS, 0, "Jan"); 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_NARROW_MONTHS, 1, "R"); 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_MONTHS, 11, "dezember"); 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_MONTHS, 7, "Aug"); 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_NARROW_MONTHS, 2, "M"); 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_QUARTERS, 0, "1. Quart"); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "QQ2"); 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_QUARTERS, 2, "3rd Quar."); 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_QUARTERS, 3, "4QQ"); 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*run series of tests to test get and setSymbols regressively*/ 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting get and set symbols regressively\n"); 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 1); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 7); 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 1); 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 7); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_MONTHS, 0); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_SHORT_MONTHS, 0); 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_ERAS,1); 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_LOCALIZED_CHARS, 0); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru VerifygetsetSymbols(fr, def, UDAT_AM_PMS, 1); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*closing*/ 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fr); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(def); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(result != NULL) { 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result = NULL; 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test DateFormat(Calendar) API 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDateFormatCalendar() { 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *date=0, *time=0, *full=0; 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal=0; 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[256]; 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cbuf[256]; 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t pos; 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate when; 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec = U_ZERO_ERROR; 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &ec); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a formatter for date fields. */ 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = udat_open(UDAT_NONE, UDAT_SHORT, "en_US", NULL, 0, NULL, 0, &ec); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 8086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: udat_open(NONE, SHORT, en_US) failed with %s (Are you missing data?)\n", 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a formatter for time fields. */ 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru time = udat_open(UDAT_SHORT, UDAT_NONE, "en_US", NULL, 0, NULL, 0, &ec); 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(SHORT, NONE, en_US) failed with %s\n", 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a full format for output */ 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru full = udat_open(UDAT_FULL, UDAT_FULL, "en_US", NULL, 0, NULL, 0, &ec); 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(FULL, FULL, en_US) failed with %s\n", 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Create a calendar */ 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &ec); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_open(en_US) failed with %s\n", 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(ec)); 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Parse the date */ 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buf, "4/5/2001"); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = 0; 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_parseCalendar(date, cal, buf, -1, &pos, &ec); 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parseCalendar(4/5/2001) failed at %d with %s\n", 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos, u_errorName(ec)); 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Parse the time */ 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(buf, "5:45 PM"); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos = 0; 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_parseCalendar(time, cal, buf, -1, &pos, &ec); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_parseCalendar(17:45) failed at %d with %s\n", 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pos, u_errorName(ec)); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Check result */ 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru when = ucal_getMillis(cal, &ec); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getMillis() failed with %s\n", u_errorName(ec)); 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_format(full, when, buf, sizeof(buf), NULL, &ec); 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(ec)) { 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_format() failed with %s\n", u_errorName(ec)); 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru goto FAIL; 868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(cbuf, buf); 870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Thursday, April 5, 2001 5:45:00 PM PDT 986517900000 */ 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (when == 986517900000.0) { 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Ok: Parsed result: %s\n", cbuf); 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Parsed result: %s, exp 4/5/2001 5:45 PM\n", cbuf); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FAIL: 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(date); 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(time); 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(full); 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 8878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 8888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/** 88959d709d503bab6e2b61931737e662dd293b40578ccornelius * Test parsing two digit year against "YY" vs. "YYYY" patterns 8908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius */ 8918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic void TestCalendarDateParse() { 8928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 89359d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t result; 89459d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode ec = U_ZERO_ERROR; 8958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UDateFormat* simpleDateFormat = 0; 89659d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t parsePos = 0; 89759d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t twoDigitCenturyStart = 75; 89859d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t currentTwoDigitYear = 0; 89959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t startCentury = 0; 9008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UCalendar* tempCal = 0; 9018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UCalendar* calendar = 0; 9028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_DECL(pattern, "yyyy", 4); 9048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_DECL(pattern2, "yy", 2); 9058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_DECL(text, "75", 2); 9068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_INIT(pattern, "yyyy", 4); 9088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_INIT(pattern2, "yy", 2); 9098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius U_STRING_INIT(text, "75", 2); 9108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius simpleDateFormat = udat_open(UDAT_FULL, UDAT_FULL, "en-GB", 0, 0, 0, 0, &ec); 9128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(ec)) { 9138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_data_err("udat_open(UDAT_FULL, UDAT_FULL, \"en-GB\", 0, 0, 0, 0, &ec) failed: %s - (Are you missing data?)\n", u_errorName(ec)); 9148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return; 9158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_applyPattern(simpleDateFormat, 0, pattern, u_strlen(pattern)); 9178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_setLenient(simpleDateFormat, 0); 9188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius currentTwoDigitYear = getCurrentYear() % 100; 9208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius startCentury = getCurrentYear() - currentTwoDigitYear; 9218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (twoDigitCenturyStart > currentTwoDigitYear) { 92259d709d503bab6e2b61931737e662dd293b40578ccornelius startCentury -= 100; 9238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 92459d709d503bab6e2b61931737e662dd293b40578ccornelius tempCal = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &ec); 92559d709d503bab6e2b61931737e662dd293b40578ccornelius ucal_setMillis(tempCal, 0, &ec); 92659d709d503bab6e2b61931737e662dd293b40578ccornelius ucal_setDateTime(tempCal, startCentury + twoDigitCenturyStart, UCAL_JANUARY, 1, 0, 0, 0, &ec); 92759d709d503bab6e2b61931737e662dd293b40578ccornelius udat_set2DigitYearStart(simpleDateFormat, ucal_getMillis(tempCal, &ec), &ec); 9288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 92959d709d503bab6e2b61931737e662dd293b40578ccornelius calendar = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &ec); 93059d709d503bab6e2b61931737e662dd293b40578ccornelius ucal_setMillis(calendar, 0, &ec); 93159d709d503bab6e2b61931737e662dd293b40578ccornelius ucal_setDateTime(calendar, twoDigitCenturyStart, UCAL_JANUARY, 1, 0, 0, 0, &ec); 9328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 93359d709d503bab6e2b61931737e662dd293b40578ccornelius udat_parseCalendar(simpleDateFormat, calendar, text, u_strlen(text), &parsePos, &ec); 9348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius /* Check result */ 9368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius result = ucal_get(calendar, UCAL_YEAR, &ec); 9378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(ec)) { 9388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: ucal_get(UCAL_YEAR) failed with %s\n", u_errorName(ec)); 9398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius goto FAIL; 9408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (result != 75) { 9438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: parsed incorrect year: %d\n", result); 9448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius goto FAIL; 9458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius parsePos = 0; 9488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_applyPattern(simpleDateFormat, 0, pattern2, u_strlen(pattern2)); 94959d709d503bab6e2b61931737e662dd293b40578ccornelius udat_parseCalendar(simpleDateFormat, calendar, text, u_strlen(text), &parsePos, &ec); 9508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius /* Check result */ 9528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius result = ucal_get(calendar, UCAL_YEAR, &ec); 9538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(ec)) { 9548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: ucal_get(UCAL_YEAR) failed with %s\n", u_errorName(ec)); 9558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius goto FAIL; 9568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (result != 1975) { 9598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: parsed incorrect year: %d\n", result); 9608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius goto FAIL; 9618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius FAIL: 9648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_close(simpleDateFormat); 9658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_close(tempCal); 9668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius udat_close(calendar); 9678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 9688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*INTERNAL FUNCTIONS USED*/ 9718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusstatic int getCurrentYear() { 9728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius static int currentYear = 0; 9738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (currentYear == 0) { 9748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UErrorCode status = U_ZERO_ERROR; 9758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UCalendar *cal = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &status); 9768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (!U_FAILURE(status)) { 9778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius /* Get the current year from the default UCalendar */ 9788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius currentYear = ucal_get(cal, UCAL_YEAR, &status); 9798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ucal_close(cal); 9808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 9828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 9838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return currentYear; 9848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 9858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru/* N.B.: use idx instead of index to avoid 'shadow' warnings in strict mode. */ 987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifygetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *pattern=NULL; 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru pattern=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1)); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(pattern, expected); 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 998b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(datfor, type, idx , NULL, resultlength, &status); 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 1004b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(datfor, type, idx, result, resultlength, &status); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_getSymbols()... %s\n", myErrorName(status) ); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, pattern)==0) 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getSymbols retrieved the right value\n"); 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: getSymbols retrieved the wrong value\n Expected %s Got %s\n", austrdup(pattern), 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result) ); 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(pattern); 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1022b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifysetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * (strlen(expected) + 1)); 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(value, expected); 1031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_setSymbols(datfor, type, idx, value, u_strlen(value), &status); 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() %s\n", myErrorName(status) ); 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 1039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(datfor, type, idx, NULL, resultlength, &status); 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 1044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(datfor, type, idx, result, resultlength, &status); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols after setting it previously\n %s\n", 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0){ 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(value), 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(result) ); 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1064b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void VerifygetsetSymbols(UDateFormat* from, UDateFormat* to, UDateFormatSymbolType type, int32_t idx) 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result=NULL; 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *value=NULL; 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthout; 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 1072b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(from, type, idx , NULL, resultlength, &status); 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 1077b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(from, type, idx, result, resultlength, &status); 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 1085b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_setSymbols(to, type, idx, result, resultlength, &status); 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 1093b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru resultlengthout=udat_getSymbols(to, type, idx, NULL, resultlength, &status); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR){ 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthout+1; 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(UChar*)malloc(sizeof(UChar) * resultlength); 1098b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_getSymbols(to, type, idx, value, resultlength, &status); 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n %s\n", 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru myErrorName(status) ); 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(result, value)!=0){ 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(result), 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru austrdup(value) ); 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setSymbols successful\n"); 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(value); 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UChar* myNumformat(const UNumberFormat* numfor, double d) 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result2=NULL; 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthneeded; 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=unum_formatDouble(numfor, d, NULL, resultlength, NULL, &status); 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded+1; 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*result2=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /* this leaks */ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result2=(UChar*)ctst_malloc(sizeof(UChar) * resultlength); /*this won't*/ 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru unum_formatDouble(numfor, d, result2, resultlength, NULL, &status); 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in formatting using unum_format(.....) %s\n", myErrorName(status) ); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return result2; 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The search depth for TestExtremeDates. The total number of 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * dates that will be tested is (2^EXTREME_DATES_DEPTH) - 1. 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define EXTREME_DATES_DEPTH 8 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Support for TestExtremeDates (below). 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test a single date to see whether udat_format handles it properly. 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _aux1ExtremeDates(UDateFormat* fmt, UDate date, 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* buf, int32_t buflen, char* cbuf, 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len = udat_format(fmt, date, buf, buflen, 0, ec); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!assertSuccess("udat_format", ec)) return FALSE; 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrncpy(cbuf, buf, buflen); 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (len < 4) { 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_format(%g) => \"%s\"\n", date, cbuf); 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("udat_format(%g) => \"%s\"\n", date, cbuf); 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Support for TestExtremeDates (below). 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Recursively test between 'small' and 'large', up to the depth 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * limit specified by EXTREME_DATES_DEPTH. 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool _aux2ExtremeDates(UDateFormat* fmt, UDate small, UDate large, 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* buf, int32_t buflen, char* cbuf, 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count, 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Logarithmic midpoint; see below */ 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate mid = (UDate) exp((log(small) + log(large)) / 2); 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count == EXTREME_DATES_DEPTH) { 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux1ExtremeDates(fmt, mid, buf, buflen, cbuf, ec) && 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, small, mid, buf, buflen, cbuf, count+1, ec) && 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, mid, large, buf, buflen, cbuf, count+1, ec); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * http://www.jtcsv.com/cgibin/icu-bugs?findid=3659 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For certain large dates, udat_format crashes on MacOS. This test 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * attempts to reproduce this problem by doing a recursive logarithmic* 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * binary search of a predefined interval (from 'small' to 'large'). 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The limit of the search is given by EXTREME_DATES_DEPTH, above. 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * *The search has to be logarithmic, not linear. A linear search of the 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * range 0..10^30, for example, will find 0.5*10^30, then 0.25*10^30 and 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0.75*10^30, etc. A logarithmic search will find 10^15, then 10^7.5 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and 10^22.5, etc. 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestExtremeDates() { 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *fmt; 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode ec; 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar buf[256]; 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char cbuf[256]; 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const double small = 1000; /* 1 sec */ 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const double large = 1e+30; /* well beyond usable UDate range */ 1210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* There is no need to test larger values from 1e+30 to 1e+300; 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru the failures occur around 1e+27, and never above 1e+30. */ 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ec = U_ZERO_ERROR; 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt = udat_open(UDAT_LONG, UDAT_LONG, "en_US", 1216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 0, 0, 0, 0, &ec); 12176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(ec)) { 12186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: udat_open (%s) (Are you missing data?)\n", u_errorName(ec)); 12196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return; 12206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru _aux2ExtremeDates(fmt, small, large, buf, LEN(buf), cbuf, 0, &ec); 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(fmt); 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAllLocales(void) { 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t idx, dateIdx, timeIdx, localeCount; 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UDateFormatStyle style[] = { 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT 1231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru localeCount = uloc_countAvailable(); 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (idx = 0; idx < localeCount; idx++) { 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (dateIdx = 0; dateIdx < (int32_t)(sizeof(style)/sizeof(style[0])); dateIdx++) { 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (timeIdx = 0; timeIdx < (int32_t)(sizeof(style)/sizeof(style[0])); timeIdx++) { 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(udat_open(style[dateIdx], style[timeIdx], 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getAvailable(idx), NULL, 0, NULL, 0, &status)); 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: udat_open(%s) failed with (%s) dateIdx=%d, timeIdx=%d\n", 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uloc_getAvailable(idx), u_errorName(status), dateIdx, timeIdx); 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestRelativeCrash(void) { 1249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static const UChar tzName[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; 1250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru static const UDate aDate = -631152000000.0; 1251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode expectStatus = U_ILLEGAL_ARGUMENT_ERROR; 1254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat icudf; 1255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru icudf = udat_open(UDAT_NONE, UDAT_SHORT_RELATIVE, "en", tzName, -1, NULL, 0, &status); 1257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 1258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *what = "???"; 1259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_set2DigitYearStart"; 1262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_set2DigitYearStart(icudf, aDate, &subStatus); 1264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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)); 1268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1271b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* clone works polymorphically. try it anyways */ 1272b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1273b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDateFormat *oth; 1274b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "clone"; 1275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1276b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru oth = udat_clone(icudf, &subStatus); 1277b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == U_ZERO_ERROR) { 1278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1279b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(oth); /* ? */ 1280b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1281b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: didn't crash on %s, but got %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_get2DigitYearStart"; 1287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_get2DigitYearStart(icudf, &subStatus); 1289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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)); 1293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /* Now udat_toPattern works for relative date formatters, unless localized is TRUE */ 1297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_toPattern"; 1299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_toPattern(icudf, TRUE,NULL,0, &subStatus); 1301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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)); 1305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1308b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1309b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_applyPattern"; 1310b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1311b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_applyPattern(icudf, FALSE,tzName,-1); 1312b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* what it should be, if this took an errorcode. */ 1313b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1314b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1315b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1316b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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)); 1317b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1318b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1319b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 132054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar erabuf[32]; 1321b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1322b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_getSymbols"; 1323b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1324b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho udat_getSymbols(icudf, UDAT_ERAS,0,erabuf,sizeof(erabuf)/sizeof(erabuf[0]), &subStatus); 1325b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if(subStatus == U_ZERO_ERROR) { 1326b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_verbose("Success: %s returned %s.\n", what, u_errorName(subStatus)); 1327b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1328b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("FAIL: didn't crash on %s, but got %s instead of U_ZERO_ERROR.\n", what, u_errorName(subStatus)); 132927f654740f2a26ad62a5c155af9199af9e69b889claireho } 133027f654740f2a26ad62a5c155af9199af9e69b889claireho } 133127f654740f2a26ad62a5c155af9199af9e69b889claireho { 133227f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode subStatus = U_ZERO_ERROR; 133327f654740f2a26ad62a5c155af9199af9e69b889claireho UChar symbolValue = 0x0041; 133427f654740f2a26ad62a5c155af9199af9e69b889claireho what = "udat_setSymbols"; 133527f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Trying %s on a relative date..\n", what); 133627f654740f2a26ad62a5c155af9199af9e69b889claireho udat_setSymbols(icudf, UDAT_ERAS,0,&symbolValue,1, &subStatus); /* bogus values */ 133727f654740f2a26ad62a5c155af9199af9e69b889claireho if(subStatus == expectStatus) { 133827f654740f2a26ad62a5c155af9199af9e69b889claireho log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 133927f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 134027f654740f2a26ad62a5c155af9199af9e69b889claireho log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 1341b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1342b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1343b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { 1344b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode subStatus = U_ZERO_ERROR; 1345b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru what = "udat_countSymbols"; 1346b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Trying %s on a relative date..\n", what); 1347b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_countSymbols(icudf, UDAT_ERAS); 1348b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* should have an errorcode. */ 1349b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(subStatus == expectStatus) { 1350b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 1351b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1352b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-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)); 1353b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1354b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1355b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1356b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru udat_close(icudf); 1357b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 13586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: err calling udat_open() ->%s (Are you missing data?)\n", u_errorName(status)); 1359b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1360b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1361b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1362103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const UChar skeleton_yMMMM[] = { 0x79,0x4D,0x4D,0x4D,0x4D,0 }; /* "yMMMM"; fr maps to "MMMM y", cs maps to "LLLL y" */ 1363103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const UChar july2008_frDefault[] = { 0x6A,0x75,0x69,0x6C,0x6C,0x65,0x74,0x20,0x32,0x30,0x30,0x38,0 }; /* "juillet 2008" */ 1364103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const UChar july2008_frTitle[] = { 0x4A,0x75,0x69,0x6C,0x6C,0x65,0x74,0x20,0x32,0x30,0x30,0x38,0 }; /* "Juillet 2008" sentence-begin, standalone */ 1365103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const UChar july2008_csDefault[] = { 0x10D,0x65,0x72,0x76,0x65,0x6E,0x65,0x63,0x20,0x32,0x30,0x30,0x38,0 }; /* "c(hacek)ervenec 2008" */ 1366103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const UChar july2008_csTitle[] = { 0x10C,0x65,0x72,0x76,0x65,0x6E,0x65,0x63,0x20,0x32,0x30,0x30,0x38,0 }; /* "C(hacek)ervenec 2008" sentence-begin, uiListOrMenu */ 1367103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1368103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 1369103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char * locale; 1370103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar * skeleton; 137154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext capitalizationContext; 1372103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const UChar * expectedFormat; 1373103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TestContextItem; 1374103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1375103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const TestContextItem textContextItems[] = { 137654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_NONE, july2008_frDefault }, 1377103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !UCONFIG_NO_BREAK_ITERATION 137854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, july2008_frDefault }, 137954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, july2008_frTitle }, 138054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, july2008_frDefault }, 138154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, july2008_frTitle }, 1382103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 138354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_NONE, july2008_csDefault }, 1384103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if !UCONFIG_NO_BREAK_ITERATION 138554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, july2008_csDefault }, 138654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, july2008_csTitle }, 138754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, july2008_csTitle }, 138854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, july2008_csDefault }, 1389103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif 139054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NULL, NULL, (UDisplayContext)0, NULL } 1391103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 1392103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1393fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar today_enDefault[] = { 0x74,0x6F,0x64,0x61,0x79,0 }; /* "today" */ 1394fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar today_enTitle[] = { 0x54,0x6F,0x64,0x61,0x79,0 }; /* "Today" sentence-begin, uiListOrMenu, standalone */ 1395fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar yesterday_enDefault[] = { 0x79,0x65,0x73,0x74,0x65,0x72,0x64,0x61,0x79,0 }; /* "yesterday" */ 1396fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar yesterday_enTitle[] = { 0x59,0x65,0x73,0x74,0x65,0x72,0x64,0x61,0x79,0 }; /* "Yesterday" sentence-begin, uiListOrMenu, standalone */ 1397fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar today_nbDefault[] = { 0x69,0x20,0x64,0x61,0x67,0 }; /* "i dag" */ 1398fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar today_nbTitle[] = { 0x49,0x20,0x64,0x61,0x67,0 }; /* "I dag" sentence-begin, standalone */ 1399fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar yesterday_nbDefault[] = { 0x69,0x20,0x67,0xE5,0x72,0 }; 1400fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar yesterday_nbTitle[] = { 0x49,0x20,0x67,0xE5,0x72,0 }; 1401fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1402fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliustypedef struct { 1403fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const char * locale; 1404fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDisplayContext capitalizationContext; 1405fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UChar * expectedFormatToday; 1406fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const UChar * expectedFormatYesterday; 1407fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius} TestRelativeContextItem; 1408fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1409fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const TestRelativeContextItem textContextRelativeItems[] = { 1410fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", UDISPCTX_CAPITALIZATION_NONE, today_enDefault, yesterday_enDefault }, 1411fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION 1412fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, today_enDefault, yesterday_enDefault }, 1413fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, today_enTitle, yesterday_enTitle }, 1414fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, today_enTitle, yesterday_enTitle }, 1415fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "en", UDISPCTX_CAPITALIZATION_FOR_STANDALONE, today_enTitle, yesterday_enTitle }, 1416fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1417fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "nb", UDISPCTX_CAPITALIZATION_NONE, today_nbDefault, yesterday_nbDefault }, 1418fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#if !UCONFIG_NO_BREAK_ITERATION 1419fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "nb", UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, today_nbDefault, yesterday_nbDefault }, 1420fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "nb", UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, today_nbTitle, yesterday_nbTitle }, 1421fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "nb", UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, today_nbDefault, yesterday_nbDefault }, 1422fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { "nb", UDISPCTX_CAPITALIZATION_FOR_STANDALONE, today_nbTitle, yesterday_nbTitle }, 1423fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif 1424fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius { NULL, (UDisplayContext)0, NULL, NULL } 1425fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}; 1426fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius 1427fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UChar zoneGMT[] = { 0x47,0x4D,0x54,0 }; /* "GMT" */ 1428fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusstatic const UDate july022008 = 1215000000000.0; 1429103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusenum { kUbufMax = 64, kBbufMax = 3*kUbufMax }; 1430103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1431103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic void TestContext(void) { 1432fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const TestContextItem* textContextItemPtr; 1433fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius const TestRelativeContextItem* textRelContextItemPtr; 1434fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (textContextItemPtr = textContextItems; textContextItemPtr->locale != NULL; ++textContextItemPtr) { 1435103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1436fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDateTimePatternGenerator* udtpg = udatpg_open(textContextItemPtr->locale, &status); 1437fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1438fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UChar ubuf[kUbufMax]; 1439fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t len = udatpg_getBestPattern(udtpg, textContextItemPtr->skeleton, -1, ubuf, kUbufMax, &status); 1440fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1441fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDateFormat* udfmt = udat_open(UDAT_PATTERN, UDAT_PATTERN, textContextItemPtr->locale, zoneGMT, -1, ubuf, len, &status); 1442fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 144354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius udat_setContext(udfmt, textContextItemPtr->capitalizationContext, &status); 1444fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 144554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDisplayContext getContext; 1446103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius len = udat_format(udfmt, july022008, ubuf, kUbufMax, NULL, &status); 1447103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 1448103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: udat_format for locale %s, capitalizationContext %d, status %s\n", 1449103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 1450103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 1451103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (u_strncmp(ubuf, textContextItemPtr->expectedFormat, kUbufMax) != 0) { 1452103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char bbuf1[kBbufMax]; 1453103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius char bbuf2[kBbufMax]; 1454103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: udat_format for locale %s, capitalizationContext %d, expected %s, got %s\n", 1455103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, 1456103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_austrncpy(bbuf1,textContextItemPtr->expectedFormat,kUbufMax), u_austrncpy(bbuf2,ubuf,kUbufMax) ); 1457103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 145854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius getContext = udat_getContext(udfmt, UDISPCTX_TYPE_CAPITALIZATION, &status); 1459103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 146054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: udat_getContext for locale %s, capitalizationContext %d, status %s\n", 1461103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 146254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (getContext != textContextItemPtr->capitalizationContext) { 146354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: udat_getContext for locale %s, capitalizationContext %d, got context %d\n", 146454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, (int)getContext ); 1465103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1466fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1467fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_setContext for locale %s, capitalizationContext %d, status %s\n", 1468fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 1469fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1470fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius udat_close(udfmt); 1471fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1472fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_data_err("FAIL: udat_open for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 1473fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1474fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1475fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udatpg_getBestPattern for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 1476fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1477fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius udatpg_close(udtpg); 1478fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1479fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_data_err("FAIL: udatpg_open for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 1480fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1481fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1482fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius for (textRelContextItemPtr = textContextRelativeItems; textRelContextItemPtr->locale != NULL; ++textRelContextItemPtr) { 1483fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UErrorCode status = U_ZERO_ERROR; 1484fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UCalendar* ucal = ucal_open(zoneGMT, -1, "root", UCAL_GREGORIAN, &status); 1485fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1486fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDateFormat* udfmt = udat_open(UDAT_NONE, UDAT_LONG_RELATIVE, textRelContextItemPtr->locale, zoneGMT, -1, NULL, 0, &status); 1487fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1488fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius udat_setContext(udfmt, textRelContextItemPtr->capitalizationContext, &status); 1489fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1490fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UDate yesterday, today = ucal_getNow(); 1491fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius UChar ubuf[kUbufMax]; 1492fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char bbuf1[kBbufMax]; 1493fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius char bbuf2[kBbufMax]; 1494fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius int32_t len = udat_format(udfmt, today, ubuf, kUbufMax, NULL, &status); 1495fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius (void)len; 1496fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_FAILURE(status) ) { 1497fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_format today for locale %s, capitalizationContext %d, status %s\n", 1498fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textRelContextItemPtr->locale, (int)textRelContextItemPtr->capitalizationContext, u_errorName(status) ); 1499fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else if (u_strncmp(ubuf, textRelContextItemPtr->expectedFormatToday, kUbufMax) != 0) { 1500fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_format today for locale %s, capitalizationContext %d, expected %s, got %s\n", 1501fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textRelContextItemPtr->locale, (int)textRelContextItemPtr->capitalizationContext, 1502fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius u_austrncpy(bbuf1,textRelContextItemPtr->expectedFormatToday,kUbufMax), u_austrncpy(bbuf2,ubuf,kUbufMax) ); 1503fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1504fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius status = U_ZERO_ERROR; 1505fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ucal_setMillis(ucal, today, &status); 1506fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ucal_add(ucal, UCAL_DATE, -1, &status); 1507fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius yesterday = ucal_getMillis(ucal, &status); 1508fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_SUCCESS(status) ) { 1509fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius len = udat_format(udfmt, yesterday, ubuf, kUbufMax, NULL, &status); 1510fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius if ( U_FAILURE(status) ) { 1511fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_format yesterday for locale %s, capitalizationContext %d, status %s\n", 1512fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textRelContextItemPtr->locale, (int)textRelContextItemPtr->capitalizationContext, u_errorName(status) ); 1513fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else if (u_strncmp(ubuf, textRelContextItemPtr->expectedFormatYesterday, kUbufMax) != 0) { 1514fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_format yesterday for locale %s, capitalizationContext %d, expected %s, got %s\n", 1515fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textRelContextItemPtr->locale, (int)textRelContextItemPtr->capitalizationContext, 1516fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius u_austrncpy(bbuf1,textRelContextItemPtr->expectedFormatYesterday,kUbufMax), u_austrncpy(bbuf2,ubuf,kUbufMax) ); 1517fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } 1518103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1519fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1520fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_err("FAIL: udat_setContext relative for locale %s, capitalizationContext %d, status %s\n", 1521fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius textRelContextItemPtr->locale, (int)textRelContextItemPtr->capitalizationContext, u_errorName(status) ); 1522103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1523fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius udat_close(udfmt); 1524fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1525fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_data_err("FAIL: udat_open relative for locale %s, status %s\n", textRelContextItemPtr->locale, u_errorName(status) ); 1526103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1527fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius ucal_close(ucal); 1528fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius } else { 1529fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_data_err("FAIL: ucal_open for locale root, status %s\n", u_errorName(status) ); 1530103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1531103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1532103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 1533103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1535