16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************** 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT: 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2013, International Business Machines Corporation and 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/ 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************** 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File CDATTST.C 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History: 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Madhu Katragadda Creation 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org********************************************************************************* 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* C API TEST FOR DATE FORMAT */ 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udat.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/udatpg.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucal.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unum.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cintltst.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cdattst.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cformtst.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <math.h> 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestExtremeDates(void); 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestAllLocales(void); 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRelativeCrash(void); 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestContext(void); 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCalendarDateParse(void); 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LEN(a) (sizeof(a)/sizeof(a[0])) 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addDateForTest(TestNode** root); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define TESTCASE(x) addTest(root, &x, "tsformat/cdattst/" #x) 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid addDateForTest(TestNode** root) 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestDateFormat); 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestRelativeDateFormat); 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestSymbols); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestDateFormatCalendar); 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestExtremeDates); 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestAllLocales); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestRelativeCrash); 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestContext); 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TESTCASE(TestCalendarDateParse); 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Testing the DateFormat API */ 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestDateFormat() 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *def, *fr, *it, *de, *def1, *fr_pat; 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *any; 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *copy; 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* result = NULL; 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UCalendar *cal; 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UNumberFormat *numformat1, *numformat2; 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar temp[50]; 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t numlocales; 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d1; 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int i; 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength; 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlengthneeded; 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t parsepos; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate d = 837039928046.0; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org double num = -10456.37; 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*const char* str="yyyy.MM.dd G 'at' hh:mm:ss z"; 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char t[]="2/3/76 2:50 AM";*/ 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing udat_open() to open a dateformat */ 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ctest_setTimeZone(NULL, &status); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting udat_open() with various parameters\n"); 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL,0, NULL, 0,&status); 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* this is supposed to open default date format, but later on it treats it like it is "en_US" 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* def = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0, &status); */ 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org def = udat_open(UDAT_SHORT, UDAT_SHORT, "en_US", NULL, 0,NULL, 0, &status); 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org it = udat_open(UDAT_DEFAULT, UDAT_MEDIUM, "it_IT", NULL, 0, NULL, 0,&status); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in creating the dateformat using medium date style with italian locale\n %s\n", 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org de = udat_open(UDAT_LONG, UDAT_LONG, "de_DE", NULL, 0, NULL, 0,&status); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in creating the dateformat using long time and date styles with german locale\n %s\n", 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status)); 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*creating a default dateformat */ 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org def1 = udat_open(UDAT_SHORT, UDAT_SHORT, NULL, NULL, 0,NULL, 0, &status); 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in creating the dateformat using short date and time style\n %s\n", 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing udat_getAvailable() and udat_countAvailable()*/ 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting getAvailableLocales and countAvailable()\n"); 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numlocales=udat_countAvailable(); 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* use something sensible w/o hardcoding the count */ 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(numlocales < 0) 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: error in countAvailable\n"); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("The number of locales for which date/time formatting patterns are available is %d\n", numlocales); 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0;i<numlocales;i++) { 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Testing open of %s\n", udat_getAvailable(i)); 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org any = udat_open(UDAT_SHORT, UDAT_SHORT, udat_getAvailable(i), NULL ,0, NULL, 0, &subStatus); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(subStatus)) { 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: date format %s (getAvailable(%d)) is not instantiable: %s\n", udat_getAvailable(i), i, u_errorName(subStatus)); 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(any); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing udat_clone()*/ 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the udat_clone() function of date format\n"); 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org copy=udat_clone(def, &status); 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in creating the clone using udat_clone: %s\n", myErrorName(status) ); 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*if(def != copy) 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("Error in udat_clone");*/ /*how should i check for equality???? */ 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing udat_format()*/ 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the udat_format() function of date format\n"); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(temp, "7/10/96, 4:05 PM"); 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format using def */ 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthneeded=udat_format(def, d, NULL, resultlength, NULL, &status); 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthneeded+1; 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(def, d, result, resultlength, NULL, &status); 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status) || !result) 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in formatting using udat_format(.....) %s\n", myErrorName(status) ); 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: formatting successful\n"); 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, temp)==0) 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: Date Format for US locale successful using udat_format()\n"); 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else { 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char xbuf[2048]; 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char gbuf[2048]; 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrcpy(xbuf, temp); 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrcpy(gbuf, result); 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Date Format for US locale failed using udat_format() - expected %s got %s\n", xbuf, gbuf); 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format using fr */ 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_unescape("10 juil. 1996 16:05:28 heure avanc\\u00E9e du Pacifique", temp, 50); 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=myDateFormat(fr, d); 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, temp)==0) 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: Date Format for french locale successful using udat_format()\n"); 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: Date Format for french locale failed using udat_format().\n" ); 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format using it */ 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(temp, "10/lug/1996 16:05:28"); 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *fmtted; 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char g[100]; 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char x[100]; 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmtted = myDateFormat(it,d); 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrcpy(g, fmtted); 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrcpy(x, temp); 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(fmtted, temp)==0) { 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: Date Format for italian locale successful uisng udat_format() - wanted %s, got %s\n", x, g); 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: Date Format for italian locale failed using udat_format() - wanted %s, got %s\n", x, g); 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing parsing using udat_parse()*/ 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting parsing using udat_parse()\n"); 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(temp,"2/3/76, 2:50 AM"); 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parsepos=0; 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d1=udat_parse(def, temp, u_strlen(temp), &parsepos, &status); 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in parsing using udat_parse(.....) %s\n", myErrorName(status) ); 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: parsing succesful\n"); 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*format it back and check for equality */ 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(myDateFormat(def, d1),temp)!=0) 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in parsing\n"); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing parsing using udat_parse()*/ 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting parsing using udat_parse()\n"); 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(temp,"2/Don't parse this part"); 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d1=udat_parse(def, temp, u_strlen(temp), NULL, &status); 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status != U_PARSE_ERROR) 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_parse(\"bad string\") passed when it should have failed\n"); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: parsing succesful\n"); 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing udat_openPattern() */ 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the udat_openPattern with a specified pattern\n"); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*for french locale */ 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fr_pat=udat_open(UDAT_PATTERN, UDAT_PATTERN,"fr_FR",NULL,0,temp, u_strlen(temp), &status); 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in creating a date format using udat_openPattern \n %s\n", 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: creating dateformat using udat_openPattern() succesful\n"); 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing applyPattern and toPattern */ 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting applyPattern and toPattern()\n"); 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(def1, FALSE, temp, u_strlen(temp)); 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Extracting the pattern\n"); 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthneeded=udat_toPattern(def1, FALSE, NULL, resultlength, &status); 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthneeded + 1; 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_toPattern(def1, FALSE, result, resultlength, &status); 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, temp)!=0) 2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in extracting the pattern\n"); 2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: applyPattern and toPattern work fine\n"); 2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing getter and setter functions*/ 2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*isLenient and setLenient()*/ 2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the isLenient and setLenient properties\n"); 2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setLenient(fr, udat_isLenient(it)); 2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(udat_isLenient(fr) != udat_isLenient(it)) 3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: setLenient() failed\n"); 3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: setLenient() successful\n"); 3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Test get2DigitYearStart set2DigitYearStart */ 3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the get and set 2DigitYearStart properties\n"); 3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org d1= udat_get2DigitYearStart(fr_pat,&status); 3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: udat_get2DigitYearStart failed %s\n", myErrorName(status) ); 3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_set2DigitYearStart(def1 ,d1, &status); 3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) { 3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(udat_get2DigitYearStart(fr_pat, &status) != udat_get2DigitYearStart(def1, &status)) 3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in set2DigitYearStart\n"); 3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: set2DigitYearStart successful\n"); 3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*try setting it to another value */ 3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_set2DigitYearStart(de, 2000.0, &status); 3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("ERROR: udat_set2DigitYearStart failed %s\n", myErrorName(status) ); 3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(udat_get2DigitYearStart(de, &status) != 2000) 3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in set2DigitYearStart\n"); 3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: set2DigitYearStart successful\n"); 3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Test getNumberFormat() and setNumberFormat() */ 3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the get and set NumberFormat properties of date format\n"); 3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numformat1=udat_getNumberFormat(fr_pat); 3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setNumberFormat(def1, numformat1); 3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numformat2=udat_getNumberFormat(def1); 3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS:setNumberFormat and getNumberFormat succesful\n"); 3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*try setting the number format to another format */ 3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numformat1=udat_getNumberFormat(def); 3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setNumberFormat(def1, numformat1); 3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org numformat2=udat_getNumberFormat(def1); 3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(myNumformat(numformat1, num), myNumformat(numformat2, num)) !=0) 3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in setNumberFormat or getNumberFormat()\n"); 3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: setNumberFormat and getNumberFormat succesful\n"); 3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Test getCalendar and setCalendar*/ 3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting the udat_getCalendar() and udat_setCalendar() properties\n"); 3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal=udat_getCalendar(fr_pat); 3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setCalendar(def1, cal); 3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!ucal_equivalentTo(udat_getCalendar(fr_pat), udat_getCalendar(def1))) 3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in setting and getting the calendar\n"); 3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: getting and setting calendar successful\n"); 3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result!=NULL) { 3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Closing the UDateForamt */ 3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(def); 3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fr); 3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(it); 3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(de); 3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(def1); 3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fr_pat); 3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(copy); 3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ctest_resetTimeZone(); 3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTest combined relative date formatting (relative date + non-relative time). 3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgThis is a bit tricky since we can't have static test data for comparison, the 3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgrelative date formatting is relative to the time the tests are run. We generate 3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgthe data for comparison dynamically. However, the tests could fail if they are 3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgrun right at midnight Pacific time and the call to ucal_getNow() is before midnight 3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgwhile the calls to udat_format are after midnight or span midnight. 3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UDate dayInterval = 24.0*60.0*60.0*1000.0; 3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar trdfZone[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; /* US/Pacific */ 3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const char trdfLocale[] = "en_US"; 3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar minutesPatn[] = { 0x006D, 0x006D, 0 }; /* "mm" */ 3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar monthLongPatn[] = { 0x004D, 0x004D, 0x004D, 0x004D, 0 }; /* "MMMM" */ 3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar monthMediumPatn[] = { 0x004D, 0x004D, 0x004D, 0 }; /* "MMM" */ 3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar monthShortPatn[] = { 0x004D, 0 }; /* "M" */ 3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UDateFormatStyle dateStylesList[] = { UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT, UDAT_NONE }; 3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar *monthPatnsList[] = { monthLongPatn, monthLongPatn, monthMediumPatn, monthShortPatn, NULL }; 3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar newTimePatn[] = { 0x0048, 0x0048, 0x002C, 0x006D, 0x006D, 0 }; /* "HH,mm" */ 3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar minutesStr[] = { 0x0034, 0x0039, 0 }; /* "49", minutes string to search for in output */ 3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { kDateOrTimeOutMax = 96, kDateAndTimeOutMax = 192 }; 4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UDate minutesTolerance = 2 * 60.0 * 1000.0; 4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UDate daysTolerance = 2 * 24.0 * 60.0 * 60.0 * 1000.0; 4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRelativeDateFormat() 4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate today = 0.0; 4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UDateFormatStyle * stylePtr; 4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar ** monthPtnPtr; 4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar * ucal = ucal_open(trdfZone, -1, trdfLocale, UCAL_GREGORIAN, &status); 4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t year, month, day; 4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setMillis(ucal, ucal_getNow(), &status); 4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org year = ucal_get(ucal, UCAL_YEAR, &status); 4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org month = ucal_get(ucal, UCAL_MONTH, &status); 4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org day = ucal_get(ucal, UCAL_DATE, &status); 4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setDateTime(ucal, year, month, day, 18, 49, 0, &status); /* set to today at 18:49:00 */ 4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org today = ucal_getMillis(ucal, &status); 4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_close(ucal); 4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) || today == 0.0 ) { 4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("Generate UDate for a specified time today fails, error %s - (Are you missing data?)\n", myErrorName(status) ); 4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (stylePtr = dateStylesList, monthPtnPtr = monthPatnsList; *stylePtr != UDAT_NONE; ++stylePtr, ++monthPtnPtr) { 4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat* fmtRelDateTime; 4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat* fmtRelDate; 4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat* fmtTime; 4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dayOffset, limit; 4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UFieldPosition fp; 4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar strDateTime[kDateAndTimeOutMax]; 4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar strDate[kDateOrTimeOutMax]; 4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar strTime[kDateOrTimeOutMax]; 4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar * strPtr; 4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t dtpatLen; 4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmtRelDateTime = udat_open(UDAT_SHORT, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("udat_open timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s (Are you missing data?)\n", *stylePtr, myErrorName(status) ); 4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmtRelDate = udat_open(UDAT_NONE, *stylePtr | UDAT_RELATIVE, trdfLocale, trdfZone, -1, NULL, 0, &status); 4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_open timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtRelDateTime); 4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmtTime = udat_open(UDAT_SHORT, UDAT_NONE, trdfLocale, trdfZone, -1, NULL, 0, &status); 4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_open timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtRelDateTime); 4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtRelDate); 4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org continue; 4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dtpatLen = udat_toPatternRelativeDate(fmtRelDateTime, strDate, kDateAndTimeOutMax, &status); 4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strDate, *monthPtnPtr) == NULL || dtpatLen != u_strlen(strDate) ) { 4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPatternRelativeDate timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) date pattern incorrect\n", *stylePtr ); 4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dtpatLen = udat_toPatternRelativeTime(fmtRelDateTime, strTime, kDateAndTimeOutMax, &status); 4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strTime, minutesPatn) == NULL || dtpatLen != u_strlen(strTime) ) { 4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPatternRelativeTime timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) time pattern incorrect\n", *stylePtr ); 4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dtpatLen = udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strDateTime, strDate) == NULL || u_strstr(strDateTime, strTime) == NULL || dtpatLen != u_strlen(strDateTime) ) { 4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) dateTime pattern incorrect\n", *stylePtr ); 4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), newTimePatn, u_strlen(newTimePatn), &status); 4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_toPattern(fmtRelDateTime, FALSE, strDateTime, kDateAndTimeOutMax, &status); 4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_toPattern timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strDateTime, newTimePatn) == NULL ) { 4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_applyPatternRelative timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) didn't update time pattern\n", *stylePtr ); 4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPatternRelative(fmtRelDateTime, strDate, u_strlen(strDate), strTime, u_strlen(strTime), &status); /* restore original */ 4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fp.field = UDAT_MINUTE_FIELD; 4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (dayOffset = -2, limit = 2; dayOffset <= limit; ++dayOffset) { 4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate dateToUse = today + (float)dayOffset*dayInterval; 4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(fmtRelDateTime, dateToUse, strDateTime, kDateAndTimeOutMax, &fp, &status); 4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t parsePos = 0; 5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate dateResult = udat_parse(fmtRelDateTime, strDateTime, -1, &parsePos, &status); 5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate dateDiff = (dateResult >= dateToUse)? dateResult - dateToUse: dateToUse - dateResult; 5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) || dateDiff > minutesTolerance ) { 5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_parse timeStyle SHORT dateStyle (%d | UDAT_RELATIVE) fails, error %s, expect approx %.1f, got %.1f, parsePos %d\n", 5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *stylePtr, myErrorName(status), dateToUse, dateResult, parsePos ); 5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(fmtRelDate, dateToUse, strDate, kDateOrTimeOutMax, NULL, &status); 5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_format timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s\n", *stylePtr, myErrorName(status) ); 5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strDateTime, strDate) == NULL ) { 5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("relative date string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parsePos = 0; 5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dateResult = udat_parse(fmtRelDate, strDate, -1, &parsePos, &status); 5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org dateDiff = (dateResult >= dateToUse)? dateResult - dateToUse: dateToUse - dateResult; 5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) || dateDiff > daysTolerance ) { 5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_parse timeStyle NONE dateStyle (%d | UDAT_RELATIVE) fails, error %s, expect approx %.1f, got %.1f, parsePos %d\n", 5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *stylePtr, myErrorName(status), dateToUse, dateResult, parsePos ); 5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(fmtTime, dateToUse, strTime, kDateOrTimeOutMax, NULL, &status); 5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("udat_format timeStyle SHORT dateStyle NONE fails, error %s\n", myErrorName(status) ); 5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if ( u_strstr(strDateTime, strTime) == NULL ) { 5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("time string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org strPtr = u_strstr(strDateTime, minutesStr); 5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( strPtr != NULL ) { 5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t beginIndex = strPtr - strDateTime; 5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( fp.beginIndex != beginIndex ) { 5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("UFieldPosition beginIndex %d, expected %d, in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", fp.beginIndex, beginIndex, *stylePtr ); 5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("minutes string not found in udat_format timeStyle SHORT dateStyle (%d | UDAT_RELATIVE)\n", *stylePtr ); 5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtRelDateTime); 5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtRelDate); 5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmtTime); 5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*Testing udat_getSymbols() and udat_setSymbols() and udat_countSymbols()*/ 5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestSymbols() 5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *def, *fr; 5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *value=NULL; 5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result = NULL; 5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength; 5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlengthout; 5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *pattern; 5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*creating a dateformat with french locale */ 5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\ncreating a date format with french locale\n"); 5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fr = udat_open(UDAT_FULL, UDAT_DEFAULT, "fr_FR", NULL, 0, NULL, 0, &status); 5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("error in creating the dateformat using full time style with french locale -> %s (Are you missing data?)\n", 5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*creating a default dateformat */ 5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\ncreating a date format with default locale\n"); 5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* this is supposed to open default date format, but later on it treats it like it is "en_US" 5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL, NULL, 0, &status); */ 5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org def = udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US", NULL, 0, NULL, 0, &status); 5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("error in creating the dateformat using short date and time style\n %s\n", 5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*Testing countSymbols, getSymbols and setSymbols*/ 5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting countSymbols\n"); 5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*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 */ 5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(udat_countSymbols(def, UDAT_ERAS)!=2 || udat_countSymbols(def, UDAT_MONTHS)!=12 || 5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_countSymbols(def, UDAT_SHORT_MONTHS)!=12 || udat_countSymbols(def, UDAT_WEEKDAYS)!=8 || 5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_countSymbols(def, UDAT_SHORT_WEEKDAYS)!=8 || udat_countSymbols(def, UDAT_AM_PMS)!=2 || 5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_countSymbols(def, UDAT_QUARTERS) != 4 || udat_countSymbols(def, UDAT_SHORT_QUARTERS) != 4 || 5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_countSymbols(def, UDAT_LOCALIZED_CHARS)!=1 || udat_countSymbols(def, UDAT_SHORTER_WEEKDAYS)!=8) 5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in udat_countSymbols\n"); 5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: udat_countSymbols() successful\n"); 6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*testing getSymbols*/ 6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting getSymbols\n"); 6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern=(UChar*)malloc(sizeof(UChar) * 10); 6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pattern, "jeudi"); 6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(fr, UDAT_WEEKDAYS, 5 , NULL, resultlength, &status); 6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(fr, UDAT_WEEKDAYS, 5, result, resultlength, &status); 6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in udat_getSymbols().... %s\n", myErrorName(status) ); 6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: getSymbols succesful\n"); 6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, pattern)==0) 6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: getSymbols retrieved the right value\n"); 6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: getSymbols retrieved the wrong value\n"); 6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*run series of tests to test getsymbols regressively*/ 6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting getSymbols() regressively\n"); 6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_WEEKDAYS, 1, "dimanche"); 6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_WEEKDAYS, 1, "Sunday"); 6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_SHORT_WEEKDAYS, 7, "sam."); 6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_SHORTER_WEEKDAYS, 7, "sa"); 6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Sat"); 6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_MONTHS, 11, "December"); 6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_MONTHS, 0, "January"); 6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_ERAS, 0, "av. J.-C."); 6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_AM_PMS, 0, "AM"); 6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_AM_PMS, 1, "PM"); 6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_SHORT_MONTHS, 0, "janv."); 6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_SHORT_MONTHS, 11, "Dec"); 6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_QUARTERS, 0, "1er trimestre"); 6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_QUARTERS, 3, "4th quarter"); 6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "T2"); 6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def, UDAT_SHORT_QUARTERS, 2, "Q3"); 6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx"); 6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfree(pattern); 6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting setSymbols\n"); 6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*applying the pattern so that setSymbolss works */ 6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_toPattern(fr, FALSE, NULL, resultlength, &status); 6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout + 1; 6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern=(UChar*)malloc(sizeof(UChar) * resultlength); 6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_toPattern(fr, FALSE, pattern, resultlength, &status); 6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(def, FALSE, pattern, u_strlen(pattern)); 6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_toPattern(def, FALSE, NULL, resultlength,&status); 6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout + 1; 6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_toPattern(fr, FALSE,result, resultlength, &status); 6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in extracting the pattern from UNumberFormat\n %s\n", 6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, pattern)==0) 6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Pattern applied properly\n"); 6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("pattern could not be applied properly\n"); 6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgfree(pattern); 7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*testing set symbols */ 7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(fr, UDAT_MONTHS, 11 , NULL, resultlength, &status); 7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(fr, UDAT_MONTHS, 11, result, resultlength, &status); 7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setSymbols(def, UDAT_MONTHS, 11, result, resultlength, &status); 7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: SetSymbols successful\n"); 7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(def, UDAT_MONTHS, 11, NULL, resultlength, &status); 7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=(UChar*)malloc(sizeof(UChar) * resultlength); 7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(def, UDAT_MONTHS, 11, value, resultlength, &status); 7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n"); 7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, value)!=0) 7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: Error in settting and getting symbols\n"); 7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: setSymbols successful\n"); 7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*run series of tests to test setSymbols regressively*/ 7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting setSymbols regressively\n"); 7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_ERAS, 0, "BeforeChrist"); 7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_ERA_NAMES, 1, "AnnoDomini"); 7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_WEEKDAYS, 1, "Sundayweek"); 7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_SHORT_WEEKDAYS, 7, "Satweek"); 7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_NARROW_WEEKDAYS, 4, "M"); 7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_STANDALONE_WEEKDAYS, 1, "Sonntagweek"); 7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_STANDALONE_SHORT_WEEKDAYS, 7, "Sams"); 7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(def, UDAT_STANDALONE_NARROW_WEEKDAYS, 4, "V"); 7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_MONTHS, 11, "december"); 7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_SHORT_MONTHS, 0, "Jan"); 7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_NARROW_MONTHS, 1, "R"); 7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_STANDALONE_MONTHS, 11, "dezember"); 7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_MONTHS, 7, "Aug"); 7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_STANDALONE_NARROW_MONTHS, 2, "M"); 7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_QUARTERS, 0, "1. Quart"); 7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "QQ2"); 7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_STANDALONE_QUARTERS, 2, "3rd Quar."); 7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifysetSymbols(fr, UDAT_STANDALONE_SHORT_QUARTERS, 3, "4QQ"); 7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*run series of tests to test get and setSymbols regressively*/ 7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("\nTesting get and set symbols regressively\n"); 7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 1); 7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_WEEKDAYS, 7); 7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 1); 7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_SHORT_WEEKDAYS, 7); 7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_MONTHS, 0); 7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_SHORT_MONTHS, 0); 7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_ERAS,1); 7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_LOCALIZED_CHARS, 0); 7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org VerifygetsetSymbols(fr, def, UDAT_AM_PMS, 1); 7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*closing*/ 7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fr); 7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(def); 7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(result != NULL) { 7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = NULL; 7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(value); 7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test DateFormat(Calendar) API 7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestDateFormatCalendar() { 7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *date=0, *time=0, *full=0; 7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar *cal=0; 7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[256]; 7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char cbuf[256]; 7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t pos; 8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate when; 8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec = U_ZERO_ERROR; 8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ctest_setTimeZone(NULL, &ec); 8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Create a formatter for date fields. */ 8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org date = udat_open(UDAT_NONE, UDAT_SHORT, "en_US", NULL, 0, NULL, 0, &ec); 8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: udat_open(NONE, SHORT, en_US) failed with %s (Are you missing data?)\n", 8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(ec)); 8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Create a formatter for time fields. */ 8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org time = udat_open(UDAT_SHORT, UDAT_NONE, "en_US", NULL, 0, NULL, 0, &ec); 8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_open(SHORT, NONE, en_US) failed with %s\n", 8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(ec)); 8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Create a full format for output */ 8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org full = udat_open(UDAT_FULL, UDAT_FULL, "en_US", NULL, 0, NULL, 0, &ec); 8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_open(FULL, FULL, en_US) failed with %s\n", 8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(ec)); 8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Create a calendar */ 8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cal = ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &ec); 8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: ucal_open(en_US) failed with %s\n", 8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_errorName(ec)); 8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Parse the date */ 8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_clear(cal); 8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buf, "4/5/2001"); 8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = 0; 8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_parseCalendar(date, cal, buf, -1, &pos, &ec); 8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_parseCalendar(4/5/2001) failed at %d with %s\n", 8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos, u_errorName(ec)); 8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Parse the time */ 8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(buf, "5:45 PM"); 8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos = 0; 8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_parseCalendar(time, cal, buf, -1, &pos, &ec); 8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_parseCalendar(17:45) failed at %d with %s\n", 8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pos, u_errorName(ec)); 8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Check result */ 8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org when = ucal_getMillis(cal, &ec); 8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: ucal_getMillis() failed with %s\n", u_errorName(ec)); 8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_format(full, when, buf, sizeof(buf), NULL, &ec); 8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_format() failed with %s\n", u_errorName(ec)); 8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrcpy(cbuf, buf); 8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Thursday, April 5, 2001 5:45:00 PM PDT 986517900000 */ 8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (when == 986517900000.0) { 8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Ok: Parsed result: %s\n", cbuf); 8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Parsed result: %s, exp 4/5/2001 5:45 PM\n", cbuf); 8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FAIL: 8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(date); 8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(time); 8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(full); 8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_close(cal); 8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ctest_resetTimeZone(); 8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test parsing two digit year against "YY" vs. "YYYY" patterns 8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestCalendarDateParse() { 8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t result; 8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec = U_ZERO_ERROR; 8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat* simpleDateFormat = 0; 8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t parsePos = 0; 8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t twoDigitCenturyStart = 75; 8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t currentTwoDigitYear = 0; 8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t startCentury = 0; 9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar* tempCal = 0; 9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar* calendar = 0; 9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(pattern, "yyyy", 4); 9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(pattern2, "yy", 2); 9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_DECL(text, "75", 2); 9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(pattern, "yyyy", 4); 9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(pattern2, "yy", 2); 9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_STRING_INIT(text, "75", 2); 9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org simpleDateFormat = udat_open(UDAT_FULL, UDAT_FULL, "en-GB", 0, 0, 0, 0, &ec); 9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("udat_open(UDAT_FULL, UDAT_FULL, \"en-GB\", 0, 0, 0, 0, &ec) failed: %s - (Are you missing data?)\n", u_errorName(ec)); 9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(simpleDateFormat, 0, pattern, u_strlen(pattern)); 9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setLenient(simpleDateFormat, 0); 9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currentTwoDigitYear = getCurrentYear() % 100; 9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org startCentury = getCurrentYear() - currentTwoDigitYear; 9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (twoDigitCenturyStart > currentTwoDigitYear) { 9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org startCentury -= 100; 9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org tempCal = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &ec); 9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setMillis(tempCal, 0, &ec); 9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setDateTime(tempCal, startCentury + twoDigitCenturyStart, UCAL_JANUARY, 1, 0, 0, 0, &ec); 9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_set2DigitYearStart(simpleDateFormat, ucal_getMillis(tempCal, &ec), &ec); 9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org calendar = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &ec); 9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setMillis(calendar, 0, &ec); 9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_setDateTime(calendar, twoDigitCenturyStart, UCAL_JANUARY, 1, 0, 0, 0, &ec); 9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_parseCalendar(simpleDateFormat, calendar, text, u_strlen(text), &parsePos, &ec); 9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Check result */ 9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = ucal_get(calendar, UCAL_YEAR, &ec); 9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: ucal_get(UCAL_YEAR) failed with %s\n", u_errorName(ec)); 9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result != 75) { 9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: parsed incorrect year: %d\n", result); 9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org parsePos = 0; 9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(simpleDateFormat, 0, pattern2, u_strlen(pattern2)); 9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_parseCalendar(simpleDateFormat, calendar, text, u_strlen(text), &parsePos, &ec); 9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Check result */ 9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result = ucal_get(calendar, UCAL_YEAR, &ec); 9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: ucal_get(UCAL_YEAR) failed with %s\n", u_errorName(ec)); 9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (result != 1975) { 9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: parsed incorrect year: %d\n", result); 9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org goto FAIL; 9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FAIL: 9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(simpleDateFormat); 9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(tempCal); 9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(calendar); 9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*INTERNAL FUNCTIONS USED*/ 9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic int getCurrentYear() { 9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static int currentYear = 0; 9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (currentYear == 0) { 9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UCalendar *cal = ucal_open(NULL, -1, NULL, UCAL_GREGORIAN, &status); 9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!U_FAILURE(status)) { 9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Get the current year from the default UCalendar */ 9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org currentYear = ucal_get(cal, UCAL_YEAR, &status); 9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ucal_close(cal); 9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return currentYear; 9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* N.B.: use idx instead of index to avoid 'shadow' warnings in strict mode. */ 9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void VerifygetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *pattern=NULL; 9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result=NULL; 9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength, resultlengthout; 9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org pattern=(UChar*)malloc(sizeof(UChar) * (strlen(expected)+1)); 9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(pattern, expected); 9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(datfor, type, idx , NULL, resultlength, &status); 9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(datfor, type, idx, result, resultlength, &status); 10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in udat_getSymbols()... %s\n", myErrorName(status) ); 10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, pattern)==0) 10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: getSymbols retrieved the right value\n"); 10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else{ 10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: getSymbols retrieved the wrong value\n Expected %s Got %s\n", austrdup(pattern), 10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org austrdup(result) ); 10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(pattern); 10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void VerifysetSymbols(UDateFormat* datfor, UDateFormatSymbolType type, int32_t idx, const char* expected) 10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result=NULL; 10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *value=NULL; 10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength, resultlengthout; 10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=(UChar*)malloc(sizeof(UChar) * (strlen(expected) + 1)); 10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_uastrcpy(value, expected); 10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setSymbols(datfor, type, idx, value, u_strlen(value), &status); 10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in udat_setSymbols() %s\n", myErrorName(status) ); 10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(datfor, type, idx, NULL, resultlength, &status); 10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(datfor, type, idx, result, resultlength, &status); 10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in retrieving the value using getSymbols after setting it previously\n %s\n", 10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, value)!=0){ 10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(value), 10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org austrdup(result) ); 10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: setSymbols successful\n"); 10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(value); 10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void VerifygetsetSymbols(UDateFormat* from, UDateFormat* to, UDateFormatSymbolType type, int32_t idx) 10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result=NULL; 10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *value=NULL; 10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength, resultlengthout; 10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(from, type, idx , NULL, resultlength, &status); 10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result=(UChar*)malloc(sizeof(UChar) * resultlength); 10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(from, type, idx, result, resultlength, &status); 10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in getSymbols() %s\n", myErrorName(status) ); 10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setSymbols(to, type, idx, result, resultlength, &status); 10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in udat_setSymbols() : %s\n", myErrorName(status) ); 10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthout=udat_getSymbols(to, type, idx, NULL, resultlength, &status); 10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR){ 10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthout+1; 10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org value=(UChar*)malloc(sizeof(UChar) * resultlength); 10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(to, type, idx, value, resultlength, &status); 10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)){ 11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: error in retrieving the value using getSymbols i.e roundtrip\n %s\n", 11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org myErrorName(status) ); 11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(u_strcmp(result, value)!=0){ 11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL:Error in setting and then getting symbols\n Expected %s Got %s\n", austrdup(result), 11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org austrdup(value) ); 11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org else 11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("PASS: setSymbols successful\n"); 11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(value); 11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org free(result); 11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UChar* myNumformat(const UNumberFormat* numfor, double d) 11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar *result2=NULL; 11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t resultlength, resultlengthneeded; 11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=0; 11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlengthneeded=unum_formatDouble(numfor, d, NULL, resultlength, NULL, &status); 11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(status==U_BUFFER_OVERFLOW_ERROR) 11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status=U_ZERO_ERROR; 11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org resultlength=resultlengthneeded+1; 11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*result2=(UChar*)malloc(sizeof(UChar) * resultlength);*/ /* this leaks */ 11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org result2=(UChar*)ctst_malloc(sizeof(UChar) * resultlength); /*this won't*/ 11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org unum_formatDouble(numfor, d, result2, resultlength, NULL, &status); 11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(status)) 11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: Error in formatting using unum_format(.....) %s\n", myErrorName(status) ); 11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 0; 11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return result2; 11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The search depth for TestExtremeDates. The total number of 11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * dates that will be tested is (2^EXTREME_DATES_DEPTH) - 1. 11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define EXTREME_DATES_DEPTH 8 11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Support for TestExtremeDates (below). 11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Test a single date to see whether udat_format handles it properly. 11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool _aux1ExtremeDates(UDateFormat* fmt, UDate date, 11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* buf, int32_t buflen, char* cbuf, 11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode* ec) { 11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = udat_format(fmt, date, buf, buflen, 0, ec); 11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (!assertSuccess("udat_format", ec)) return FALSE; 11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrncpy(cbuf, buf, buflen); 11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (len < 4) { 11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_format(%g) => \"%s\"\n", date, cbuf); 11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("udat_format(%g) => \"%s\"\n", date, cbuf); 11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Support for TestExtremeDates (below). 11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Recursively test between 'small' and 'large', up to the depth 11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * limit specified by EXTREME_DATES_DEPTH. 11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool _aux2ExtremeDates(UDateFormat* fmt, UDate small, UDate large, 11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar* buf, int32_t buflen, char* cbuf, 11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t count, 11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode* ec) { 11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Logarithmic midpoint; see below */ 11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDate mid = (UDate) exp((log(small) + log(large)) / 2); 11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (count == EXTREME_DATES_DEPTH) { 11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return TRUE; 11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _aux1ExtremeDates(fmt, mid, buf, buflen, cbuf, ec) && 11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _aux2ExtremeDates(fmt, small, mid, buf, buflen, cbuf, count+1, ec) && 11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _aux2ExtremeDates(fmt, mid, large, buf, buflen, cbuf, count+1, ec); 11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * http://www.jtcsv.com/cgibin/icu-bugs?findid=3659 11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For certain large dates, udat_format crashes on MacOS. This test 11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * attempts to reproduce this problem by doing a recursive logarithmic* 11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * binary search of a predefined interval (from 'small' to 'large'). 11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The limit of the search is given by EXTREME_DATES_DEPTH, above. 11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * *The search has to be logarithmic, not linear. A linear search of the 11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * range 0..10^30, for example, will find 0.5*10^30, then 0.25*10^30 and 12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 0.75*10^30, etc. A logarithmic search will find 10^15, then 10^7.5 12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and 10^22.5, etc. 12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestExtremeDates() { 12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *fmt; 12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode ec; 12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar buf[256]; 12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char cbuf[256]; 12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const double small = 1000; /* 1 sec */ 12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const double large = 1e+30; /* well beyond usable UDate range */ 12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* There is no need to test larger values from 1e+30 to 1e+300; 12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org the failures occur around 1e+27, and never above 1e+30. */ 12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ec = U_ZERO_ERROR; 12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fmt = udat_open(UDAT_LONG, UDAT_LONG, "en_US", 12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 0, 0, 0, 0, &ec); 12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(ec)) { 12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: udat_open (%s) (Are you missing data?)\n", u_errorName(ec)); 12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return; 12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org _aux2ExtremeDates(fmt, small, large, buf, LEN(buf), cbuf, 0, &ec); 12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(fmt); 12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestAllLocales(void) { 12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t idx, dateIdx, timeIdx, localeCount; 12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UDateFormatStyle style[] = { 12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDAT_FULL, UDAT_LONG, UDAT_MEDIUM, UDAT_SHORT 12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org }; 12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org localeCount = uloc_countAvailable(); 12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (idx = 0; idx < localeCount; idx++) { 12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (dateIdx = 0; dateIdx < (int32_t)(sizeof(style)/sizeof(style[0])); dateIdx++) { 12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (timeIdx = 0; timeIdx < (int32_t)(sizeof(style)/sizeof(style[0])); timeIdx++) { 12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(udat_open(style[dateIdx], style[timeIdx], 12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uloc_getAvailable(idx), NULL, 0, NULL, 0, &status)); 12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if (U_FAILURE(status)) { 12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_open(%s) failed with (%s) dateIdx=%d, timeIdx=%d\n", 12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uloc_getAvailable(idx), u_errorName(status), dateIdx, timeIdx); 12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestRelativeCrash(void) { 12496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UChar tzName[] = { 0x0055, 0x0053, 0x002F, 0x0050, 0x0061, 0x0063, 0x0069, 0x0066, 0x0069, 0x0063, 0 }; 12506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org static const UDate aDate = -631152000000.0; 12516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 12536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode expectStatus = U_ILLEGAL_ARGUMENT_ERROR; 12546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat icudf; 12556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 12566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org icudf = udat_open(UDAT_NONE, UDAT_SHORT_RELATIVE, "en", tzName, -1, NULL, 0, &status); 12576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_SUCCESS(status) ) { 12586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *what = "???"; 12596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 12616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_set2DigitYearStart"; 12626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 12636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_set2DigitYearStart(icudf, aDate, &subStatus); 12646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 12656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 12666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 12676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 12686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* clone works polymorphically. try it anyways */ 12726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 12736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat *oth; 12746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "clone"; 12756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 12766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org oth = udat_clone(icudf, &subStatus); 12776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == U_ZERO_ERROR) { 12786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 12796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(oth); /* ? */ 12806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 12816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 12826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 12866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_get2DigitYearStart"; 12876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 12886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_get2DigitYearStart(icudf, &subStatus); 12896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 12906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 12916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 12926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 12936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 12956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 12966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* Now udat_toPattern works for relative date formatters, unless localized is TRUE */ 12976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 12986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_toPattern"; 12996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 13006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_toPattern(icudf, TRUE,NULL,0, &subStatus); 13016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 13026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 13036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 13056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 13096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_applyPattern"; 13106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 13116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(icudf, FALSE,tzName,-1); 13126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* what it should be, if this took an errorcode. */ 13136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 13146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 13156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 13176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar erabuf[32]; 13216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 13226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_getSymbols"; 13236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 13246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_getSymbols(icudf, UDAT_ERAS,0,erabuf,sizeof(erabuf)/sizeof(erabuf[0]), &subStatus); 13256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == U_ZERO_ERROR) { 13266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: %s returned %s.\n", what, u_errorName(subStatus)); 13276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got %s instead of U_ZERO_ERROR.\n", what, u_errorName(subStatus)); 13296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 13336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar symbolValue = 0x0041; 13346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_setSymbols"; 13356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 13366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setSymbols(icudf, UDAT_ERAS,0,&symbolValue,1, &subStatus); /* bogus values */ 13376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 13386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 13396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 13416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { 13446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode subStatus = U_ZERO_ERROR; 13456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org what = "udat_countSymbols"; 13466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Trying %s on a relative date..\n", what); 13476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_countSymbols(icudf, UDAT_ERAS); 13486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org subStatus = U_ILLEGAL_ARGUMENT_ERROR; /* should have an errorcode. */ 13496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(subStatus == expectStatus) { 13506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_verbose("Success: did not crash on %s, but got %s.\n", what, u_errorName(subStatus)); 13516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: didn't crash on %s, but got success %s instead of %s. \n", what, u_errorName(subStatus), u_errorName(expectStatus)); 13536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(icudf); 13576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 13586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: err calling udat_open() ->%s (Are you missing data?)\n", u_errorName(status)); 13596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 13606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 13616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar skeleton_yMMMM[] = { 0x79,0x4D,0x4D,0x4D,0x4D,0 }; /* "yMMMM"; fr maps to "MMMM y", cs maps to "LLLL y" */ 13636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar july2008_frDefault[] = { 0x6A,0x75,0x69,0x6C,0x6C,0x65,0x74,0x20,0x32,0x30,0x30,0x38,0 }; /* "juillet 2008" */ 13646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar july2008_frTitle[] = { 0x4A,0x75,0x69,0x6C,0x6C,0x65,0x74,0x20,0x32,0x30,0x30,0x38,0 }; /* "Juillet 2008" sentence-begin, standalone */ 13656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UChar july2008_csDefault[] = { 0x10D,0x65,0x72,0x76,0x65,0x6E,0x65,0x63,0x20,0x32,0x30,0x30,0x38,0 }; /* "c(hacek)ervenec 2008" */ 13666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic 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 */ 13676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct { 13696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char * locale; 13706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar * skeleton; 13716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDisplayContext capitalizationContext; 13726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const UChar * expectedFormat; 13736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} TestContextItem; 13746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const TestContextItem textContextItems[] = { 13766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_NONE, july2008_frDefault }, 13776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 13786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, july2008_frDefault }, 13796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, july2008_frTitle }, 13806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, july2008_frDefault }, 13816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "fr", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, july2008_frTitle }, 13826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 13836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_NONE, july2008_csDefault }, 13846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_BREAK_ITERATION 13856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, july2008_csDefault }, 13866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, july2008_csTitle }, 13876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU, july2008_csTitle }, 13886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { "cs", skeleton_yMMMM, UDISPCTX_CAPITALIZATION_FOR_STANDALONE, july2008_csDefault }, 13896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 13906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org { NULL, NULL, (UDisplayContext)0, NULL } 13916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 13926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic const UDate july022008 = 1215000001979.0; 13946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum { kUbufMax = 64, kBbufMax = 3*kUbufMax }; 13956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 13966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void TestContext(void) { 13976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const TestContextItem* textContextItemPtr = textContextItems; 13986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for (; textContextItemPtr->locale != NULL; ++textContextItemPtr) { 13996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode status = U_ZERO_ERROR; 14006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateFormat* udfmt = udat_open(UDAT_NONE, UDAT_MEDIUM, textContextItemPtr->locale, NULL, 0, NULL, 0, &status); 14016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_data_err("FAIL: udat_open for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 14036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 14046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDateTimePatternGenerator* udtpg = udatpg_open(textContextItemPtr->locale, &status); 14056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udatpg_open for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 14076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 14086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UChar ubuf[kUbufMax]; 14096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t len = udatpg_getBestPattern(udtpg, textContextItemPtr->skeleton, -1, ubuf, kUbufMax, &status); 14106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udatpg_getBestPattern for locale %s, status %s\n", textContextItemPtr->locale, u_errorName(status) ); 14126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 14136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_applyPattern(udfmt, FALSE, ubuf, len); 14146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_setContext(udfmt, textContextItemPtr->capitalizationContext, &status); 14156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_setContext for locale %s, capitalizationContext %d, status %s\n", 14176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 14186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 14196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UDisplayContext getContext; 14206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org len = udat_format(udfmt, july022008, ubuf, kUbufMax, NULL, &status); 14216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_format for locale %s, capitalizationContext %d, status %s\n", 14236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 14246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org status = U_ZERO_ERROR; 14256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (u_strncmp(ubuf, textContextItemPtr->expectedFormat, kUbufMax) != 0) { 14266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char bbuf1[kBbufMax]; 14276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org char bbuf2[kBbufMax]; 14286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_format for locale %s, capitalizationContext %d, expected %s, got %s\n", 14296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, 14306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_austrncpy(bbuf1,textContextItemPtr->expectedFormat,kUbufMax), u_austrncpy(bbuf2,ubuf,kUbufMax) ); 14316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org getContext = udat_getContext(udfmt, UDISPCTX_TYPE_CAPITALIZATION, &status); 14336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if ( U_FAILURE(status) ) { 14346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_getContext for locale %s, capitalizationContext %d, status %s\n", 14356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, u_errorName(status) ); 14366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if (getContext != textContextItemPtr->capitalizationContext) { 14376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org log_err("FAIL: udat_getContext for locale %s, capitalizationContext %d, got context %d\n", 14386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org textContextItemPtr->locale, (int)textContextItemPtr->capitalizationContext, (int)getContext ); 14396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udatpg_close(udtpg); 14436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udat_close(udfmt); 14456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 14476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 14486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 14496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1450