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