1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Copyright (c) 1997-2014, International Business Machines 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Corporation and others. All Rights Reserved. 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * File CCALTST.C 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modification History: 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Name Description 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Madhu Katragadda Creation 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ******************************************************************** 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* C API AND FUNCTIONALITY TEST FOR CALENDAR (ucol.h)*/ 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdlib.h> 21b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include <string.h> 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ucal.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udat.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cintltst.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ccaltst.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cformtst.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cstring.h" 31b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "ulist.h" 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestGregorianChange(void); 34b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid TestFieldDifference(void); 3554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid TestAddRollEra0AndEraBounds(void); 3654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid TestGetTZTransition(void); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 3859d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid TestGetWindowsTimeZoneID(void); 3959d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid TestGetTimeZoneIDByWindowsID(void); 4059d709d503bab6e2b61931737e662dd293b40578ccornelius 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCalTest(TestNode** root); 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid addCalTest(TestNode** root) 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestCalendar, "tsformat/ccaltst/TestCalendar"); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetSetDateAPI, "tsformat/ccaltst/TestGetSetDateAPI"); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestFieldGetSet, "tsformat/ccaltst/TestFieldGetSet"); 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestAddRollExtensive, "tsformat/ccaltst/TestAddRollExtensive"); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGetLimits, "tsformat/ccaltst/TestGetLimits"); 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestDOWProgression, "tsformat/ccaltst/TestDOWProgression"); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGMTvsLocal, "tsformat/ccaltst/TestGMTvsLocal"); 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru addTest(root, &TestGregorianChange, "tsformat/ccaltst/TestGregorianChange"); 54b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru addTest(root, &TestGetKeywordValuesForLocale, "tsformat/ccaltst/TestGetKeywordValuesForLocale"); 5550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho addTest(root, &TestWeekend, "tsformat/ccaltst/TestWeekend"); 56b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho addTest(root, &TestFieldDifference, "tsformat/ccaltst/TestFieldDifference"); 57103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius addTest(root, &TestAmbiguousWallTime, "tsformat/ccaltst/TestAmbiguousWallTime"); 5854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius addTest(root, &TestAddRollEra0AndEraBounds, "tsformat/ccaltst/TestAddRollEra0AndEraBounds"); 5954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius addTest(root, &TestGetTZTransition, "tsformat/ccaltst/TestGetTZTransition"); 6059d709d503bab6e2b61931737e662dd293b40578ccornelius addTest(root, &TestGetWindowsTimeZoneID, "tsformat/ccaltst/TestGetWindowsTimeZoneID"); 6159d709d503bab6e2b61931737e662dd293b40578ccornelius addTest(root, &TestGetTimeZoneIDByWindowsID, "tsformat/ccaltst/TestGetTimeZoneIDByWindowsID"); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* "GMT" */ 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar fgGMTID [] = { 0x0047, 0x004d, 0x0054, 0x0000 }; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* "PST" */ 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar PST[] = {0x50, 0x53, 0x54, 0x00}; /* "PST" */ 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic const UChar EUROPE_PARIS[] = {0x45, 0x75, 0x72, 0x6F, 0x70, 0x65, 0x2F, 0x50, 0x61, 0x72, 0x69, 0x73, 0x00}; /* "Europe/Paris" */ 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 72c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Querustatic const UChar AMERICA_LOS_ANGELES[] = {0x41, 0x6D, 0x65, 0x72, 0x69, 0x63, 0x61, 0x2F, 73c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 0x4C, 0x6F, 0x73, 0x5F, 0x41, 0x6E, 0x67, 0x65, 0x6C, 0x65, 0x73, 0x00}; /* America/Los_Angeles */ 74c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querutypedef struct { 76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char * locale; 77b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UCalendarType calType; 78b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char * expectedResult; 79b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} UCalGetTypeTest; 80b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 81b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic const UCalGetTypeTest ucalGetTypeTests[] = { 82b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { "en_US", UCAL_GREGORIAN, "gregorian" }, 83b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { "ja_JP@calendar=japanese", UCAL_DEFAULT, "japanese" }, 84b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { "th_TH", UCAL_GREGORIAN, "gregorian" }, 851c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "th_TH", UCAL_DEFAULT, "gregorian" }, // android-changed 861c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert // { "th_TH", UCAL_DEFAULT, "buddhist" }, 8727f654740f2a26ad62a5c155af9199af9e69b889claireho { "th-TH-u-ca-gregory", UCAL_DEFAULT, "gregorian" }, 8850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "ja_JP@calendar=japanese", UCAL_GREGORIAN, "gregorian" }, 8950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "", UCAL_GREGORIAN, "gregorian" }, 9050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { NULL, UCAL_GREGORIAN, "gregorian" }, 91b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru { NULL, 0, NULL } /* terminator */ 92b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru}; 93b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestCalendar() 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 96c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UCalendar *caldef = 0, *caldef2 = 0, *calfr = 0, *calit = 0, *calfrclone = 0; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UEnumeration* uenum = NULL; 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count, count2, i,j; 99c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *tzdname = 0; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate now; 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *datdef = 0; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar *result = 0; 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t resultlength, resultlengthneeded; 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempMsgBuf[256]; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar zone1[32], zone2[32]; 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *tzver = 0; 109c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar canonicalID[64]; 110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UBool isSystemID = FALSE; 111b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UCalGetTypeTest * ucalGetTypeTestPtr; 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifdef U_USE_UCAL_OBSOLETE_2_8 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing countAvailableTimeZones*/ 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset=0; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting ucal_countAvailableTZIDs\n"); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_countAvailableTZIDs(offset); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("The number of timezone id's present with offset 0 are %d:\n", count); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count < 5) /* Don't hard code an exact == test here! */ 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in the ucal_countAvailableTZIDs - got %d expected at least 5 total\n", count); 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing getAvailableTZIDs*/ 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting ucal_getAvailableTZIDs"); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<count;i++){ 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getAvailableTZIDs(offset, i, &status); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getAvailableTZIDs returned %s\n", u_errorName(status)); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", u_austrcpy(tempMsgBuf, ucal_getAvailableTZIDs(offset, i, &status))); 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*get Illegal TZID where index >= count*/ 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getAvailableTZIDs(offset, i, &status); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status != U_INDEX_OUTOFBOUNDS_ERROR){ 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL:for TZID index >= count Expected INDEX_OUTOFBOUNDS_ERROR Got %s\n", u_errorName(status)); 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho /*Test ucal_openTimeZones, ucal_openCountryTimeZones and ucal_openTimeZoneIDEnumeration */ 140b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (j=0; j<6; ++j) { 141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char *api = "?"; 142b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const int32_t offsetMinus5 = -5*60*60*1000; 143b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho switch (j) { 144b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 0: 145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openTimeZones()"; 146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openTimeZones(&status); 147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 1: 149b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openCountryTimeZones(US)"; 150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openCountryTimeZones("US", &status); 151b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 152b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 2: 153b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openTimeZoneIDEnumerarion(UCAL_ZONE_TYPE_CANONICAL, NULL, NULL)"; 154b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, &status); 155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 3: 157b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openTimeZoneIDEnumerarion(UCAL_ZONE_TYPE_CANONICAL_LOCATION, CA, NULL)"; 158b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL_LOCATION, "CA", NULL, &status); 159b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 4: 161b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openTimeZoneIDEnumerarion(UCAL_ZONE_TYPE_ANY, NULL, -5 hour)"; 162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, NULL, &offsetMinus5, &status); 163b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 164b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho case 5: 165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho api = "ucal_openTimeZoneIDEnumerarion(UCAL_ZONE_TYPE_ANY, US, -5 hour)"; 166b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho uenum = ucal_openTimeZoneIDEnumeration(UCAL_ZONE_TYPE_ANY, "US", &offsetMinus5, &status); 167b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho break; 168b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err_status(status, "FAIL: %s failed with %s\n", api, 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* id; 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t len; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count = uenum_count(uenum, &status); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s returned %d timezone id's:\n", api, count); 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (count < 5) { /* Don't hard code an exact == test here! */ 1786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: in %s, got %d, expected at least 5 -> %s (Are you missing data?)\n", api, count, u_errorName(status)); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_reset(uenum, &status); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uenum_reset for %s returned %s\n", 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru api, u_errorName(status)); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=0; i<count; i++) { 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru id = uenum_next(uenum, &len, &status); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uenum_next for %s returned %s\n", 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru api, u_errorName(status)); 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", id); 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Next one should be NULL */ 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru id = uenum_next(uenum, &len, &status); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (id != NULL) { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: uenum_next for %s returned %s, expected NULL\n", 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru api, id); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uenum_close(uenum); 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test ucal_getDSTSavings*/ 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = ucal_getDSTSavings(fgGMTID, &status); 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getDSTSavings(GMT) => %s\n", 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (i != 0) { 2116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: ucal_getDSTSavings(GMT) => %d, expect 0 (Are you missing data?)\n", i); 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = ucal_getDSTSavings(PST, &status); 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getDSTSavings(PST) => %s\n", 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (i != 1*60*60*1000) { 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getDSTSavings(PST) => %d, expect %d\n", i, 1*60*60*1000); 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test ucal_set/getDefaultTimeZone*/ 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = ucal_getDefaultTimeZone(zone1, sizeof(zone1)/sizeof(zone1[0]), &status); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getDefaultTimeZone() => %s\n", 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDefaultTimeZone(EUROPE_PARIS, &status); 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_setDefaultTimeZone(Europe/Paris) => %s\n", 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru i = ucal_getDefaultTimeZone(zone2, sizeof(zone2)/sizeof(zone2[0]), &status); 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getDefaultTimeZone() => %s\n", 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (u_strcmp(zone2, EUROPE_PARIS) != 0) { 2396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: ucal_getDefaultTimeZone() did not return Europe/Paris (Are you missing data?)\n"); 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDefaultTimeZone(zone1, &status); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Test ucal_getTZDataVersion*/ 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzver = ucal_getTZDataVersion(&status); 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 2516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "FAIL: ucal_getTZDataVersion() => %s\n", u_errorName(status)); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (uprv_strlen(tzver) != 5 /*4 digits + 1 letter*/) { 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Bad version string was returned by ucal_getTZDataVersion\n"); 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: ucal_getTZDataVersion returned %s\n", tzver); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 258c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /*Testing ucal_getCanonicalTimeZoneID*/ 259c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 260c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru resultlength = ucal_getCanonicalTimeZoneID(PST, -1, 261c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru canonicalID, sizeof(canonicalID)/sizeof(UChar), &isSystemID, &status); 262c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (U_FAILURE(status)) { 263fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius log_data_err("FAIL: error in ucal_getCanonicalTimeZoneID : %s\n", u_errorName(status)); 264c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 265c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (u_strcmp(AMERICA_LOS_ANGELES, canonicalID) != 0) { 2666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: ucal_getCanonicalTimeZoneID(%s) returned %s : expected - %s (Are you missing data?)\n", 267c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru PST, canonicalID, AMERICA_LOS_ANGELES); 268c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 269c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (!isSystemID) { 2706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: ucal_getCanonicalTimeZoneID(%s) set %d to isSystemID (Are you missing data?)\n", 271c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru PST, isSystemID); 272c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 273c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing the ucal_open() function*/ 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_open()\n"); 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caldef=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 28150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: error in ucal_open caldef : %s\n - (Are you missing data?)", u_errorName(status)); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caldef2=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 28650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: error in ucal_open caldef : %s - (Are you missing data?)\n", u_errorName(status)); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calfr=ucal_open(tzID, u_strlen(tzID), "fr_FR", UCAL_TRADITIONAL, &status); 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 29150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: error in ucal_open calfr : %s - (Are you missing data?)\n", u_errorName(status)); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru calit=ucal_open(tzID, u_strlen(tzID), "it_IT", UCAL_TRADITIONAL, &status); 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 29550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: error in ucal_open calit : %s - (Are you missing data?)\n", u_errorName(status)); 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 297c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 298c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /*Testing the clone() function*/ 299c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru calfrclone = ucal_clone(calfr, &status); 300c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if(U_FAILURE(status)){ 30150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: error in ucal_clone calfr : %s - (Are you missing data?)\n", u_errorName(status)); 302c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing udat_getAvailable() and udat_countAvailable()*/ 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting getAvailableLocales and countAvailable()\n"); 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_countAvailable(); 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* use something sensible w/o hardcoding the count */ 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count > 0) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: ucal_countAvailable() works fine\n"); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("The no: of locales for which calendars are avilable are %d\n", count); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_data_err("FAIL: Error in countAvailable()\n"); 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(i=0;i<count;i++) { 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", ucal_getAvailable(i)); 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing the equality between calendar's*/ 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting ucal_equivalentTo()\n"); 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(caldef && caldef2 && calfr && calit) { 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ucal_equivalentTo(caldef, caldef2) == FALSE || ucal_equivalentTo(caldef, calfr)== TRUE || 324c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_equivalentTo(caldef, calit)== TRUE || ucal_equivalentTo(calfr, calfrclone) == FALSE) { 3256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: Error. equivalentTo test failed (Are you missing data?)\n"); 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: equivalentTo test passed\n"); 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing the current time and date using ucal_getnow()*/ 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_getNow function to check if it is fetching tbe current time\n"); 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru now=ucal_getNow(); 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* open the date format and format the date to check the output */ 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru datdef=udat_open(UDAT_FULL,UDAT_FULL ,NULL, NULL, 0,NULL,0,&status); 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 3386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("FAIL: error in creating the dateformat : %s (Are you missing data?)\n", u_errorName(status)); 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: The current date and time fetched is %s\n", u_austrcpy(tempMsgBuf, myDateFormat(datdef, now)) ); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing the TimeZoneDisplayName */ 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the fetching of time zone display name\n"); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*for the US locale */ 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=0; 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlengthneeded=ucal_getTimeZoneDisplayName(caldef, UCAL_DST, "en_US", NULL, resultlength, &status); 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_BUFFER_OVERFLOW_ERROR) 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru resultlength=resultlengthneeded+1; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru result=(UChar*)malloc(sizeof(UChar) * resultlength); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getTimeZoneDisplayName(caldef, UCAL_DST, "en_US", result, resultlength, &status); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in getting the timezone display name : %s\n", u_errorName(status)); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: getting the time zone display name successful : %s, %d needed \n", 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status), resultlengthneeded); 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define expectPDT "Pacific Daylight Time" 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru tzdname=(UChar*)malloc(sizeof(UChar) * (sizeof(expectPDT)+1)); 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzdname, expectPDT); 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(tzdname, result)==0){ 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: got the correct time zone display name %s\n", u_austrcpy(tempMsgBuf, result) ); 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: got the wrong time zone(DST) display name %s, wanted %s\n", austrdup(result) , expectPDT); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getTimeZoneDisplayName(caldef, UCAL_SHORT_DST, "en_US", result, resultlength, &status); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzdname, "PDT"); 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(tzdname, result) != 0){ 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: got the wrong time zone(SHORT_DST) display name %s, wanted %s\n", austrdup(result), austrdup(tzdname)); 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getTimeZoneDisplayName(caldef, UCAL_STANDARD, "en_US", result, resultlength, &status); 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzdname, "Pacific Standard Time"); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(tzdname, result) != 0){ 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: got the wrong time zone(STANDARD) display name %s, wanted %s\n", austrdup(result), austrdup(tzdname)); 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getTimeZoneDisplayName(caldef, UCAL_SHORT_STANDARD, "en_US", result, resultlength, &status); 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzdname, "PST"); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(tzdname, result) != 0){ 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: got the wrong time zone(SHORT_STANDARD) display name %s, wanted %s\n", austrdup(result), austrdup(tzdname)); 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing the setAttributes and getAttributes of a UCalendar*/ 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the getAttributes and set Attributes\n"); 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_getAttribute(calit, UCAL_LENIENT); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count2=ucal_getAttribute(calfr, UCAL_LENIENT); 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_LENIENT, 0); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(caldef, UCAL_LENIENT, count2); 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( ucal_getAttribute(calit, UCAL_LENIENT) !=0 || 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_getAttribute(calfr, UCAL_LENIENT)!=ucal_getAttribute(caldef, UCAL_LENIENT) ) 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: there is an error in getAttributes or setAttributes\n"); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: attribute set and got successfully\n"); 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*set it back to orginal value */ 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Setting it back to normal\n"); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_LENIENT, count); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ucal_getAttribute(calit, UCAL_LENIENT)!=count) 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in setting the attribute back to normal\n"); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*setting the first day of the week to other values */ 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_getAttribute(calit, UCAL_FIRST_DAY_OF_WEEK); 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=7; ++i) { 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_FIRST_DAY_OF_WEEK,i); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_getAttribute(calit, UCAL_FIRST_DAY_OF_WEEK) != i) 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: set/getFirstDayOfWeek failed\n"); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*get bogus Attribute*/ 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_getAttribute(calit, (UCalendarAttribute)99); /* BOGUS_ATTRIBUTE */ 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(count != -1){ 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: get/bogus attribute should return -1\n"); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*set it back to normal */ 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_FIRST_DAY_OF_WEEK,count); 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*setting minimal days of the week to other values */ 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru count=ucal_getAttribute(calit, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i=1; i<=7; ++i) { 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,i); 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_getAttribute(calit, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK) != i) 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: set/getMinimalDaysInFirstWeek failed\n"); 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*set it back to normal */ 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(calit, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,count); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing if the UCalendar's timezone is currently in day light saving's time*/ 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting if the UCalendar is currently in daylight saving's time\n"); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_MARCH, 3, 10, 45, 20, &status); 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_inDaylightTime(caldef, &status ); 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) { 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in ucal_inDaylightTime: %s\n", u_errorName(status)); 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!ucal_inDaylightTime(caldef, &status)) 4476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_verbose("PASS: It is not in daylight saving's time\n"); 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: It is not in daylight saving's time\n"); 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*closing the UCalendar*/ 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(caldef); 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(caldef2); 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(calfr); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(calit); 456c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_close(calfrclone); 457b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 458b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /*testing ucal_getType, and ucal_open with UCAL_GREGORIAN*/ 45950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (ucalGetTypeTestPtr = ucalGetTypeTests; ucalGetTypeTestPtr->expectedResult != NULL; ++ucalGetTypeTestPtr) { 46050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char * localeToDisplay = (ucalGetTypeTestPtr->locale != NULL)? ucalGetTypeTestPtr->locale: "<NULL>"; 461b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru status = U_ZERO_ERROR; 462b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru caldef = ucal_open(NULL, 0, ucalGetTypeTestPtr->locale, ucalGetTypeTestPtr->calType, &status); 463b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) ) { 464b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char * calType = ucal_getType(caldef, &status); 465b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ( U_SUCCESS(status) && calType != NULL ) { 46654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( uprv_strcmp( calType, ucalGetTypeTestPtr->expectedResult ) != 0 ) { 46750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: ucal_open %s type %d does not return %s calendar\n", localeToDisplay, 468b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucalGetTypeTestPtr->calType, ucalGetTypeTestPtr->expectedResult); 469b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 470b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 47150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: ucal_open %s type %d, then ucal_getType fails\n", localeToDisplay, ucalGetTypeTestPtr->calType); 472b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 473b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_close(caldef); 474b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 47550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_err("FAIL: ucal_open %s type %d fails\n", localeToDisplay, ucalGetTypeTestPtr->calType); 476b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 477b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 478b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*closing the UDateFormat used */ 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(datdef); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(result); 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru free(tzdname); 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*------------------------------------------------------*/ 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Testing the getMillis, setMillis, setDate and setDateTime functions extensively*/ 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetSetDateAPI() 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 49054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UCalendar *caldef = 0, *caldef2 = 0, *caldef3 = 0; 491c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hour; 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t zoneOffset; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *datdef = 0; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d2= 837039928046.0; 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar temp[30]; 49954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius double testMillis; 50054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t dateBit; 5018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius UChar id[4]; 5028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius int32_t idLen; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nOpening the calendars()\n"); 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the calendars used */ 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caldef=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru caldef2=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 50954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius caldef3=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the dateformat */ 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* this is supposed to open default date format, but later on it treats it like it is "en_US" 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru - very bad if you try to run the tests on machine where default locale is NOT "en_US" */ 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*datdef=udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,NULL,fgGMTID,-1, &status);*/ 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru datdef=udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US",fgGMTID,-1,NULL,0, &status); 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 5176d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat : %s (Are you missing data?)\n", u_errorName(status)); 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing getMillis and setMillis */ 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the date and time fetched in millis for a calendar using getMillis\n"); 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(caldef, &status); 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getMillis : %s\n", u_errorName(status)); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing setMillis */ 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the set date and time function using setMillis\n"); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setMillis(caldef, d2, &status); 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in setMillis : %s\n", u_errorName(status)); 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing if the calendar date is set properly or not */ 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(caldef, &status); 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(datdef, d1), myDateFormat(datdef, d2))!=0) 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in setMillis or getMillis\n"); 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*-------------------*/ 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /*testing large negative millis*/ 54254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /*test a previously failed millis and beyond the lower bounds - ICU trac #9403 */ 54354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // -184303902611600000.0 - just beyond lower bounds (#9403 sets U_ILLEGAL_ARGUMENT_ERROR in strict mode) 54454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius // -46447814188001000.0 - fixed by #9403 54554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 54654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("\nTesting very large valid millis & invalid setMillis values (in both strict & lienent modes) detected\n"); 54754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 54854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testMillis = -46447814188001000.0; // point where floorDivide in handleComputeFields failed as per #9403 54954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("using value[%lf]\n", testMillis); 55054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setAttribute(caldef3, UCAL_LENIENT, 0); 55154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(caldef3, testMillis, &status); 55254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)){ 55354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("Fail: setMillis incorrectly detected invalid value : for millis : %e : returned : %s\n", testMillis, u_errorName(status)); 55454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 55554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 55654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 55754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("\nTesting invalid setMillis values detected\n"); 55854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testMillis = -184303902611600000.0; 55954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("using value[%lf]\n", testMillis); 56054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setAttribute(caldef3, UCAL_LENIENT, 1); 56154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(caldef3, testMillis, &status); 56254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)){ 56354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("Fail: setMillis incorrectly detected invalid value : for millis : %e : returned : %s\n", testMillis, u_errorName(status)); 56454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 56554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 56654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dateBit = ucal_get(caldef2, UCAL_MILLISECOND, &status); 56754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(testMillis == dateBit) 56854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 56954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("Fail: error in setMillis, allowed invalid value %e : returns millisecond : %d", testMillis, dateBit); 57054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 57154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("Pass: setMillis correctly pinned min, returned : %d", dateBit); 57254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 57354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 57454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 57554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("\nTesting invalid setMillis values detected\n"); 57654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius testMillis = -184303902611600000.0; 57754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("using value[%lf]\n", testMillis); 57854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setAttribute(caldef3, UCAL_LENIENT, 0); 57954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(caldef3, testMillis, &status); 58054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(U_FAILURE(status)){ 58154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("Pass: Illegal argument error as expected : for millis : %e : returned : %s\n", testMillis, u_errorName(status)); 58254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 58354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 58454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dateBit = ucal_get(caldef3, UCAL_DAY_OF_MONTH, &status); 58554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("Fail: error in setMillis, allowed invalid value %e : returns DayOfMonth : %d", testMillis, dateBit); 58654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 58754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /*-------------------*/ 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_setTimeZone(NULL, &status); 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 5928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius /*testing ucal_setTimeZone() and ucal_getTimeZoneID function*/ 5938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_verbose("\nTesting if the function ucal_setTimeZone() and ucal_getTimeZoneID work fine\n"); 5948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius idLen = ucal_getTimeZoneID(caldef2, id, sizeof(id)/sizeof(id[0]), &status); 59559d709d503bab6e2b61931737e662dd293b40578ccornelius (void)idLen; /* Suppress set but not used warning. */ 5968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 5978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("Error in getTimeZoneID : %s\n", u_errorName(status)); 5988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else if (u_strcmp(id, fgGMTID) != 0) { 5998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: getTimeZoneID returns a wrong ID: actual=%d, expected=%s\n", austrdup(id), austrdup(fgGMTID)); 6008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else { 6018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_verbose("PASS: getTimeZoneID works fine\n"); 6028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 6038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setMillis(caldef2, d2, &status); 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 6068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("Error in getMillis : %s\n", u_errorName(status)); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hour=ucal_get(caldef2, UCAL_HOUR_OF_DAY, &status); 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setTimeZone(caldef2,tzID, 3, &status); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status)); 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("ucal_setTimeZone worked fine\n"); 6178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 6188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius idLen = ucal_getTimeZoneID(caldef2, id, sizeof(id)/sizeof(id[0]), &status); 6198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (U_FAILURE(status)) { 6208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("Error in getTimeZoneID : %s\n", u_errorName(status)); 6218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else if (u_strcmp(id, tzID) != 0) { 6228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_err("FAIL: getTimeZoneID returns a wrong ID: actual=%d, expected=%s\n", austrdup(id), austrdup(tzID)); 6238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } else { 6248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius log_verbose("PASS: getTimeZoneID works fine\n"); 6258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 6268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(hour == ucal_get(caldef2, UCAL_HOUR_OF_DAY, &status)) 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error setting the time zone doesn't change the represented time\n"); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if((hour-8 + 1) != ucal_get(caldef2, UCAL_HOUR_OF_DAY, &status)) /*because it is not in daylight savings time */ 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error setTimeZone doesn't change the represented time correctly with 8 hour offset\n"); 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setTimeZone works fine\n"); 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing setTimeZone roundtrip */ 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting setTimeZone() roundtrip\n"); 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setTimeZone(caldef2, tzID, 3, &status); 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status)); 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(d2==ucal_getMillis(caldef2, &status)) 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setTimeZone roundtrip test passed\n"); 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: setTimeZone roundtrip test failed\n"); 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru zoneOffset = ucal_get(caldef2, UCAL_ZONE_OFFSET, &status); 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", u_errorName(status)); 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (zoneOffset != 0) { 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone() offset=%d\n", zoneOffset); 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setTimeZone(caldef2, NULL, -1, &status); 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status)); 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ucal_getMillis(caldef2, &status)) 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setTimeZone roundtrip test passed\n"); 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: setTimeZone roundtrip test failed\n"); 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru zoneOffset = ucal_get(caldef2, UCAL_ZONE_OFFSET, &status); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", u_errorName(status)); 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if (zoneOffset != -28800000) { 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone() offset=%d\n", zoneOffset); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ctest_resetTimeZone(); 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*----------------------------* */ 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing if setDate works fine */ 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_setDate() function \n"); 67954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_uastrcpy(temp, "Dec 17, 1971, 11:05:28 PM"); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef,1971, UCAL_DECEMBER, 17, &status); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in setting the calendar date : %s\n", u_errorName(status)); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*checking if the calendar date is set properly or not */ 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(caldef, &status); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(datdef, d1), temp)==0) 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS:setDate works fine\n"); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL:Error in setDate()\n"); 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Testing setDate Extensively with various input values */ 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting ucal_setDate() extensively\n"); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 1999, UCAL_JANUARY, 10, &status); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 10th day of January is :", caldef, datdef, 1999, UCAL_JANUARY, 10); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 1999, UCAL_DECEMBER, 3, &status); 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 3rd day of December is :", caldef, datdef, 1999, UCAL_DECEMBER, 3); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 2000, UCAL_MAY, 3, &status); 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("2000 3rd day of May is :", caldef, datdef, 2000, UCAL_MAY, 3); 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 1999, UCAL_AUGUST, 32, &status); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 32th day of August is :", caldef, datdef, 1999, UCAL_SEPTEMBER, 1); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 1999, UCAL_MARCH, 0, &status); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 0th day of March is :", caldef, datdef, 1999, UCAL_FEBRUARY, 28); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(caldef, 0, UCAL_MARCH, 12, &status); 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*--------------------*/ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing if setDateTime works fine */ 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_setDateTime() function \n"); 71054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_uastrcpy(temp, "May 3, 1972, 4:30:42 PM"); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef,1972, UCAL_MAY, 3, 16, 30, 42, &status); 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error in setting the calendar date : %s\n", u_errorName(status)); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*checking if the calendar date is set properly or not */ 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(caldef, &status); 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(u_strcmp(myDateFormat(datdef, d1), temp)==0) 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: setDateTime works fine\n"); 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Error in setDateTime\n"); 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing setDateTime extensively with various input values*/ 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting ucal_setDateTime() function extensively\n"); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_OCTOBER, 10, 6, 45, 30, &status); 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 10th day of October at 6:45:30 is :", caldef, datdef, 1999, UCAL_OCTOBER, 10, 6, 45, 30, 0 ); 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_MARCH, 3, 15, 10, 55, &status); 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 3rd day of March at 15:10:55 is :", caldef, datdef, 1999, UCAL_MARCH, 3, 3, 10, 55, 1); 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_MAY, 3, 25, 30, 45, &status); 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 3rd day of May at 25:30:45 is :", caldef, datdef, 1999, UCAL_MAY, 4, 1, 30, 45, 0); 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_AUGUST, 32, 22, 65, 40, &status); 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 32th day of August at 22:65:40 is :", caldef, datdef, 1999, UCAL_SEPTEMBER, 1, 11, 5, 40,1); 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_MARCH, 12, 0, 0, 0,&status); 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 12th day of March at 0:0:0 is :", caldef, datdef, 1999, UCAL_MARCH, 12, 0, 0, 0, 0); 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(caldef, 1999, UCAL_MARCH, 12, -10, -10,0, &status); 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify2("1999 12th day of March is at -10:-10:0 :", caldef, datdef, 1999, UCAL_MARCH, 11, 1, 50, 0, 1); 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*close caldef and datdef*/ 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(caldef); 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(caldef2); 74454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_close(caldef3); 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(datdef); 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*----------------------------------------------------------- */ 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm the functioning of the calendar field related functions. 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestFieldGetSet() 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal = 0; 755c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *datdef = 0; 75759d709d503bab6e2b61931737e662dd293b40578ccornelius UDate d1 = 0; 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status=U_ZERO_ERROR; 75959d709d503bab6e2b61931737e662dd293b40578ccornelius (void)d1; /* Suppress set but not used warning. */ 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nFetching pointer to UCalendar using the ucal_open()\n"); 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 762b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the calendar used */ 763b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 76550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open failed: %s - (Are you missing data?)\n", u_errorName(status)); 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru datdef=udat_open(UDAT_SHORT,UDAT_SHORT ,NULL,fgGMTID,-1,NULL, 0, &status); 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)) 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru { 7716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat : %s (Are you missing data?)\n", u_errorName(status)); 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing ucal_get()*/ 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_get() function of Calendar\n"); 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_MARCH, 12, 5, 25, 30, &status); 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 7786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in the setDateTime() : %s (Are you missing data?)\n", u_errorName(status)); 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ucal_get(cal, UCAL_YEAR, &status)!=1999 || ucal_get(cal, UCAL_MONTH, &status)!=2 || 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(cal, UCAL_DATE, &status)!=12 || ucal_get(cal, UCAL_HOUR, &status)!=5) 7826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in ucal_get() -> %s (Are you missing data?)\n", u_errorName(status)); 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else if(ucal_get(cal, UCAL_DAY_OF_WEEK_IN_MONTH, &status)!=2 || ucal_get(cal, UCAL_DAY_OF_WEEK, &status)!=6 784b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho || ucal_get(cal, UCAL_WEEK_OF_MONTH, &status)!=2 || ucal_get(cal, UCAL_WEEK_OF_YEAR, &status)!= 11) 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in ucal_get()\n"); 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: ucal_get() works fine\n"); 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*Testing the ucal_set() , ucal_clear() functions of calendar*/ 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the set, and clear field functions of calendar\n"); 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(cal, UCAL_LENIENT, 0); 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DATE, 3); 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 third day of June = ", cal, datdef, 1997, UCAL_JUNE, 3); 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK_IN_MONTH, 1); 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 first Tuesday in June = ", cal, datdef, 1997, UCAL_JUNE, 3); 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK_IN_MONTH, - 1); 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 last Tuesday in June = ", cal, datdef,1997, UCAL_JUNE, 24); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*give undesirable input */ 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 811c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_clear(cal); 812c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 813c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 814c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 815c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK_IN_MONTH, 0); 816c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru d1 = ucal_getMillis(cal, &status); 817c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR) { 818c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("FAIL: U_ILLEGAL_ARGUMENT_ERROR was not returned for : 1997 zero-th Tuesday in June\n"); 819c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 820c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_verbose("PASS: U_ILLEGAL_ARGUMENT_ERROR as expected\n"); 821c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 822c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_WEEK_OF_MONTH, 1); 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 Tuesday in week 1 of June = ", cal,datdef, 1997, UCAL_JUNE, 3); 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_WEEK_OF_MONTH, 5); 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 Tuesday in week 5 of June = ", cal,datdef, 1997, UCAL_JULY, 1); 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, UCAL_JUNE); 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_WEEK_OF_MONTH, 0); 841b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setAttribute(cal, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,1); 842c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru d1 = ucal_getMillis(cal,&status); 843c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR){ 844c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("FAIL: U_ILLEGAL_ARGUMENT_ERROR was not returned for : 1997 Tuesday zero-th week in June\n"); 845c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 846c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_verbose("PASS: U_ILLEGAL_ARGUMENT_ERROR as expected\n"); 847c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 848c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru status = U_ZERO_ERROR; 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR_WOY, 1997); 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_WEEK_OF_YEAR, 1); 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 Tuesday in week 1 of year = ", cal, datdef,1996, UCAL_DECEMBER, 31); 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1997); 856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_WEEK, UCAL_TUESDAY); 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_WEEK_OF_YEAR, 10); 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1997 Tuesday in week 10 of year = ", cal,datdef, 1997, UCAL_MARCH, 4); 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, 1999); 861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DAY_OF_YEAR, 1); 862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 1st day of the year =", cal, datdef, 1999, UCAL_JANUARY, 1); 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, -3); 864c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru d1 = ucal_getMillis(cal,&status); 865c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru if (status != U_ILLEGAL_ARGUMENT_ERROR){ 866c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_err("FAIL: U_ILLEGAL_ARGUMENT_ERROR was not returned for : 1999 -3th month\n"); 867c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } else { 868c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru log_verbose("PASS: U_ILLEGAL_ARGUMENT_ERROR as expected\n"); 869c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru } 870c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setAttribute(cal, UCAL_LENIENT, 1); 872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, -3); 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru verify1("1999 -3th month should be", cal, datdef, 1998, UCAL_OCTOBER, 1); 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*testing isSet and clearField()*/ 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(!ucal_isSet(cal, UCAL_WEEK_OF_YEAR)) 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: error in isSet\n"); 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: isSet working fine\n"); 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clearField(cal, UCAL_WEEK_OF_YEAR); 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ucal_isSet(cal, UCAL_WEEK_OF_YEAR)) 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: there is an error in clearField or isSet\n"); 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS :clearField working fine\n"); 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*-------------------------------*/ 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(datdef); 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 894103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef struct { 895103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const char * zone; 896103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t year; 897103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t month; 898103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t day; 899103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius int32_t hour; 900103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} TransitionItem; 901103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 902103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusstatic const TransitionItem transitionItems[] = { 903103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "America/Caracas", 2007, UCAL_DECEMBER, 8, 10 }, /* day before change in UCAL_ZONE_OFFSET */ 904103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { "US/Pacific", 2011, UCAL_MARCH, 12, 10 }, /* day before change in UCAL_DST_OFFSET */ 905103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius { NULL, 0, 0, 0, 0 } 906103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius}; 907b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 908b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 909b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 910b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Execute adding and rolling in Calendar extensively, 911b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 912b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestAddRollExtensive() 913b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 914103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius const TransitionItem * itemPtr; 915b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal = 0; 916b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i,limit; 917103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar tzID[32]; 918b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendarDateFields e; 919b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y,m,d,hr,min,sec,ms; 920b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxlimit = 40; 921b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 922b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y = 1997; m = UCAL_FEBRUARY; d = 1; hr = 1; min = 1; sec = 0; ms = 0; 923b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 924b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Testing add and roll extensively\n"); 925b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the calendar used */ 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status);; 929b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 93050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open() failed : %s - (Are you missing data?)\n", u_errorName(status)); 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, y); 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, m); 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DATE, d); 937b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setAttribute(cal, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,1); 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Confirm that adding to various fields works.*/ 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting to confirm that adding to various fields works with ucal_add()\n"); 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_YEAR, 1, &status); 943b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status)); return; } 944b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y++; 945b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 946b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_MONTH, 12, &status); 947b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; } 948b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y+=1; 949b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 950b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_DATE, 1, &status); 951b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; } 952b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d++; 953b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 954b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_DATE, 2, &status); 955b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; } 956b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d += 2; 957b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_DATE, 28, &status); 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; } 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++m; 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal, (UCalendarDateFields)-1, 10, &status); 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_ILLEGAL_ARGUMENT_ERROR) 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pass: Illegal argument error as expected\n"); 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: No, illegal argument error as expected. Got....: %s\n", u_errorName(status)); 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 968b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 969b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*confirm that applying roll to various fields works fine*/ 972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting to confirm that ucal_roll() works\n"); 973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_DATE, -1, &status); 974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d -=1; 976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_MONTH, -2, &status); 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru m -=2; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_DATE, 1, &status); 982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d +=1; 984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_MONTH, -12, &status); 986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_YEAR, -1, &status); 989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y -=1; 991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 992b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, UCAL_DATE, 29, &status); 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; } 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d = 2; 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, y, m, d); 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, (UCalendarDateFields)-1, 10, &status); 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(status==U_ILLEGAL_ARGUMENT_ERROR) 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Pass: illegal arguement error as expected\n"); 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else{ 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Fail: no illegal argument error got..: %s\n", u_errorName(status)); 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_clear(cal); 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_FEBRUARY, 28, 10, 30, 45, &status); 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("error is setting the datetime: %s\n", u_errorName(status)); 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal, UCAL_MONTH, 1, &status); 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDate(cal, 1999, UCAL_MARCH, 28); 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal, UCAL_MILLISECOND, 1000, &status); 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDateTime(cal, 1999, UCAL_MARCH, 28, 10, 30, 46, 0, UCAL_MILLISECOND); 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*--------------- */ 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Testing add and roll extensively */ 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the ucal_add() and ucal_roll() functions extensively\n"); 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru y = 1997; m = UCAL_FEBRUARY; d = 1; hr = 1; min = 1; sec = 0; ms = 0; 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status); 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_open failed: %s\n", u_errorName(status)); 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_YEAR, y); 1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MONTH, m); 1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_DATE, d); 1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_HOUR, hr); 1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MINUTE, min); 1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_SECOND,sec); 1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(cal, UCAL_MILLISECOND, ms); 1032b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ucal_setAttribute(cal, UCAL_MINIMAL_DAYS_IN_FIRST_WEEK,1); 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting UCalendar add...\n"); 1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(e = UCAL_YEAR;e < UCAL_FIELD_COUNT; e=(UCalendarDateFields)((int32_t)e + 1)) { 1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru limit = maxlimit; 1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal, e, 1, &status); 1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { limit = i; status = U_ZERO_ERROR; } 1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal, e, -1, &status); 1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_add -1 failed: %s\n", u_errorName(status)); 1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDateTime(cal, y, m, d, hr, min, sec, ms, e); 1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting calendar ucal_roll()...\n"); 1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(e = UCAL_YEAR;e < UCAL_FIELD_COUNT; e=(UCalendarDateFields)((int32_t)e + 1)) { 1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru limit = maxlimit; 1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, e, 1, &status); 1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1059b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru limit = i; 1060b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 1061b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1062b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1063b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (i = 0; i < limit; i++) { 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_roll(cal, e, -1, &status); 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_roll -1 failed: %s\n", u_errorName(status)); 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru checkDateTime(cal, y, m, d, hr, min, sec, ms, e); 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1074103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/*--------------- */ 1075103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_verbose("\nTesting ucal_add() across ZONE_OFFSET and DST_OFFSE transitions.\n"); 1076103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius for (itemPtr = transitionItems; itemPtr->zone != NULL; itemPtr++) { 1077103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status=U_ZERO_ERROR; 1078103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_uastrcpy(tzID, itemPtr->zone); 1079103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status); 1080103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1081103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("ucal_open failed for zone %s: %s\n", itemPtr->zone, u_errorName(status)); 1082103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius continue; 1083103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1084103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(cal, itemPtr->year, itemPtr->month, itemPtr->day, itemPtr->hour, 0, 0, &status); 1085103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_add(cal, UCAL_DATE, 1, &status); 1086103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius hr = ucal_get(cal, UCAL_HOUR_OF_DAY, &status); 1087103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 1088103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("ucal_add failed adding day across transition for zone %s: %s\n", itemPtr->zone, u_errorName(status)); 1089103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if ( hr != itemPtr->hour ) { 1090103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("ucal_add produced wrong hour %d when adding day across transition for zone %s\n", hr, itemPtr->zone); 1091103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 1092103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_add(cal, UCAL_DATE, -1, &status); 1093103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius hr = ucal_get(cal, UCAL_HOUR_OF_DAY, &status); 1094103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if ( U_FAILURE(status) ) { 1095103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("ucal_add failed subtracting day across transition for zone %s: %s\n", itemPtr->zone, u_errorName(status)); 1096103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if ( hr != itemPtr->hour ) { 1097103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("ucal_add produced wrong hour %d when subtracting day across transition for zone %s\n", hr, itemPtr->zone); 1098103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1099103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1100103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_close(cal); 1101103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*------------------------------------------------------ */ 1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Testing the Limits for various Fields of Calendar*/ 1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGetLimits() 1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal = 0; 1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t min, max, gr_min, le_max, ac_min, ac_max, val; 1110c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the calendar used */ 1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status);; 1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 111850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open() for gregorian calendar failed in TestGetLimits: %s - (Are you missing data?)\n", u_errorName(status)); 1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the getLimits function for various fields\n"); 1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(cal, 1999, UCAL_MARCH, 5, &status); /* Set the date to be March 5, 1999 */ 1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru val = ucal_get(cal, UCAL_DAY_OF_WEEK, &status); 1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru min = ucal_getLimit(cal, UCAL_DAY_OF_WEEK, UCAL_MINIMUM, &status); 1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max = ucal_getLimit(cal, UCAL_DAY_OF_WEEK, UCAL_MAXIMUM, &status); 1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (min != UCAL_SUNDAY || max != UCAL_SATURDAY ) && (min > val && val > max) && (val != UCAL_FRIDAY)){ 1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Min/max bad\n"); 1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Day of week %d out of range\n", val); 1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: FAIL: Day of week should be SUNDAY Got %d\n", val); 1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("getLimits successful\n"); 1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru val = ucal_get(cal, UCAL_DAY_OF_WEEK_IN_MONTH, &status); 1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru min = ucal_getLimit(cal, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_MINIMUM, &status); 1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max = ucal_getLimit(cal, UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_MAXIMUM, &status); 1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ( (min != 0 || max != 5 ) && (min > val && val > max) && (val != 1)){ 1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Min/max bad\n"); 1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Day of week in month %d out of range\n", val); 1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: FAIL: Day of week in month should be SUNDAY Got %d\n", val); 1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("getLimits successful\n"); 1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru min=ucal_getLimit(cal, UCAL_MONTH, UCAL_MINIMUM, &status); 1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max=ucal_getLimit(cal, UCAL_MONTH, UCAL_MAXIMUM, &status); 1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gr_min=ucal_getLimit(cal, UCAL_MONTH, UCAL_GREATEST_MINIMUM, &status); 1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_max=ucal_getLimit(cal, UCAL_MONTH, UCAL_LEAST_MAXIMUM, &status); 1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ac_min=ucal_getLimit(cal, UCAL_MONTH, UCAL_ACTUAL_MINIMUM, &status); 1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ac_max=ucal_getLimit(cal, UCAL_MONTH, UCAL_ACTUAL_MAXIMUM, &status); 1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Error in getLimits: %s\n", u_errorName(status)); 1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(min!=0 || max!=11 || gr_min!=0 || le_max!=11 || ac_min!=0 || ac_max!=11) 1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("There is and error in getLimits in fetching the values\n"); 1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("getLimits successful\n"); 1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(cal, 1999, UCAL_MARCH, 5, 4, 10, 35, &status); 1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru val=ucal_get(cal, UCAL_HOUR_OF_DAY, &status); 1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru min=ucal_getLimit(cal, UCAL_HOUR_OF_DAY, UCAL_MINIMUM, &status); 1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru max=ucal_getLimit(cal, UCAL_HOUR_OF_DAY, UCAL_MAXIMUM, &status); 1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gr_min=ucal_getLimit(cal, UCAL_MINUTE, UCAL_GREATEST_MINIMUM, &status); 1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru le_max=ucal_getLimit(cal, UCAL_MINUTE, UCAL_LEAST_MAXIMUM, &status); 1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ac_min=ucal_getLimit(cal, UCAL_MINUTE, UCAL_ACTUAL_MINIMUM, &status); 1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ac_max=ucal_getLimit(cal, UCAL_SECOND, UCAL_ACTUAL_MAXIMUM, &status); 1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( (min!=0 || max!= 11 || gr_min!=0 || le_max!=60 || ac_min!=0 || ac_max!=60) && 1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (min>val && val>max) && val!=4){ 1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Min/max bad\n"); 1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Hour of Day %d out of range\n", val); 1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: HOUR_OF_DAY should be 4 Got %d\n", val); 1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("getLimits successful\n"); 1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*get BOGUS_LIMIT type*/ 1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru val=ucal_getLimit(cal, UCAL_SECOND, (UCalendarLimitType)99, &status); 1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(val != -1){ 1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: ucal_getLimit() with BOGUS type should return -1\n"); 1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status=U_ZERO_ERROR; 1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Test that the days of the week progress properly when add is called repeatedly 1200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for increments of 24 days. 1201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestDOWProgression() 1203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t initialDOW, DOW, newDOW, expectedDOW; 1205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal = 0; 1206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *datfor = 0; 1207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date1; 1208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t delta=24; 1209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1210c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 1211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempMsgBuf[256]; 1212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 1213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*open the calendar used */ 1214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);; 1215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 121650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open failed: %s - (Are you missing data?)\n", u_errorName(status)); 1217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru datfor=udat_open(UDAT_MEDIUM,UDAT_MEDIUM ,NULL, fgGMTID,-1,NULL, 0, &status); 1221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 12226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat : %s (Are you missing data?)\n", u_errorName(status)); 1223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDate(cal, 1999, UCAL_JANUARY, 1, &status); 1227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the DOW progression\n"); 1229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru initialDOW = ucal_get(cal, UCAL_DAY_OF_WEEK, &status); 12316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { log_data_err("ucal_get() failed: %s (Are you missing data?)\n", u_errorName(status) ); return; } 1232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDOW = initialDOW; 1233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru do { 1234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DOW = newDOW; 1235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("DOW = %d...\n", DOW); 1236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date1=ucal_getMillis(cal, &status); 1237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", u_errorName(status)); return;} 1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n", u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1))); 1239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_add(cal,UCAL_DAY_OF_WEEK, delta, &status); 1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_add() failed: %s\n", u_errorName(status)); return; } 1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru newDOW = ucal_get(cal, UCAL_DAY_OF_WEEK, &status); 1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { log_err("ucal_get() failed: %s\n", u_errorName(status)); return; } 1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expectedDOW = 1 + (DOW + delta - 1) % 7; 1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date1=ucal_getMillis(cal, &status); 1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", u_errorName(status)); return;} 1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (newDOW != expectedDOW) { 1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Day of week should be %d instead of %d on %s", expectedDOW, newDOW, 1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1)) ); 1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (newDOW != initialDOW); 1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(datfor); 1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Confirm that the offset between local time and GMT behaves as expected. 1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void TestGMTvsLocal() 1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("\nTesting the offset between the GMT and local time\n"); 1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testZones(1999, 1, 1, 12, 0, 0); 1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testZones(1999, 4, 16, 18, 30, 0); 1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testZones(1998, 12, 17, 19, 0, 0); 1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void testZones(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn, int32_t sc) 1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t offset,utc, expected; 1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *gmtcal = 0, *cal = 0; 1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date1; 1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double temp; 1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDateFormat *datfor = 0; 1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1283c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UChar tzID[4]; 1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempMsgBuf[256]; 1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_strcpy(tzID, fgGMTID); 1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru gmtcal=ucal_open(tzID, 3, "en_US", UCAL_TRADITIONAL, &status);; 1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 128950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open failed: %s - (Are you missing data?)\n", u_errorName(status)); 1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_uastrcpy(tzID, "PST"); 1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = ucal_open(tzID, 3, "en_US", UCAL_TRADITIONAL, &status); 1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_open failed: %s\n", u_errorName(status)); 1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru datfor=udat_open(UDAT_MEDIUM,UDAT_MEDIUM ,NULL, fgGMTID,-1,NULL, 0, &status); 1300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(status)){ 13016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("error in creating the dateformat : %s (Are you missing data?)\n", u_errorName(status)); 1302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setDateTime(gmtcal, yr, mo - 1, dt, hr, mn, sc, &status); 1305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 13066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_data_err("ucal_setDateTime failed: %s (Are you missing data?)\n", u_errorName(status)); 1307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_set(gmtcal, UCAL_MILLISECOND, 0); 1310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date1 = ucal_getMillis(gmtcal, &status); 1311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getMillis failed: %s\n", u_errorName(status)); 1313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("date = %s\n", u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1)) ); 1316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setMillis(cal, date1, &status); 1319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_setMillis() failed: %s\n", u_errorName(status)); 1321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset = ucal_get(cal, UCAL_ZONE_OFFSET, &status); 1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru offset += ucal_get(cal, UCAL_DST_OFFSET, &status); 1326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_get() failed: %s\n", u_errorName(status)); 1329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=(double)((double)offset / 1000.0 / 60.0 / 60.0); 1332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*printf("offset for %s %f hr\n", austrdup(myDateFormat(datfor, date1)), temp);*/ 1333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru utc = ((ucal_get(cal, UCAL_HOUR_OF_DAY, &status) * 60 + 1335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(cal, UCAL_MINUTE, &status)) * 60 + 1336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(cal, UCAL_SECOND, &status)) * 1000 + 1337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(cal, UCAL_MILLISECOND, &status) - offset; 1338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_get() failed: %s\n", u_errorName(status)); 1340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru expected = ((hr * 60 + mn) * 60 + sc) * 1000; 1344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (utc != expected) { 1345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru temp=(double)(utc - expected)/ 1000 / 60 / 60.0; 1346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Discrepancy of %d millis = %fhr\n", utc-expected, temp ); 1347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: the offset between local and GMT is correct\n"); 1350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(gmtcal); 1351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru udat_close(datfor); 1353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* INTERNAL FUNCTIONS USED */ 1361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*------------------------------------------------------------------------------------------- */ 1362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void checkDateTime(UCalendar* c, 1365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t y, int32_t m, int32_t d, 1366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hr, int32_t min, int32_t sec, 1367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t ms, UCalendarDateFields field) 1368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_get(c, UCAL_YEAR, &status) != y || 1372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) != m || 1373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status) != d || 1374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_HOUR, &status) != hr || 1375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MINUTE, &status) != min || 1376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_SECOND, &status) != sec || 1377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MILLISECOND, &status) != ms) { 1378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("U_FAILURE for field %d, Expected y/m/d h:m:s:ms of %d/%d/%d %d:%d:%d:%d got %d/%d/%d %d:%d:%d:%d\n", 1379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (int32_t)field, y, m + 1, d, hr, min, sec, ms, 1380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_YEAR, &status), 1381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) + 1, 1382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status), 1383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_HOUR, &status), 1384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MINUTE, &status) + 1, 1385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_SECOND, &status), 1386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MILLISECOND, &status) ); 1387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)){ 1389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_get failed: %s\n", u_errorName(status)); 1390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Confirmed: %d/%d/%d %d:%d:%d:%d\n", y, m + 1, d, hr, min, sec, ms); 1396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void checkDate(UCalendar* c, int32_t y, int32_t m, int32_t d) 1401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_get(c,UCAL_YEAR, &status) != y || 1404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) != m || 1405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status) != d) { 1406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAILURE: Expected y/m/d of %d/%d/%d got %d/%d/%d\n", y, m + 1, d, 1408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_YEAR, &status), 1409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) + 1, 1410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status) ); 1411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_get failed: %s\n", u_errorName(status)); 1414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else 1418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("Confirmed: %d/%d/%d\n", y, m + 1, d); 1419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------- */ 1426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void verify1(const char* msg, UCalendar* c, UDateFormat* dat, int32_t year, int32_t month, int32_t day) 1428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1; 1430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_get(c, UCAL_YEAR, &status) == year && 1432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) == month && 1433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status) == day) { 1434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Calendar::get failed: %s\n", u_errorName(status)); 1436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: %s\n", msg); 1439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(c, &status); 1440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getMillis failed: %s\n", u_errorName(status)); 1442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*log_verbose(austrdup(myDateFormat(dat, d1)) );*/ 1445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: %s\n", msg); 1448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(c, &status); 1449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getMillis failed: %s\n", u_errorName(status) ); 1451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got %s Expected %d/%d/%d \n", austrdup(myDateFormat(dat, d1)), year, month + 1, day ); 1454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* ------------------------------------ */ 1461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic void verify2(const char* msg, UCalendar* c, UDateFormat* dat, int32_t year, int32_t month, int32_t day, 1462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hour, int32_t min, int32_t sec, int32_t am_pm) 1463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate d1; 1465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char tempMsgBuf[256]; 1467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ucal_get(c, UCAL_YEAR, &status) == year && 1469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MONTH, &status) == month && 1470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_DATE, &status) == day && 1471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_HOUR, &status) == hour && 1472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_MINUTE, &status) == min && 1473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_SECOND, &status) == sec && 1474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_get(c, UCAL_AM_PM, &status) == am_pm ){ 1475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: Calendar::get failed: %s\n", u_errorName(status)); 1477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("PASS: %s\n", msg); 1480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(c, &status); 1481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getMillis failed: %s\n", u_errorName(status)); 1483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_verbose("%s\n" , u_austrcpy(tempMsgBuf, myDateFormat(dat, d1)) ); 1486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru else { 1488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("FAIL: %s\n", msg); 1489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru d1=ucal_getMillis(c, &status); 1490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 1491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getMillis failed: %s\n", u_errorName(status)); 1492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("Got %s Expected %d/%d/%d/ %d:%d:%d %s\n", austrdup(myDateFormat(dat, d1)), 1495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru year, month + 1, day, hour, min, sec, (am_pm==0) ? "AM": "PM"); 1496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid TestGregorianChange() { 1504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UChar utc[] = { 0x45, 0x74, 0x63, 0x2f, 0x47, 0x4d, 0x54, 0 }; /* "Etc/GMT" */ 1505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const int32_t dayMillis = 86400 * INT64_C(1000); /* 1 day = 86400 seconds */ 1506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCalendar *cal; 1507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate date; 1508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode errorCode = U_ZERO_ERROR; 1509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test ucal_setGregorianChange() on a Gregorian calendar. */ 1511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 1512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = ucal_open(utc, -1, "", UCAL_GREGORIAN, &errorCode); 1513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 151450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("ucal_open(UTC) failed: %s - (Are you missing data?)\n", u_errorName(errorCode)); 1515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setGregorianChange(cal, -365 * (dayMillis * (UDate)1), &errorCode); 1518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 1519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_setGregorianChange(1969) failed: %s\n", u_errorName(errorCode)); 1520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 1521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = ucal_getGregorianChange(cal, &errorCode); 1522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode) || date != -365 * (dayMillis * (UDate)1)) { 1523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getGregorianChange() failed: %s, date = %f\n", u_errorName(errorCode), date); 1524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Test ucal_setGregorianChange() on a non-Gregorian calendar where it should fail. */ 1529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 1530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru cal = ucal_open(utc, -1, "th@calendar=buddhist", UCAL_TRADITIONAL, &errorCode); 1531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(errorCode)) { 1532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_open(UTC, non-Gregorian) failed: %s\n", u_errorName(errorCode)); 1533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 1534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_setGregorianChange(cal, -730 * (dayMillis * (UDate)1), &errorCode); 1536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode != U_UNSUPPORTED_ERROR) { 1537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_setGregorianChange(non-Gregorian calendar) did not yield U_UNSUPPORTED_ERROR but %s\n", 1538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 1539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errorCode = U_ZERO_ERROR; 1541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru date = ucal_getGregorianChange(cal, &errorCode); 1542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(errorCode != U_UNSUPPORTED_ERROR) { 1543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log_err("ucal_getGregorianChange(non-Gregorian calendar) did not yield U_UNSUPPORTED_ERROR but %s\n", 1544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(errorCode)); 1545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 1546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ucal_close(cal); 1547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1549b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Querustatic void TestGetKeywordValuesForLocale() { 1550b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define PREFERRED_SIZE 15 155159d709d503bab6e2b61931737e662dd293b40578ccornelius#define MAX_NUMBER_OF_KEYWORDS 5 1552b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *PREFERRED[PREFERRED_SIZE][MAX_NUMBER_OF_KEYWORDS+1] = { 155359d709d503bab6e2b61931737e662dd293b40578ccornelius { "root", "gregorian", NULL, NULL, NULL, NULL }, 155459d709d503bab6e2b61931737e662dd293b40578ccornelius { "und", "gregorian", NULL, NULL, NULL, NULL }, 155559d709d503bab6e2b61931737e662dd293b40578ccornelius { "en_US", "gregorian", NULL, NULL, NULL, NULL }, 155659d709d503bab6e2b61931737e662dd293b40578ccornelius { "en_029", "gregorian", NULL, NULL, NULL, NULL }, 15571c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "th_TH", "gregorian", "buddhist", NULL, NULL, NULL }, // android-changed 15581c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "und_TH", "gregorian", "buddhist", NULL, NULL, NULL }, // android-changed 15591c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "en_TH", "gregorian", "buddhist", NULL, NULL, NULL }, // android-changed 15601c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert // { "th_TH", "buddhist", "gregorian", NULL, NULL, NULL }, 15611c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert // { "und_TH", "buddhist", "gregorian", NULL, NULL, NULL }, 15621c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert // { "en_TH", "buddhist", "gregorian", NULL, NULL, NULL }, 156359d709d503bab6e2b61931737e662dd293b40578ccornelius { "he_IL", "gregorian", "hebrew", "islamic", "islamic-civil", "islamic-tbla" }, 156459d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_EG", "gregorian", "coptic", "islamic", "islamic-civil", "islamic-tbla" }, 156559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ja", "gregorian", "japanese", NULL, NULL, NULL }, 156659d709d503bab6e2b61931737e662dd293b40578ccornelius { "ps_Guru_IN", "gregorian", "indian", NULL, NULL, NULL }, 15671c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "th@calendar=gregorian", "gregorian", "buddhist", NULL, NULL, NULL }, 156859d709d503bab6e2b61931737e662dd293b40578ccornelius { "en@calendar=islamic", "gregorian", NULL, NULL, NULL, NULL }, 156959d709d503bab6e2b61931737e662dd293b40578ccornelius { "zh_TW", "gregorian", "roc", "chinese", NULL, NULL }, 15701c16f7233e0ce0965f835ec0c509d30699d7161aFredrik Roubert { "ar_IR", "gregorian", "persian", "islamic", "islamic-civil", "islamic-tbla" }, // android-changed 1571b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 157259d709d503bab6e2b61931737e662dd293b40578ccornelius const int32_t EXPECTED_SIZE[PREFERRED_SIZE] = { 1, 1, 1, 1, 2, 2, 2, 5, 5, 2, 2, 2, 1, 3, 5 }; 1573b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 1574b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t i, size, j; 1575b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UEnumeration *all, *pref; 1576b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *loc = NULL; 1577b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool matchPref, matchAll; 1578b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const char *value; 1579b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t valueLength; 1580b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UList *ALLList = NULL; 1581b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1582b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UEnumeration *ALL = ucal_getKeywordValuesForLocale("calendar", uloc_getDefault(), FALSE, &status); 1583b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(status)) { 1584b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (i = 0; i < PREFERRED_SIZE; i++) { 1585b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pref = NULL; 1586b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru all = NULL; 1587b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru loc = PREFERRED[i][0]; 1588b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru pref = ucal_getKeywordValuesForLocale("calendar", loc, TRUE, &status); 1589b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 1590b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 1591b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1592b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru value = NULL; 1593b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru valueLength = 0; 1594b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1595b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(status) && uenum_count(pref, &status) == EXPECTED_SIZE[i]) { 1596b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = TRUE; 1597b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (j = 0; j < EXPECTED_SIZE[i]; j++) { 1598b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((value = uenum_next(pref, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 1599b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (uprv_strcmp(value, PREFERRED[i][j+1]) != 0) { 1600b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 1601b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1602b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1603b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1604b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchPref = FALSE; 1605b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("ERROR getting keyword value for locale \"%s\"\n", loc); 1606b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1607b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1608b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1609b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1610b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1611b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!matchPref) { 1612b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: Preferred values for locale \"%s\" does not match expected.\n", loc); 1613b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1614b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1615b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(pref); 1616b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1617b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru all = ucal_getKeywordValuesForLocale("calendar", loc, FALSE, &status); 1618b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1619b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru size = uenum_count(all, &status); 1620b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1621b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_SUCCESS(status) && size == uenum_count(ALL, &status)) { 1622b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = TRUE; 1623b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ALLList = ulist_getListFromEnum(ALL); 1624b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru for (j = 0; j < size; j++) { 1625b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if ((value = uenum_next(all, &valueLength, &status)) != NULL && U_SUCCESS(status)) { 1626b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!ulist_containsString(ALLList, value, uprv_strlen(value))) { 1627b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("Locale %s have %s not in ALL\n", loc, value); 1628b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 1629b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1630b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1631b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 1632b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru matchAll = FALSE; 1633b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("ERROR getting \"all\" keyword value for locale \"%s\"\n", loc); 1634b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru break; 1635b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1636b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1637b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1638b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (!matchAll) { 1639b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru log_err("FAIL: All values for locale \"%s\" does not match expected.\n", loc); 1640b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1641b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1642b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(all); 1643b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1644b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 16456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru log_err_status(status, "Failed to get ALL keyword values for default locale %s: %s.\n", uloc_getDefault(), u_errorName(status)); 1646b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 1647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru uenum_close(ALL); 1648b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 1649b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 165050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* 165150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Weekend tests, ported from 165250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * icu4j/trunk/main/tests/core/src/com/ibm/icu/dev/test/calendar/IBMCalendarTest.java 165350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * and extended a bit. Notes below from IBMCalendarTest.java ... 165450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * This test tests for specific locale data. This is probably okay 165550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * as far as US data is concerned, but if the Arabic/Yemen data 165650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * changes, this test will have to be updated. 165750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */ 165850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 165950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct { 166050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t year; 166150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t month; 166250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t day; 166350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t hour; 166450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t millisecOffset; 166550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UBool isWeekend; 166650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} TestWeekendDates; 166750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct { 166850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char * locale; 166950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const TestWeekendDates * dates; 167050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t numDates; 167150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} TestWeekendDatesList; 167250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 167350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const TestWeekendDates weekendDates_en_US[] = { 167450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 17, 23, 0, 0 }, /* Fri 23:00 */ 167550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 18, 0, -1, 0 }, /* Fri 23:59:59.999 */ 167650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 18, 0, 0, 1 }, /* Sat 00:00 */ 167750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 18, 15, 0, 1 }, /* Sat 15:00 */ 167850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 19, 23, 0, 1 }, /* Sun 23:00 */ 167950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 20, 0, -1, 1 }, /* Sun 23:59:59.999 */ 168050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 20, 0, 0, 0 }, /* Mon 00:00 */ 168150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 20, 8, 0, 0 }, /* Mon 08:00 */ 168250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 168359d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const TestWeekendDates weekendDates_ar_OM[] = { 168450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 15, 23, 0, 0 }, /* Wed 23:00 */ 168550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 16, 0, -1, 0 }, /* Wed 23:59:59.999 */ 1686f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { 2000, UCAL_MARCH, 16, 0, 0, 0 }, /* Thu 00:00 */ 1687f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { 2000, UCAL_MARCH, 16, 15, 0, 0 }, /* Thu 15:00 */ 168850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 17, 23, 0, 1 }, /* Fri 23:00 */ 168950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { 2000, UCAL_MARCH, 18, 0, -1, 1 }, /* Fri 23:59:59.999 */ 1690f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { 2000, UCAL_MARCH, 18, 0, 0, 1 }, /* Sat 00:00 */ 1691f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { 2000, UCAL_MARCH, 18, 8, 0, 1 }, /* Sat 08:00 */ 169250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 169350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const TestWeekendDatesList testDates[] = { 169450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en_US", weekendDates_en_US, sizeof(weekendDates_en_US)/sizeof(weekendDates_en_US[0]) }, 169559d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_OM", weekendDates_ar_OM, sizeof(weekendDates_ar_OM)/sizeof(weekendDates_ar_OM[0]) }, 169650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 169750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 169850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct { 169950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UCalendarDaysOfWeek dayOfWeek; 170050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UCalendarWeekdayType dayType; 170150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t transition; /* transition time if dayType is UCAL_WEEKEND_ONSET or UCAL_WEEKEND_CEASE; else must be 0 */ 170250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} TestDaysOfWeek; 170350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehotypedef struct { 170450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const char * locale; 170550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const TestDaysOfWeek * days; 170650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t numDays; 170750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} TestDaysOfWeekList; 170850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 170950294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const TestDaysOfWeek daysOfWeek_en_US[] = { 171050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { UCAL_MONDAY, UCAL_WEEKDAY, 0 }, 171150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { UCAL_FRIDAY, UCAL_WEEKDAY, 0 }, 171250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { UCAL_SATURDAY, UCAL_WEEKEND, 0 }, 171359d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_SUNDAY, UCAL_WEEKEND, 0 }, 171450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 1715f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusstatic const TestDaysOfWeek daysOfWeek_ar_OM[] = { /* Friday:Saturday */ 171650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { UCAL_WEDNESDAY,UCAL_WEEKDAY, 0 }, 1717f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { UCAL_THURSDAY, UCAL_WEEKDAY, 0 }, 171859d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_FRIDAY, UCAL_WEEKEND, 0 }, 1719f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius { UCAL_SATURDAY, UCAL_WEEKEND, 0 }, 172059d709d503bab6e2b61931737e662dd293b40578ccornelius}; 172159d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const TestDaysOfWeek daysOfWeek_hi_IN[] = { /* Sunday only */ 172259d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_MONDAY, UCAL_WEEKDAY, 0 }, 172359d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_FRIDAY, UCAL_WEEKDAY, 0 }, 172459d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_SATURDAY, UCAL_WEEKDAY, 0 }, 172559d709d503bab6e2b61931737e662dd293b40578ccornelius { UCAL_SUNDAY, UCAL_WEEKEND, 0 }, 172650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 172750294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const TestDaysOfWeekList testDays[] = { 172850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho { "en_US", daysOfWeek_en_US, sizeof(daysOfWeek_en_US)/sizeof(daysOfWeek_en_US[0]) }, 172959d709d503bab6e2b61931737e662dd293b40578ccornelius { "ar_OM", daysOfWeek_ar_OM, sizeof(daysOfWeek_ar_OM)/sizeof(daysOfWeek_ar_OM[0]) }, 173059d709d503bab6e2b61931737e662dd293b40578ccornelius { "hi_IN", daysOfWeek_hi_IN, sizeof(daysOfWeek_hi_IN)/sizeof(daysOfWeek_hi_IN[0]) }, 173150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho}; 173250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 173350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic const UChar logDateFormat[] = { 0x0045,0x0045,0x0045,0x0020,0x004D,0x004D,0x004D,0x0020,0x0064,0x0064,0x0020,0x0079, 173450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 0x0079,0x0079,0x0079,0x0020,0x0047,0x0020,0x0048,0x0048,0x003A,0x006D,0x006D,0x003A, 173550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 0x0073,0x0073,0x002E,0x0053,0x0053,0x0053,0 }; /* "EEE MMM dd yyyy G HH:mm:ss.SSS" */ 173650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoenum { kFormattedDateMax = 2*sizeof(logDateFormat)/sizeof(logDateFormat[0]) }; 173750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 173850294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehostatic void TestWeekend() { 173950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const TestWeekendDatesList * testDatesPtr = testDates; 174050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const TestDaysOfWeekList * testDaysPtr = testDays; 174150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t count, subCount; 174250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 174350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode fmtStatus = U_ZERO_ERROR; 174450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UDateFormat * fmt = udat_open(UDAT_NONE, UDAT_NONE, "en", NULL, 0, NULL, 0, &fmtStatus); 174550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_SUCCESS(fmtStatus)) { 174650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_applyPattern(fmt, FALSE, logDateFormat, -1); 1747b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 1748b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_data_err("Unable to create UDateFormat - %s\n", u_errorName(fmtStatus)); 1749b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho return; 175050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 175154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for (count = sizeof(testDates)/sizeof(testDates[0]); count-- > 0; ++testDatesPtr) { 175250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 175354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UCalendar * cal = ucal_open(NULL, 0, testDatesPtr->locale, UCAL_GREGORIAN, &status); 175454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("locale: %s\n", testDatesPtr->locale); 175554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_SUCCESS(status)) { 175654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const TestWeekendDates * weekendDatesPtr = testDatesPtr->dates; 175754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for (subCount = testDatesPtr->numDates; subCount--; ++weekendDatesPtr) { 175854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate dateToTest; 175954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool isWeekend; 176054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius char fmtDateBytes[kFormattedDateMax] = "<could not format test date>"; /* initialize for failure */ 176154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 176254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(cal); 176354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setDateTime(cal, weekendDatesPtr->year, weekendDatesPtr->month, weekendDatesPtr->day, 176454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius weekendDatesPtr->hour, 0, 0, &status); 176554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dateToTest = ucal_getMillis(cal, &status) + weekendDatesPtr->millisecOffset; 176654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius isWeekend = ucal_isWeekend(cal, dateToTest, &status); 176754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_SUCCESS(fmtStatus)) { 176854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UChar fmtDate[kFormattedDateMax]; 176954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (void)udat_format(fmt, dateToTest, fmtDate, kFormattedDateMax, NULL, &fmtStatus); 177054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_SUCCESS(fmtStatus)) { 177154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius u_austrncpy(fmtDateBytes, fmtDate, kFormattedDateMax); 177254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fmtDateBytes[kFormattedDateMax-1] = 0; 177354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 177454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius fmtStatus = U_ZERO_ERROR; 177554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 177654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 177754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_FAILURE(status) ) { 177854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: locale %s date %s isWeekend() status %s\n", testDatesPtr->locale, fmtDateBytes, u_errorName(status) ); 177954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 178054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( (isWeekend!=0) != (weekendDatesPtr->isWeekend!=0) ) { 178154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: locale %s date %s isWeekend %d, expected the opposite\n", testDatesPtr->locale, fmtDateBytes, isWeekend ); 178254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 178354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("OK: locale %s date %s isWeekend %d\n", testDatesPtr->locale, fmtDateBytes, isWeekend ); 178454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 178554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 178654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_close(cal); 178754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 178854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: ucal_open for locale %s failed: %s - (Are you missing data?)\n", testDatesPtr->locale, u_errorName(status) ); 178954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 179054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 179150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_SUCCESS(fmtStatus)) { 179250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho udat_close(fmt); 179350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 179450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 179550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (count = sizeof(testDays)/sizeof(testDays[0]); count-- > 0; ++testDaysPtr) { 179650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UErrorCode status = U_ZERO_ERROR; 179750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UCalendar * cal = ucal_open(NULL, 0, testDaysPtr->locale, UCAL_GREGORIAN, &status); 179850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_verbose("locale: %s\n", testDaysPtr->locale); 179950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if (U_SUCCESS(status)) { 180050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho const TestDaysOfWeek * daysOfWeekPtr = testDaysPtr->days; 180150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho for (subCount = testDaysPtr->numDays; subCount--; ++daysOfWeekPtr) { 180250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t transition = 0; 180350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho UCalendarWeekdayType dayType = ucal_getDayOfWeekType(cal, daysOfWeekPtr->dayOfWeek, &status); 180450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( dayType == UCAL_WEEKEND_ONSET || dayType == UCAL_WEEKEND_CEASE ) { 180550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho transition = ucal_getWeekendTransition(cal, daysOfWeekPtr->dayOfWeek, &status); 180650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 180750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if ( U_FAILURE(status) ) { 180854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: locale %s DOW %d getDayOfWeekType() status %s\n", testDaysPtr->locale, daysOfWeekPtr->dayOfWeek, u_errorName(status) ); 180954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 181050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if ( dayType != daysOfWeekPtr->dayType || transition != daysOfWeekPtr->transition ) { 181154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: locale %s DOW %d type %d, expected %d\n", testDaysPtr->locale, daysOfWeekPtr->dayOfWeek, dayType, daysOfWeekPtr->dayType ); 181250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 181354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_verbose("OK: locale %s DOW %d type %d\n", testDaysPtr->locale, daysOfWeekPtr->dayOfWeek, dayType ); 181450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 181550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 181650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ucal_close(cal); 181750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 181850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho log_data_err("FAIL: ucal_open for locale %s failed: %s - (Are you missing data?)\n", testDaysPtr->locale, u_errorName(status) ); 181950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 182050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } 182150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho} 182250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 1823b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/** 1824b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * TestFieldDifference 1825b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */ 1826b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1827b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehotypedef struct { 1828b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const UChar * timezone; 1829b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const char * locale; 1830b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UDate start; 1831b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UDate target; 183254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool progressive; /* TRUE to compute progressive difference for each field, FALSE to reset calendar after each call */ 1833b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t yDiff; 1834b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t MDiff; 1835b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t dDiff; 1836b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t HDiff; 1837b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho int32_t mDiff; 183854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t sDiff; /* 0x7FFFFFFF indicates overflow error expected */ 1839b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} TFDItem; 1840b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1841b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const UChar tzUSPacific[] = { 0x55,0x53,0x2F,0x50,0x61,0x63,0x69,0x66,0x69,0x63,0 }; /* "US/Pacific" */ 184254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UChar tzGMT[] = { 0x47,0x4D,0x54,0 }; /* "GMT" */ 1843b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1844b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehostatic const TFDItem tfdItems[] = { 184554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* timezone locale start target progres yDf MDf dDf HDf mDf sDf */ 184654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* For these we compute the progressive difference for each field - not resetting the calendar after each call */ 184754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzUSPacific, "en_US", 1267459800000.0, 1277772600000.0, TRUE, 0, 3, 27, 9, 40, 0 }, /* 2010-Mar-01 08:10 -> 2010-Jun-28 17:50 */ 184854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzUSPacific, "en_US", 1267459800000.0, 1299089280000.0, TRUE, 1, 0, 1, 1, 58, 0 }, /* 2010-Mar-01 08:10 -> 2011-Mar-02 10:08 */ 184954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* For these we compute the total difference for each field - resetting the calendar after each call */ 185054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, 1073692800000.0, FALSE, 34, 408, 12427, 298248, 17894880, 1073692800 }, /* 1970-Jan-01 00:00 -> 2004-Jan-10 00:00 */ 185154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, 1073779200000.0, FALSE, 34, 408, 12428, 298272, 17896320, 1073779200 }, /* 1970-Jan-01 00:00 -> 2004-Jan-11 00:00 */ 185254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, 2147472000000.0, FALSE, 68, 816, 24855, 596520, 35791200, 2147472000 }, /* 1970-Jan-01 00:00 -> 2038-Jan-19 00:00 */ 185354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, 2147558400000.0, FALSE, 68, 816, 24856, 596544, 35792640, 0x7FFFFFFF }, /* 1970-Jan-01 00:00 -> 2038-Jan-20 00:00, seconds diff overflow */ 185454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, -1073692800000.0, FALSE, -34,-408,-12427,-298248,-17894880,-1073692800 }, /* 1970-Jan-01 00:00 -> 1935-Dec-24 00:00 */ 185554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", 0.0, -1073779200000.0, FALSE, -34,-408,-12428,-298272,-17896320,-1073779200 }, /* 1970-Jan-01 00:00 -> 1935-Dec-23 00:00 */ 185654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* check fwd/backward on either side of era boundary and across era boundary */ 185754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -61978089600000.0,-61820409600000.0, FALSE, 4, 59, 1825, 43800, 2628000, 157680000 }, /* CE 5-Dec-31 00:00 -> CE 10-Dec-30 00:00 */ 185854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -61820409600000.0,-61978089600000.0, FALSE, -4, -59, -1825, -43800, -2628000, -157680000 }, /* CE 10-Dec-30 00:00 -> CE 5-Dec-31 00:00 */ 185954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -62451129600000.0,-62293449600000.0, FALSE, 4, 59, 1825, 43800, 2628000, 157680000 }, /* BCE 10-Jan-04 00:00 -> BCE 5-Jan-03 00:00 */ 186054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -62293449600000.0,-62451129600000.0, FALSE, -4, -59, -1825, -43800, -2628000, -157680000 }, /* BCE 5-Jan-03 00:00 -> BCE 10-Jan-04 00:00 */ 186154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -62293449600000.0,-61978089600000.0, FALSE, 9, 119, 3650, 87600, 5256000, 315360000 }, /* BCE 5-Jan-03 00:00 -> CE 5-Dec-31 00:00 */ 186254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en_US", -61978089600000.0,-62293449600000.0, FALSE, -9,-119, -3650, -87600, -5256000, -315360000 }, /* CE 5-Dec-31 00:00 -> BCE 5-Jan-03 00:00 */ 186354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -1672704000000.0, -1515024000000.0, FALSE, 4, 59, 1825, 43800, 2628000, 157680000 }, /* MG 5-Dec-30 00:00 -> MG 10-Dec-29 00:00 */ 186454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -1515024000000.0, -1672704000000.0, FALSE, -4, -59, -1825, -43800, -2628000, -157680000 }, /* MG 10-Dec-29 00:00 -> MG 5-Dec-30 00:00 */ 186554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -2145744000000.0, -1988064000000.0, FALSE, 4, 59, 1825, 43800, 2628000, 157680000 }, /* BMG 10-Jan-03 00:00 -> BMG 5-Jan-02 00:00 */ 186654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -1988064000000.0, -2145744000000.0, FALSE, -4, -59, -1825, -43800, -2628000, -157680000 }, /* BMG 5-Jan-02 00:00 -> BMG 10-Jan-03 00:00 */ 186754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -1988064000000.0, -1672704000000.0, FALSE, 9, 119, 3650, 87600, 5256000, 315360000 }, /* BMG 5-Jan-02 00:00 -> MG 5-Dec-30 00:00 */ 186854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=roc", -1672704000000.0, -1988064000000.0, FALSE, -9,-119, -3650, -87600, -5256000, -315360000 }, /* MG 5-Dec-30 00:00 -> BMG 5-Jan-02 00:00 */ 186954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-53026531200000.0,-52868851200000.0, FALSE, 4, 64, 1825, 43800, 2628000, 157680000 }, /* Er1 5-Nas-05 00:00 -> Er1 10-Nas-04 00:00 */ 187054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-52868851200000.0,-53026531200000.0, FALSE, -4, -64, -1825, -43800, -2628000, -157680000 }, /* Er1 10-Nas-04 00:00 -> Er1 5-Nas-05 00:00 */ 187154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-53499571200000.0,-53341891200000.0, FALSE, 4, 64, 1825, 43800, 2628000, 157680000 }, /* Er0 10-Tou-04 00:00 -> Er0 5-Tou-02 00:00 */ 187254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-53341891200000.0,-53499571200000.0, FALSE, -4, -64, -1825, -43800, -2628000, -157680000 }, /* Er0 5-Tou-02 00:00 -> Er0 10-Tou-04 00:00 */ 187354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-53341891200000.0,-53026531200000.0, FALSE, 9, 129, 3650, 87600, 5256000, 315360000 }, /* Er0 5-Tou-02 00:00 -> Er1 5-Nas-05 00:00 */ 187454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { tzGMT, "en@calendar=coptic",-53026531200000.0,-53341891200000.0, FALSE, -9,-129, -3650, -87600, -5256000, -315360000 }, /* Er1 5-Nas-05 00:00 -> Er0 5-Tou-02 00:00 */ 187554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NULL, NULL, 0.0, 0.0, FALSE, 0, 0, 0, 0, 0, 0 } /* terminator */ 1876b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho}; 1877b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1878b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehovoid TestFieldDifference() { 1879b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho const TFDItem * tfdItemPtr; 1880b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho for (tfdItemPtr = tfdItems; tfdItemPtr->timezone != NULL; tfdItemPtr++) { 1881b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UErrorCode status = U_ZERO_ERROR; 1882b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho UCalendar* ucal = ucal_open(tfdItemPtr->timezone, -1, tfdItemPtr->locale, UCAL_DEFAULT, &status); 1883b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho if (U_FAILURE(status)) { 1884b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho log_err("FAIL: for locale \"%s\", ucal_open had status %s\n", tfdItemPtr->locale, u_errorName(status) ); 1885b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } else { 188654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t yDf, MDf, dDf, HDf, mDf, sDf; 188754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (tfdItemPtr->progressive) { 188854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 188954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_YEAR, &status); 189054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_MONTH, &status); 189154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_DATE, &status); 189254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius HDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_HOUR, &status); 189354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius mDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_MINUTE, &status); 189454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_SECOND, &status); 189554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 189654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: for locale \"%s\", start %.1f, target %.1f, ucal_setMillis or ucal_getFieldDifference had status %s\n", 189754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, u_errorName(status) ); 189854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( yDf != tfdItemPtr->yDiff || 189954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MDf != tfdItemPtr->MDiff || 190054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dDf != tfdItemPtr->dDiff || 190154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius HDf != tfdItemPtr->HDiff || 190254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius mDf != tfdItemPtr->mDiff || 190354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sDf != tfdItemPtr->sDiff ) { 190454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: for locale \"%s\", start %.1f, target %.1f, expected y-M-d-H-m-s progressive diffs %d-%d-%d-%d-%d-%d, got %d-%d-%d-%d-%d-%d\n", 190554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, 190654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->yDiff, tfdItemPtr->MDiff, tfdItemPtr->dDiff, tfdItemPtr->HDiff, tfdItemPtr->mDiff, tfdItemPtr->sDiff, 190754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yDf, MDf, dDf, HDf, mDf, sDf); 190854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 190954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 191054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 191154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_YEAR, &status); 191254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 191354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_MONTH, &status); 191454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 191554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_DATE, &status); 191654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 191754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius HDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_HOUR, &status); 191854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 191954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius mDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_MINUTE, &status); 192054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 192154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: for locale \"%s\", start %.1f, target %.1f, ucal_setMillis or ucal_getFieldDifference (y-M-d-H-m) had status %s\n", 192254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, u_errorName(status) ); 192354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( yDf != tfdItemPtr->yDiff || 192454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius MDf != tfdItemPtr->MDiff || 192554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius dDf != tfdItemPtr->dDiff || 192654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius HDf != tfdItemPtr->HDiff || 192754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius mDf != tfdItemPtr->mDiff ) { 192854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: for locale \"%s\", start %.1f, target %.1f, expected y-M-d-H-m total diffs %d-%d-%d-%d-%d, got %d-%d-%d-%d-%d\n", 192954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, 193054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->yDiff, tfdItemPtr->MDiff, tfdItemPtr->dDiff, tfdItemPtr->HDiff, tfdItemPtr->mDiff, 193154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yDf, MDf, dDf, HDf, mDf); 193254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 193354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, tfdItemPtr->start, &status); 193454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius sDf = ucal_getFieldDifference(ucal, tfdItemPtr->target, UCAL_SECOND, &status); 193554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (tfdItemPtr->sDiff != 0x7FFFFFFF) { 193654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 193754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: for locale \"%s\", start %.1f, target %.1f, ucal_setMillis or ucal_getFieldDifference (seconds) had status %s\n", 193854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, u_errorName(status) ); 193954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (sDf != tfdItemPtr->sDiff) { 194054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: for locale \"%s\", start %.1f, target %.1f, expected seconds progressive diff %d, got %d\n", 194154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target, tfdItemPtr->sDiff, sDf); 194254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 194354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (!U_FAILURE(status)) { 194454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: for locale \"%s\", start %.1f, target %.1f, for ucal_getFieldDifference (seconds) expected overflow error, got none\n", 194554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius tfdItemPtr->locale, tfdItemPtr->start, tfdItemPtr->target ); 194654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 1947b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1948b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho ucal_close(ucal); 1949b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1950b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho } 1951b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho} 1952b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho 1953103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusvoid TestAmbiguousWallTime() { 1954103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UErrorCode status = U_ZERO_ERROR; 1955103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UChar tzID[32]; 1956103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UCalendar* ucal; 1957103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius UDate t, expected; 1958103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1959103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius u_uastrcpy(tzID, "America/New_York"); 1960103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal = ucal_open(tzID, -1, NULL, UCAL_DEFAULT, &status); 1961103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1962103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Failed to create a calendar"); 1963103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return; 1964103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1965103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1966103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (ucal_getAttribute(ucal, UCAL_REPEATED_WALL_TIME) != UCAL_WALLTIME_LAST) { 1967103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Default UCAL_REPEATED_WALL_TIME value is not UCAL_WALLTIME_LAST"); 1968103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1969103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1970103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (ucal_getAttribute(ucal, UCAL_SKIPPED_WALL_TIME) != UCAL_WALLTIME_LAST) { 1971103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Default UCAL_SKIPPED_WALL_TIME value is not UCAL_WALLTIME_LAST"); 1972103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1973103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1974103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* UCAL_WALLTIME_FIRST on US fall transition */ 1975103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_REPEATED_WALL_TIME, UCAL_WALLTIME_FIRST); 1976103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 1977103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 11-1, 6, 1, 30, 0, &status); 1978103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 1979103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expected = 1320557400000.0; /* 2011-11-06T05:30:00Z */ 1980103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1981103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Calculating time 2011-11-06 01:30:00 with UCAL_WALLTIME_FIRST - %s\n", u_errorName(status)); 1982103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 1983103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (t != expected) { 1984103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: 2011-11-06 01:30:00 with UCAL_WALLTIME_FIRST - got: %f, expected: %f\n", t, expected); 1985103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1986103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 1987103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* UCAL_WALLTIME_LAST on US fall transition */ 1988103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_REPEATED_WALL_TIME, UCAL_WALLTIME_LAST); 1989103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 1990103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 11-1, 6, 1, 30, 0, &status); 1991103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 1992103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expected = 1320561000000.0; /* 2011-11-06T06:30:00Z */ 1993103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 1994103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Calculating time 2011-11-06 01:30:00 with UCAL_WALLTIME_LAST - %s\n", u_errorName(status)); 1995103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 1996103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (t != expected) { 1997103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: 2011-11-06 01:30:00 with UCAL_WALLTIME_LAST - got: %f, expected: %f\n", t, expected); 1998103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 1999103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2000103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* UCAL_WALLTIME_FIRST on US spring transition */ 2001103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_SKIPPED_WALL_TIME, UCAL_WALLTIME_FIRST); 2002103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 2003103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 3-1, 13, 2, 30, 0, &status); 2004103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 2005103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expected = 1299997800000.0; /* 2011-03-13T06:30:00Z */ 2006103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2007103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Calculating time 2011-03-13 02:30:00 with UCAL_WALLTIME_FIRST - %s\n", u_errorName(status)); 2008103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2009103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (t != expected) { 2010103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: 2011-03-13 02:30:00 with UCAL_WALLTIME_FIRST - got: %f, expected: %f\n", t, expected); 2011103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2012103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2013103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* UCAL_WALLTIME_LAST on US spring transition */ 2014103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_SKIPPED_WALL_TIME, UCAL_WALLTIME_LAST); 2015103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 2016103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 3-1, 13, 2, 30, 0, &status); 2017103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 2018103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expected = 1300001400000.0; /* 2011-03-13T07:30:00Z */ 2019103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2020103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Calculating time 2011-03-13 02:30:00 with UCAL_WALLTIME_LAST - %s\n", u_errorName(status)); 2021103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2022103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (t != expected) { 2023103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: 2011-03-13 02:30:00 with UCAL_WALLTIME_LAST - got: %f, expected: %f\n", t, expected); 2024103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2025103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2026103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* UCAL_WALLTIME_NEXT_VALID on US spring transition */ 2027103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_SKIPPED_WALL_TIME, UCAL_WALLTIME_NEXT_VALID); 2028103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 2029103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 3-1, 13, 2, 30, 0, &status); 2030103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 2031103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius expected = 1299999600000.0; /* 2011-03-13T07:00:00Z */ 2032103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_FAILURE(status)) { 2033103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_err("FAIL: Calculating time 2011-03-13 02:30:00 with UCAL_WALLTIME_NEXT_VALID - %s\n", u_errorName(status)); 2034103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2035103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else if (t != expected) { 2036103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: 2011-03-13 02:30:00 with UCAL_WALLTIME_NEXT_VALID - got: %f, expected: %f\n", t, expected); 2037103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2038103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2039103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* non-lenient on US spring transition */ 2040103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setAttribute(ucal, UCAL_LENIENT, 0); 2041103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_clear(ucal); 2042103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_setDateTime(ucal, 2011, 3-1, 13, 2, 30, 0, &status); 2043103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius t = ucal_getMillis(ucal, &status); 2044103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if (U_SUCCESS(status)) { 2045103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* must return error */ 2046103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius log_data_err("FAIL: Non-lenient did not fail with 2011-03-13 02:30:00\n"); 2047103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius status = U_ZERO_ERROR; 2048103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 2049103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 2050103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius ucal_close(ucal); 2051103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 2052103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius 205354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 205454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * TestAddRollEra0AndEraBounds, for #9226 205554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 205654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 205754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius typedef struct { 205854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char * locale; 205954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool era0YearsGoBackwards; /* until we have API to get this, per #9393 */ 206054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } EraTestItem; 206154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 206254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const EraTestItem eraTestItems[] = { 206354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* calendars with non-modern era 0 that goes backwards, max era == 1 */ 206454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=gregorian", TRUE }, 206554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=roc", TRUE }, 206654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=coptic", TRUE }, 206754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* calendars with non-modern era 0 that goes forwards, max era > 1 */ 206854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=japanese", FALSE }, 206954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=chinese", FALSE }, 207054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* calendars with non-modern era 0 that goes forwards, max era == 1 */ 207154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=ethiopic", FALSE }, 207254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* calendars with only one era = 0, forwards */ 207354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=buddhist", FALSE }, 207454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=hebrew", FALSE }, 207554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=islamic", FALSE }, 207654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=indian", FALSE }, 207754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=persian", FALSE }, 207854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "en@calendar=ethiopic-amete-alem", FALSE }, 207954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NULL, FALSE } 208054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}; 208154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 208254dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UChar zoneGMT[] = { 0x47,0x4D,0x54,0 }; 208354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 208454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid TestAddRollEra0AndEraBounds() { 208554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const EraTestItem * eraTestItemPtr; 208654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for (eraTestItemPtr = eraTestItems; eraTestItemPtr->locale != NULL; eraTestItemPtr++) { 208754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status = U_ZERO_ERROR; 208854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UCalendar *ucalTest = ucal_open(zoneGMT, -1, eraTestItemPtr->locale, UCAL_DEFAULT, &status); 208954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_SUCCESS(status) ) { 209054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t yrBefore, yrAfter, yrMax, eraAfter, eraMax, eraNow; 209154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 209254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 209354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 209454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 2); 209554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 0); 209654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrBefore = ucal_get(ucalTest, UCAL_YEAR, &status); 209754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_add(ucalTest, UCAL_YEAR, 1, &status); 209854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 209954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 210054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 0 year 2 then add 1 year and get year for %s, error %s\n", 210154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 210254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( (eraTestItemPtr->era0YearsGoBackwards && yrAfter>yrBefore) || 210354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (!eraTestItemPtr->era0YearsGoBackwards && yrAfter<yrBefore) ) { 210454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 0 add 1 year does not move forward in time for %s\n", eraTestItemPtr->locale); 210554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 210654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 210754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 210854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 210954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 2); 211054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 0); 211154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrBefore = ucal_get(ucalTest, UCAL_YEAR, &status); 211254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, 1, &status); 211354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 211454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 211554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 0 year 2 then roll 1 year and get year for %s, error %s\n", 211654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 211754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( (eraTestItemPtr->era0YearsGoBackwards && yrAfter>yrBefore) || 211854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius (!eraTestItemPtr->era0YearsGoBackwards && yrAfter<yrBefore) ) { 211954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 0 roll 1 year does not move forward in time for %s\n", eraTestItemPtr->locale); 212054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 212154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 212254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 212354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 212454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 1); 212554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 0); 212654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (eraTestItemPtr->era0YearsGoBackwards) { 212754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, 1, &status); /* roll forward in time to era 0 boundary */ 212854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 212954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 213054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 213154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 0 year 1 then roll 1 year and get year,era for %s, error %s\n", 213254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 213354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* all calendars with era0YearsGoBackwards have "unbounded" era0 year values, so we should pin at yr 1 */ 213454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (eraAfter != 0 || yrAfter != 1) { 213554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 0 roll 1 year from year 1 does not stay within era or pin to year 1 for %s (get era %d year %d)\n", 213654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, eraAfter, yrAfter); 213754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 213854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 213954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* roll backward in time to where era 0 years go negative, except for the Chinese 214054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius calendar, which uses negative eras instead of having years outside the range 1-60 */ 214154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char * calType = ucal_getType(ucalTest, &status); 214254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, -2, &status); 214354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 214454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 214554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 214654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 0 year 1 then roll -2 years and get year,era for %s, error %s\n", 214754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 214854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( uprv_strcmp(calType,"chinese")!=0 && (eraAfter != 0 || yrAfter != -1) ) { 214954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 0 roll -2 years from year 1 does not stay within era or produce year -1 for %s (get era %d year %d)\n", 215054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, eraAfter, yrAfter); 215154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 215254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 215354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 215454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 215554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 215654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { 215754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t eraMin = ucal_getLimit(ucalTest, UCAL_ERA, UCAL_MINIMUM, &status); 215854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char * calType = ucal_getType(ucalTest, &status); 215954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (eraMin != 0 && uprv_strcmp(calType, "chinese") != 0) { 216054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: ucal_getLimit returns minimum era %d (should be 0) for calType %s, error %s\n", eraMin, calType, u_errorName(status)); 216154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 216254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 216354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 216454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 216554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 216654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 1); 216754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 0); 216854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraMax = ucal_getLimit(ucalTest, UCAL_ERA, UCAL_MAXIMUM, &status); 216954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_SUCCESS(status) && eraMax > 0 ) { 217054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* try similar tests for era 1 (if calendar has it), in which years always go forward */ 217154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 217254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 217354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 2); 217454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 1); 217554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrBefore = ucal_get(ucalTest, UCAL_YEAR, &status); 217654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_add(ucalTest, UCAL_YEAR, 1, &status); 217754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 217854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 217954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 1 year 2 then add 1 year and get year for %s, error %s\n", 218054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 218154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( yrAfter<yrBefore ) { 218254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 add 1 year does not move forward in time for %s\n", eraTestItemPtr->locale); 218354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 218454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 218554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 218654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 218754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 2); 218854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 1); 218954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrBefore = ucal_get(ucalTest, UCAL_YEAR, &status); 219054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, 1, &status); 219154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 219254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 219354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 1 year 2 then roll 1 year and get year for %s, error %s\n", 219454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 219554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if ( yrAfter<yrBefore ) { 219654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 roll 1 year does not move forward in time for %s\n", eraTestItemPtr->locale); 219754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 219854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 219954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 220054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 220154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 1); 220254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, 1); 220354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrMax = ucal_getLimit(ucalTest, UCAL_YEAR, UCAL_ACTUAL_MAXIMUM, &status); /* max year value for era 1 */ 220454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, -1, &status); /* roll down which should pin or wrap to end */ 220554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 220654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 220754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 220854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era 1 year 1 then roll -1 year and get year,era for %s, error %s\n", 220954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 221054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* if yrMax is reasonable we should wrap to that, else we should pin at yr 1 */ 221154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (yrMax >= 32768) { 221254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (eraAfter != 1 || yrAfter != 1) { 221354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 roll -1 year from year 1 does not stay within era or pin to year 1 for %s (get era %d year %d)\n", 221454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, eraAfter, yrAfter); 221554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 221654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (eraAfter != 1 || yrAfter != yrMax) { 221754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 roll -1 year from year 1 does not stay within era or wrap to year %d for %s (get era %d year %d)\n", 221854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrMax, eraTestItemPtr->locale, eraAfter, yrAfter); 221954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 222054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* now roll up which should wrap to beginning */ 222154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, 1, &status); /* now roll up which should wrap to beginning */ 222254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 222354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 222454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 222554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 roll 1 year from end and get year,era for %s, error %s\n", 222654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraTestItemPtr->locale, u_errorName(status)); 222754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (eraAfter != 1 || yrAfter != 1) { 222854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era 1 roll 1 year from year %d does not stay within era or wrap to year 1 for %s (get era %d year %d)\n", 222954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrMax, eraTestItemPtr->locale, eraAfter, yrAfter); 223054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 223154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 223254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 223354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* if current era > 1, try the same roll tests for current era */ 223454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucalTest, ucal_getNow(), &status); 223554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow = ucal_get(ucalTest, UCAL_ERA, &status); 223654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_SUCCESS(status) && eraNow > 1 ) { 223754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 223854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_clear(ucalTest); 223954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_YEAR, 1); 224054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_set(ucalTest, UCAL_ERA, eraNow); 224154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrMax = ucal_getLimit(ucalTest, UCAL_YEAR, UCAL_ACTUAL_MAXIMUM, &status); /* max year value for this era */ 224254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, -1, &status); 224354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 224454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 224554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 224654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: set era %d year 1 then roll -1 year and get year,era for %s, error %s\n", 224754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow, eraTestItemPtr->locale, u_errorName(status)); 224854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* if yrMax is reasonable we should wrap to that, else we should pin at yr 1 */ 224954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (yrMax >= 32768) { 225054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (eraAfter != eraNow || yrAfter != 1) { 225154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era %d roll -1 year from year 1 does not stay within era or pin to year 1 for %s (get era %d year %d)\n", 225254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow, eraTestItemPtr->locale, eraAfter, yrAfter); 225354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 225454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (eraAfter != eraNow || yrAfter != yrMax) { 225554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era %d roll -1 year from year 1 does not stay within era or wrap to year %d for %s (get era %d year %d)\n", 225654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow, yrMax, eraTestItemPtr->locale, eraAfter, yrAfter); 225754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 225854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* now roll up which should wrap to beginning */ 225954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_roll(ucalTest, UCAL_YEAR, 1, &status); /* now roll up which should wrap to beginning */ 226054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius yrAfter = ucal_get(ucalTest, UCAL_YEAR, &status); 226154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraAfter = ucal_get(ucalTest, UCAL_ERA, &status); 226254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status)) { 226354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era %d roll 1 year from end and get year,era for %s, error %s\n", 226454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow, eraTestItemPtr->locale, u_errorName(status)); 226554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (eraAfter != eraNow || yrAfter != 1) { 226654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: era %d roll 1 year from year %d does not stay within era or wrap to year 1 for %s (get era %d year %d)\n", 226754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius eraNow, yrMax, eraTestItemPtr->locale, eraAfter, yrAfter); 226854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 226954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 227054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 227154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 227254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 227354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_close(ucalTest); 227454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 227554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: ucal_open fails for zone GMT, locale %s, UCAL_DEFAULT\n", eraTestItemPtr->locale); 227654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 227754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 227854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 227954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 228054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/** 228154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * TestGetTZTransition, for #9606 228254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius */ 228354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 228454dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliustypedef struct { 228554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const char *descrip; /* test description */ 228654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const UChar * zoneName; /* pointer to zero-terminated zone name */ 228754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t year; /* starting point for test is gregorian calendar noon on day specified by y,M,d here */ 228854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t month; 228954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t day; 229054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool hasPrev; /* does it have a previous transition from starting point? If so we test inclusive from that */ 229154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool hasNext; /* does it have a next transition from starting point? If so we test inclusive from that */ 229254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} TZTransitionItem; 229354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 229454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius/* have zoneGMT above */ 229554dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UChar zoneUSPacific[] = { 0x55,0x53,0x2F,0x50,0x61,0x63,0x69,0x66,0x69,0x63,0 }; /* "US/Pacific" */ 229654dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UChar zoneCairo[] = { 0x41,0x66,0x72,0x69,0x63,0x61,0x2F,0x43,0x61,0x69,0x72,0x6F,0 }; /* "Africa/Cairo", DST cancelled since 2011 */ 229754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const UChar zoneIceland[] = { 0x41,0x74,0x6C,0x61,0x6E,0x74,0x69,0x63,0x2F,0x52,0x65,0x79,0x6B,0x6A,0x61,0x76,0x69,0x6B,0 }; /* "Atlantic/Reykjavik", always on DST (since when?) */ 229854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 229954dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusstatic const TZTransitionItem tzTransitionItems[] = { 230054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "USPacific mid 2012", zoneUSPacific, 2012, UCAL_JULY, 1, TRUE , TRUE }, 230154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "USPacific mid 100", zoneUSPacific, 100, UCAL_JULY, 1, FALSE, TRUE }, /* no transitions before 100 CE... */ 23021b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert { "Cairo mid 2012", zoneCairo, 2012, UCAL_JULY, 1, TRUE , TRUE }, /* DST cancelled since 2011 (Changed since 2014c) */ 230354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { "Iceland mid 2012", zoneIceland, 2012, UCAL_JULY, 1, TRUE , FALSE }, /* always on DST */ 230454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius { NULL, NULL, 0, 0, 0, FALSE, FALSE } /* terminator */ 230554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius}; 230654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 230754dcd9b6a06071f647dac967e9e267abb9410720Craig Corneliusvoid TestGetTZTransition() { 230854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UErrorCode status = U_ZERO_ERROR; 230954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UCalendar * ucal = ucal_open(zoneGMT, -1, "en", UCAL_GREGORIAN, &status); 231054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_SUCCESS(status) ) { 231154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius const TZTransitionItem * itemPtr; 231254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius for (itemPtr = tzTransitionItems; itemPtr->descrip != NULL; itemPtr++) { 231354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate curMillis; 231454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setTimeZone(ucal, itemPtr->zoneName, -1, &status); 231554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setDateTime(ucal, itemPtr->year, itemPtr->month, itemPtr->day, 12, 0, 0, &status); 231654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius curMillis = ucal_getMillis(ucal, &status); 231759d709d503bab6e2b61931737e662dd293b40578ccornelius (void)curMillis; /* Suppress set but not used warning. */ 231854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if ( U_SUCCESS(status) ) { 231954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UDate transition1, transition2; 232054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius UBool result; 232154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 232254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius result = ucal_getTimeZoneTransitionDate(ucal, UCAL_TZ_TRANSITION_PREVIOUS, &transition1, &status); 232354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status) || result != itemPtr->hasPrev) { 232454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: %s ucal_getTimeZoneTransitionDate prev status %s, expected result %d but got %d\n", 232554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius itemPtr->descrip, u_errorName(status), itemPtr->hasPrev, result); 232654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (result) { 232754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, transition1, &status); 232854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius result = ucal_getTimeZoneTransitionDate(ucal, UCAL_TZ_TRANSITION_PREVIOUS_INCLUSIVE, &transition2, &status); 232954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status) || !result || transition2 != transition1) { 233054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: %s ucal_getTimeZoneTransitionDate prev_inc status %s, result %d, expected date %.1f but got %.1f\n", 233154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius itemPtr->descrip, u_errorName(status), result, transition1, transition2); 233254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 233354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 233454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 233554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 233654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius result = ucal_getTimeZoneTransitionDate(ucal, UCAL_TZ_TRANSITION_NEXT, &transition1, &status); 233754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status) || result != itemPtr->hasNext) { 233854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL: %s ucal_getTimeZoneTransitionDate next status %s, expected result %d but got %d\n", 233954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius itemPtr->descrip, u_errorName(status), itemPtr->hasNext, result); 234054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if (result) { 234154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_setMillis(ucal, transition1, &status); 234254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius result = ucal_getTimeZoneTransitionDate(ucal, UCAL_TZ_TRANSITION_NEXT_INCLUSIVE, &transition2, &status); 234354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if (U_FAILURE(status) || !result || transition2 != transition1) { 234454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_err("FAIL: %s ucal_getTimeZoneTransitionDate next_inc status %s, result %d, expected date %.1f but got %.1f\n", 234554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius itemPtr->descrip, u_errorName(status), result, transition1, transition2); 234654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 234754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 234854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 234954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 235054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL setup: can't setup calendar for %s, status %s\n", 235154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius itemPtr->descrip, u_errorName(status)); 235254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius status = U_ZERO_ERROR; 235354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 235454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 235554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius ucal_close(ucal); 235654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else { 235754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius log_data_err("FAIL setup: ucal_open status %s\n", u_errorName(status)); 235854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 235954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius} 236054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 236159d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const UChar winEastern[] = /* Eastern Standard Time */ 236259d709d503bab6e2b61931737e662dd293b40578ccornelius {0x45,0x61,0x73,0x74,0x65,0x72,0x6E,0x20,0x53,0x74,0x61,0x6E,0x64,0x61,0x72,0x64,0x20,0x54,0x69,0x6D,0x65,0x00}; 236359d709d503bab6e2b61931737e662dd293b40578ccornelius 236459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const UChar tzNewYork[] = /* America/New_York */ 236559d709d503bab6e2b61931737e662dd293b40578ccornelius {0x41,0x6D,0x65,0x72,0x69,0x63,0x61,0x2F,0x4E,0x65,0x77,0x5F,0x59,0x6F,0x72,0x6B,0x00}; 236659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const UChar tzTronto[] = /* America/Toronto */ 236759d709d503bab6e2b61931737e662dd293b40578ccornelius {0x41,0x6D,0x65,0x72,0x69,0x63,0x61,0x2F,0x54,0x6F,0x72,0x6F,0x6E,0x74,0x6F,0x00}; 236859d709d503bab6e2b61931737e662dd293b40578ccornelius 236959d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic const UChar sBogus[] = /* Bogus */ 237059d709d503bab6e2b61931737e662dd293b40578ccornelius {0x42,0x6F,0x67,0x75,0x73,0x00}; 237159d709d503bab6e2b61931737e662dd293b40578ccornelius 237259d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid TestGetWindowsTimeZoneID() { 237359d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status; 237459d709d503bab6e2b61931737e662dd293b40578ccornelius UChar winID[64]; 237559d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 237659d709d503bab6e2b61931737e662dd293b40578ccornelius 237759d709d503bab6e2b61931737e662dd293b40578ccornelius { 237859d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 237959d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getWindowsTimeZoneID(tzNewYork, u_strlen(tzNewYork), winID, sizeof(winID)/sizeof(winID[0]), &status); 238059d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 238159d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for America/New_York, status %s\n", u_errorName(status)); 238259d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != u_strlen(winEastern) || u_strncmp(winID, winEastern, len) != 0) { 238359d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for America/New_York\n"); 238459d709d503bab6e2b61931737e662dd293b40578ccornelius } 238559d709d503bab6e2b61931737e662dd293b40578ccornelius } 238659d709d503bab6e2b61931737e662dd293b40578ccornelius { 238759d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 238859d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getWindowsTimeZoneID(tzTronto, u_strlen(tzTronto), winID, sizeof(winID)/sizeof(winID[0]), &status); 238959d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 239059d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for America/Toronto, status %s\n", u_errorName(status)); 239159d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != u_strlen(winEastern) || u_strncmp(winID, winEastern, len) != 0) { 239259d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for America/Toronto\n"); 239359d709d503bab6e2b61931737e662dd293b40578ccornelius } 239459d709d503bab6e2b61931737e662dd293b40578ccornelius } 239559d709d503bab6e2b61931737e662dd293b40578ccornelius { 239659d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 239759d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getWindowsTimeZoneID(sBogus, u_strlen(sBogus), winID, sizeof(winID)/sizeof(winID[0]), &status); 239859d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 239959d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for Bogus, status %s\n", u_errorName(status)); 240059d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != 0) { 240159d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: Windows ID for Bogus\n"); 240259d709d503bab6e2b61931737e662dd293b40578ccornelius } 240359d709d503bab6e2b61931737e662dd293b40578ccornelius } 240459d709d503bab6e2b61931737e662dd293b40578ccornelius} 240559d709d503bab6e2b61931737e662dd293b40578ccornelius 240659d709d503bab6e2b61931737e662dd293b40578ccorneliusvoid TestGetTimeZoneIDByWindowsID() { 240759d709d503bab6e2b61931737e662dd293b40578ccornelius UErrorCode status; 240859d709d503bab6e2b61931737e662dd293b40578ccornelius UChar tzID[64]; 240959d709d503bab6e2b61931737e662dd293b40578ccornelius int32_t len; 241059d709d503bab6e2b61931737e662dd293b40578ccornelius 241159d709d503bab6e2b61931737e662dd293b40578ccornelius { 241259d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 241359d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getTimeZoneIDForWindowsID(winEastern, -1, NULL, tzID, sizeof(tzID)/sizeof(tzID[0]), &status); 241459d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 241559d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: TZ ID for Eastern Standard Time, status %s\n", u_errorName(status)); 241659d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != u_strlen(tzNewYork) || u_strncmp(tzID, tzNewYork, len) != 0) { 241759d709d503bab6e2b61931737e662dd293b40578ccornelius log_err("FAIL: TZ ID for Eastern Standard Time\n"); 241859d709d503bab6e2b61931737e662dd293b40578ccornelius } 241959d709d503bab6e2b61931737e662dd293b40578ccornelius } 242059d709d503bab6e2b61931737e662dd293b40578ccornelius { 242159d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 242259d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getTimeZoneIDForWindowsID(winEastern, u_strlen(winEastern), "US", tzID, sizeof(tzID)/sizeof(tzID[0]), &status); 242359d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 242459d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: TZ ID for Eastern Standard Time - US, status %s\n", u_errorName(status)); 242559d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != u_strlen(tzNewYork) || u_strncmp(tzID, tzNewYork, len) != 0) { 242659d709d503bab6e2b61931737e662dd293b40578ccornelius log_err("FAIL: TZ ID for Eastern Standard Time - US\n"); 242759d709d503bab6e2b61931737e662dd293b40578ccornelius } 242859d709d503bab6e2b61931737e662dd293b40578ccornelius } 242959d709d503bab6e2b61931737e662dd293b40578ccornelius { 243059d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 243159d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getTimeZoneIDForWindowsID(winEastern, u_strlen(winEastern), "CA", tzID, sizeof(tzID)/sizeof(tzID[0]), &status); 243259d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 243359d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: TZ ID for Eastern Standard Time - CA, status %s\n", u_errorName(status)); 243459d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != u_strlen(tzTronto) || u_strncmp(tzID, tzTronto, len) != 0) { 243559d709d503bab6e2b61931737e662dd293b40578ccornelius log_err("FAIL: TZ ID for Eastern Standard Time - CA\n"); 243659d709d503bab6e2b61931737e662dd293b40578ccornelius } 243759d709d503bab6e2b61931737e662dd293b40578ccornelius } 243859d709d503bab6e2b61931737e662dd293b40578ccornelius 243959d709d503bab6e2b61931737e662dd293b40578ccornelius { 244059d709d503bab6e2b61931737e662dd293b40578ccornelius status = U_ZERO_ERROR; 244159d709d503bab6e2b61931737e662dd293b40578ccornelius len = ucal_getTimeZoneIDForWindowsID(sBogus, -1, NULL, tzID, sizeof(tzID)/sizeof(tzID[0]), &status); 244259d709d503bab6e2b61931737e662dd293b40578ccornelius if (U_FAILURE(status)) { 244359d709d503bab6e2b61931737e662dd293b40578ccornelius log_data_err("FAIL: TZ ID for Bogus, status %s\n", u_errorName(status)); 244459d709d503bab6e2b61931737e662dd293b40578ccornelius } else if (len != 0) { 244559d709d503bab6e2b61931737e662dd293b40578ccornelius log_err("FAIL: TZ ID for Bogus\n"); 244659d709d503bab6e2b61931737e662dd293b40578ccornelius } 244759d709d503bab6e2b61931737e662dd293b40578ccornelius } 244859d709d503bab6e2b61931737e662dd293b40578ccornelius} 244959d709d503bab6e2b61931737e662dd293b40578ccornelius 245059d709d503bab6e2b61931737e662dd293b40578ccornelius 2451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 2452