1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/******************************************************************** 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * COPYRIGHT: 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Copyright (c) 1997-2010, International Business Machines Corporation and 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ********************************************************************/ 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*********************************************************************** 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Modification history 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date Name Description 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 07/09/2007 srl Copied from dadrcoll.cpp 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ***********************************************************************/ 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/tstdtmod.h" 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "tsdate.h" 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "dadrcal.h" 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/calendar.h" 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "intltest.h" 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <string.h> 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/schriter.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/regex.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/smpdtfmt.h" 2627f654740f2a26ad62a5c155af9199af9e69b889claireho#include "dbgutil.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include <stdio.h> 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDataDrivenCalendarTest::DataDrivenCalendarTest() { 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru driver = TestDataModule::getTestDataModule("calendar", *this, status); 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruDataDrivenCalendarTest::~DataDrivenCalendarTest() { 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete driver; 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DataDrivenCalendarTest::runIndexedTest(int32_t index, UBool exec, 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char* &name, char* /*par */) { 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (driver != NULL) { 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // logln("Begin "); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *info= NULL; 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status= U_ZERO_ERROR; 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TestData *testData = driver->createTestData(index, status); 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = testData->getName(); 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (testData->getInfo(info, status)) { 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(info->getString("Description", status)); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (exec) { 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru log(name); 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("---"); 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(""); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru processTest(testData); 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete testData; 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = ""; 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru dataerrln("format/DataDriven*Test data (calendar.res) not initialized!"); 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru name = ""; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DataDrivenCalendarTest::testOps(TestData *testData, 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap * /*settings*/) { 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 74b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool useDate = FALSE; // TODO 75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString kMILLIS("MILLIS="); // TODO: static 76b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate fromDate = 0; // TODO 77b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UDate toDate = 0; 78b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *currentCase= NULL; 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char toCalLoc[256] = ""; 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // TODO: static strings? 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString kADD("add", ""); 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString kROLL("roll", ""); 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Get 'from' time 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CalendarFieldsSet fromSet, toSet, paramsSet, diffSet; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 9150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln("FAIL: Couldn't create SimpleDateFormat: %s", 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Start the processing 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int n = 0; 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (testData->nextCase(currentCase, status)) { 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++n; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *toCalendar= NULL; 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *fromCalendar= NULL; 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // load parameters 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char theCase[200]; 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sprintf(theCase, "[case %d]", n); 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString caseString(theCase, ""); 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // build to calendar 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Headers { "locale","from","operation","params","to" } 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // #1 locale 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const char *param = "locale"; 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString locale; 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testSetting = currentCase->getString(param, status); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to get param '"+param+"' " 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(" - ")); 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testSetting.extract(0, testSetting.length(), toCalLoc, (const char*)0); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromCalendar = Calendar::createInstance(toCalLoc, status); 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to instantiate calendar for " 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +testSetting); 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromSet.clear(); 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // #2 'from' info 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru param = "from"; 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString from = testSetting=currentCase->getString(param, status); 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to get parameter '"+param+"' " 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(" - ")); 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 134b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 135b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(from.startsWith(kMILLIS)){ 136b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString millis = UnicodeString(from, kMILLIS.length()); 137b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru useDate = TRUE; 138b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fromDate = udbg_stod(millis); 139b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if(fromSet.parseFrom(testSetting, status)<0 || U_FAILURE(status)){ 140b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(caseString+": Failed to parse '"+param+"' parameter: " 141b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru +testSetting); 142b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru continue; 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 144b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // #4 'operation' info 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru param = "operation"; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString operation = testSetting=currentCase->getString(param, 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to get parameter '"+param+"' " 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(" - ")); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Failed to parse '"+param+"' parameter: " 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +testSetting); 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru paramsSet.clear(); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // #3 'params' info 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru param = "params"; 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString params = testSetting 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru =currentCase->getString(param, status); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to get parameter '"+param+"' " 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(" - ")); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru paramsSet.parseFrom(testSetting, status); // parse with inheritance. 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Failed to parse '"+param+"' parameter: " 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +testSetting); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toSet.clear(); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // #4 'to' info 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru param = "to"; 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString to = testSetting=currentCase->getString(param, status); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Unable to get parameter '"+param+"' " 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + UnicodeString(" - ")); 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 186b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(to.startsWith(kMILLIS)){ 187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString millis = UnicodeString(to, kMILLIS.length()); 188b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru useDate = TRUE; 189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru toDate = udbg_stod(millis); 190b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if(toSet.parseFrom(testSetting, &fromSet, status)<0 || U_FAILURE(status)){ 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+": Failed to parse '"+param+"' parameter: " 192b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru +testSetting); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 195b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString caseContentsString = locale+": from "+from+": " 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +operation +" [[[ "+params+" ]]] >>> "+to; 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(caseString+": "+caseContentsString); 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // ------ 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now, do it. 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /// prepare calendar 204b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(useDate){ 205b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fromCalendar->setTime(fromDate, status); 206b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 207b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(caseString+" FAIL: Failed to set time on Source calendar: " 208b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru + u_errorName(status)); 209b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 210b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 211b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else { 212b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru fromSet.setOnCalendar(fromCalendar, status); 213b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if (U_FAILURE(status)) { 214b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln(caseString+" FAIL: Failed to set on Source calendar: " 215b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru + u_errorName(status)); 216b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru return; 217b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru diffSet.clear(); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Is the calendar sane after being set? 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!fromSet.matches(fromCalendar, diffSet, status)) { 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString diffs = diffSet.diffFrom(fromSet, status); 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: "+caseString 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +", SET SOURCE calendar was not set: Differences: "+ diffs 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +"', status: "+ u_errorName(status)); 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (U_FAILURE(status)) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: "+caseString+" SET SOURCE calendar Failed to match: " 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +u_errorName(status)); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: "+caseString+" SET SOURCE calendar match."); 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // to calendar - copy of from calendar 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar = fromCalendar->clone(); 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /// perform op 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (int q=0; q<UCAL_FIELD_COUNT; q++) { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (paramsSet.isSet((UCalendarDateFields)q)) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (operation == kROLL) { 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar->roll((UCalendarDateFields)q, 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru paramsSet.get((UCalendarDateFields)q), status); 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (operation == kADD) { 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar->add((UCalendarDateFields)q, 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru paramsSet.get((UCalendarDateFields)q), status); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+ " FAIL: unknown operation "+ operation); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(operation + " of "+ paramsSet.get((UCalendarDateFields)q) 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +" -> "+u_errorName(status)); 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln(caseString+" FAIL: after "+operation+" of "+params+" -> " 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +u_errorName(status)); 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now - what's the result? 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru diffSet.clear(); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(useDate){ 263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru if(!(toCalendar->getTime(status)==toDate) || U_FAILURE(status)){ 264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru errln("FAIL: "+caseString+" Match operation had an error: " 265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru +u_errorName(status)); 266b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }else{ 267b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln(caseString + " SUCCESS: got=expected="+toDate); 268b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru logln("PASS: "+caseString+" matched!"); 269b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } 270b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } else if (!toSet.matches(toCalendar, diffSet, status)) { 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString diffs = diffSet.diffFrom(toSet, status); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: "+caseString+" - , "+caseContentsString 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +" Differences: "+ diffs +"', status: " 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru + u_errorName(status)); 275b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }else if (U_FAILURE(status)) { 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: "+caseString+" Match operation had an error: " 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +u_errorName(status)); 278b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }else { 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: "+caseString+" matched!"); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fromCalendar; 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete toCalendar; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DataDrivenCalendarTest::testConvert(int32_t n, 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const CalendarFieldsSet &fromSet, Calendar *fromCalendar, 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const CalendarFieldsSet &toSet, Calendar *toCalendar, UBool forward) { 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString thisString = (UnicodeString)"#"+n+" "+(forward ? "forward" 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru : "reverse")+" "+fromCalendar->getType()+"->"+toCalendar->getType(); 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromCalendar->clear(); 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromSet.setOnCalendar(fromCalendar, status); 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Failed to set on Source calendar: %s", u_errorName(status)); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CalendarFieldsSet diffSet; 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru diffSet.clear(); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Is the calendar sane at the first? 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!fromSet.matches(fromCalendar, diffSet, status)) { 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString diffs = diffSet.diffFrom(fromSet, status); 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: "+thisString 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +", SOURCE calendar was not set: Differences: "+ diffs 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +"', status: "+ u_errorName(status)); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (U_FAILURE(status)) { 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: "+thisString+" SOURCE calendar Failed to match: " 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +u_errorName(status)); 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: "+thisString+" SOURCE calendar match."); 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //logln("Set Source calendar: " + from); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate fromTime = fromCalendar->getTime(status); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Failed to get Source time: %s", u_errorName(status)); 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru diffSet.clear(); 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Is the calendar sane after being set? 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!fromSet.matches(fromCalendar, diffSet, status)) { 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString diffs = diffSet.diffFrom(fromSet, status); 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: "+thisString 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +", SET SOURCE calendar was not set: Differences: "+ diffs 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +"', status: "+ u_errorName(status)); 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (U_FAILURE(status)) { 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: "+thisString+" SET SOURCE calendar Failed to match: " 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +u_errorName(status)); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: "+thisString+" SET SOURCE calendar match."); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar->clear(); 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar->setTime(fromTime, status); 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: Failed to set Target time: %s", u_errorName(status)); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru diffSet.clear(); 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!toSet.matches(toCalendar, diffSet, status)) { 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString diffs = diffSet.diffFrom(toSet, status); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln((UnicodeString)"FAIL: "+thisString+", Differences: "+ diffs 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +"', status: "+ u_errorName(status)); 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy G"), status); 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fromString; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fmt.format(fromTime, fromString); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("Source Time: "+fromString+", Source Calendar: " 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +fromCalendar->getType()); 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (U_FAILURE(status)) { 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("FAIL: "+thisString+" Failed to match: "+u_errorName(status)); 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("PASS: "+thisString+" match."); 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DataDrivenCalendarTest::testConvert(TestData *testData, 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *settings, UBool forward) { 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *toCalendar= NULL; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *currentCase= NULL; 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char toCalLoc[256] = ""; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char fromCalLoc[256] = ""; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // build to calendar 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testSetting = settings->getString("ToCalendar", status); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testSetting.extract(0, testSetting.length(), toCalLoc, (const char*)0); 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toCalendar = Calendar::createInstance(toCalLoc, status); 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 37750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho dataerrln(UnicodeString("Unable to instantiate ToCalendar for ")+testSetting); 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru CalendarFieldsSet fromSet, toSet, diffSet; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat fmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"), 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status); 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 3866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru errcheckln(status, "FAIL: Couldn't create SimpleDateFormat: %s", 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_errorName(status)); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Start the processing 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int n = 0; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (testData->nextCase(currentCase, status)) { 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++n; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *fromCalendar= NULL; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString locale = currentCase->getString("locale", status); 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru locale.extract(0, locale.length(), fromCalLoc, (const char*)0); // default codepage. Invariant codepage doesn't have '@'! 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromCalendar = Calendar::createInstance(fromCalLoc, status); 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Unable to instantiate fromCalendar for "+locale); 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("No 'locale' line."); 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromSet.clear(); 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toSet.clear(); 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString from = currentCase->getString("from", status); 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("No 'from' line."); 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fromSet.parseFrom(from, status); 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed to parse 'from' parameter: "+from); 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString to = currentCase->getString("to", status); 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("No 'to' line."); 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru toSet.parseFrom(to, &fromSet, status); 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(status)) { 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Failed to parse 'to' parameter: "+to); 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // now, do it. 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (forward) { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"#"+n+" "+locale+"/"+from+" >>> "+toCalLoc+"/" 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +to); 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testConvert(n, fromSet, fromCalendar, toSet, toCalendar, forward); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln((UnicodeString)"#"+n+" "+locale+"/"+from+" <<< "+toCalLoc+"/" 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru +to); 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testConvert(n, toSet, toCalendar, fromSet, fromCalendar, forward); 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete fromCalendar; 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete toCalendar; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruvoid DataDrivenCalendarTest::processTest(TestData *testData) { 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //Calendar *cal= NULL; 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const UChar *arguments= NULL; 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //int32_t argLen = 0; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru char testType[256]; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DataMap *settings= NULL; 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru //const UChar *type= NULL; 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode status = U_ZERO_ERROR; 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString testSetting; 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int n = 0; 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while (testData->nextSettings(settings, status)) { 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru status = U_ZERO_ERROR; 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // try to get a locale 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testSetting = settings->getString("Type", status); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_SUCCESS(status)) { 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if ((++n)>0) { 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln("---"); 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru logln(testSetting + "---"); 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testSetting.extract(0, testSetting.length(), testType, ""); 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Unable to extract 'Type'. Skipping.."); 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru continue; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (!strcmp(testType, "convert_fwd")) { 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testConvert(testData, settings, true); 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (!strcmp(testType, "convert_rev")) { 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testConvert(testData, settings, false); 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (!strcmp(testType, "ops")) { 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru testOps(testData, settings); 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru errln("Unknown type: %s", testType); 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif 486