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