| Index: source/test/intltest/dadrfmt.cpp
|
| diff --git a/source/test/intltest/dadrfmt.cpp b/source/test/intltest/dadrfmt.cpp
|
| deleted file mode 100644
|
| index c99e599ee7017436673cef83c6207242dc4a0916..0000000000000000000000000000000000000000
|
| --- a/source/test/intltest/dadrfmt.cpp
|
| +++ /dev/null
|
| @@ -1,362 +0,0 @@
|
| -/********************************************************************
|
| - * COPYRIGHT:
|
| - * Copyright (c) 1997-2013 International Business Machines Corporation and
|
| - * others. All Rights Reserved.
|
| - ********************************************************************/
|
| -
|
| -/***********************************************************************
|
| - * Modification history
|
| - * Date Name Description
|
| - * 07/09/2007 srl Copied from dadrcoll.cpp
|
| - ***********************************************************************/
|
| -
|
| -#include "unicode/utypes.h"
|
| -
|
| -#if !UCONFIG_NO_FORMATTING
|
| -
|
| -#include "unicode/tstdtmod.h"
|
| -#include "tsdate.h"
|
| -#include "dadrfmt.h"
|
| -#include "unicode/calendar.h"
|
| -#include "intltest.h"
|
| -#include <string.h>
|
| -#include "unicode/schriter.h"
|
| -#include "unicode/regex.h"
|
| -#include "unicode/smpdtfmt.h"
|
| -#include "dbgutil.h"
|
| -#include "fldset.h"
|
| -
|
| -
|
| -#include <stdio.h>
|
| -
|
| -DataDrivenFormatTest::DataDrivenFormatTest() {
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - driver = TestDataModule::getTestDataModule("format", *this, status);
|
| -}
|
| -
|
| -DataDrivenFormatTest::~DataDrivenFormatTest() {
|
| - delete driver;
|
| -}
|
| -
|
| -void DataDrivenFormatTest::runIndexedTest(int32_t index, UBool exec,
|
| - const char* &name, char* /*par */) {
|
| - if (driver != NULL) {
|
| - if (exec) {
|
| - // logln("Begin ");
|
| - }
|
| - const DataMap *info= NULL;
|
| - UErrorCode status= U_ZERO_ERROR;
|
| - TestData *testData = driver->createTestData(index, status);
|
| - if (U_SUCCESS(status)) {
|
| - name = testData->getName();
|
| - if (testData->getInfo(info, status)) {
|
| - log(info->getString("Description", status));
|
| - }
|
| - if (exec) {
|
| - log(name);
|
| - logln("---");
|
| - logln("");
|
| -
|
| - processTest(testData);
|
| - }
|
| - delete testData;
|
| - } else {
|
| - name = "";
|
| - }
|
| - } else {
|
| - dataerrln("format/DataDriven*Test data (format.res) not initialized!");
|
| - name = "";
|
| - }
|
| -
|
| -}
|
| -
|
| -
|
| -
|
| -/*
|
| - * Headers { "locale", "zone", "spec", "date", "str"}
|
| - // locale: locale including calendar type
|
| - // zone: time zone name, or "" to not explicitly set zone
|
| - // spec: either 'PATTERN=y mm h' etc, or 'DATE=SHORT,TIME=LONG'
|
| - // date: either an unsigned long (millis), or a calendar spec ERA=0,YEAR=1, etc.. applied to the calendar type specified by the locale
|
| - // str: the expected unicode string
|
| - Cases {
|
| - {
|
| - "en_US@calendar=gregorian",
|
| - "",
|
| - "DATE=SHORT,TIME=SHORT",
|
| - "ERA=1,YEAR=2007,MONTH=AUGUST,DATE=8,HOUR=18,MINUTE=54,SECOND=12",
|
| - "8/8/2007 6:54pm"
|
| - },
|
| - * */
|
| -
|
| -
|
| -void DataDrivenFormatTest::testConvertDate(TestData *testData,
|
| - const DataMap * /* settings */, UBool fmt) {
|
| - UnicodeString kPATTERN("PATTERN="); // TODO: static
|
| - UnicodeString kMILLIS("MILLIS="); // TODO: static
|
| - UnicodeString kRELATIVE_MILLIS("RELATIVE_MILLIS="); // TODO: static
|
| - UnicodeString kRELATIVE_ADD("RELATIVE_ADD:"); // TODO: static
|
| -
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - SimpleDateFormat basicFmt(UnicodeString("EEE MMM dd yyyy / YYYY'-W'ww-ee"),
|
| - status);
|
| - if (U_FAILURE(status)) {
|
| - dataerrln("FAIL: Couldn't create basic SimpleDateFormat: %s",
|
| - u_errorName(status));
|
| - return;
|
| - }
|
| -
|
| - const DataMap *currentCase= NULL;
|
| - // Start the processing
|
| - int n = 0;
|
| - while (testData->nextCase(currentCase, status)) {
|
| - char calLoc[256] = "";
|
| - DateTimeStyleSet styleSet;
|
| - UnicodeString pattern;
|
| - UBool usePattern = FALSE;
|
| - (void)usePattern; // Suppress unused warning.
|
| - CalendarFieldsSet fromSet;
|
| - UDate fromDate = 0;
|
| - UBool useDate = FALSE;
|
| -
|
| - UDate now = Calendar::getNow();
|
| -
|
| - ++n;
|
| -
|
| - char theCase[200];
|
| - sprintf(theCase, "case %d:", n);
|
| - UnicodeString caseString(theCase, "");
|
| -
|
| - // load params
|
| - UnicodeString locale = currentCase->getString("locale", status);
|
| - if (U_FAILURE(status)) {
|
| - errln("case %d: No 'locale' line.", n);
|
| - continue;
|
| - }
|
| - UnicodeString zone = currentCase->getString("zone", status);
|
| - if (U_FAILURE(status)) {
|
| - errln("case %d: No 'zone' line.", n);
|
| - continue;
|
| - }
|
| - UnicodeString spec = currentCase->getString("spec", status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: No 'spec' line.", n);
|
| - continue;
|
| - }
|
| - UnicodeString date = currentCase->getString("date", status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: No 'date' line.", n);
|
| - continue;
|
| - }
|
| - UnicodeString expectStr= currentCase->getString("str", status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: No 'str' line.", n);
|
| - continue;
|
| - }
|
| -
|
| - DateFormat *format = NULL;
|
| -
|
| - // Process: 'locale'
|
| - locale.extract(0, locale.length(), calLoc, (const char*)0); // default codepage. Invariant codepage doesn't have '@'!
|
| - Locale loc(calLoc);
|
| - if(spec.startsWith(kPATTERN)) {
|
| - pattern = UnicodeString(spec,kPATTERN.length());
|
| - usePattern = TRUE;
|
| - format = new SimpleDateFormat(pattern, loc, status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: could not create SimpleDateFormat from pattern: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| - } else {
|
| - if(styleSet.parseFrom(spec, status)<0 || U_FAILURE(status)) {
|
| - errln("case %d: could not parse spec as style fields: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| - format = DateFormat::createDateTimeInstance((DateFormat::EStyle)styleSet.getDateStyle(), (DateFormat::EStyle)styleSet.getTimeStyle(), loc);
|
| - if(format == NULL ) {
|
| - errln("case %d: could not create SimpleDateFormat from styles.", n);
|
| - continue;
|
| - }
|
| - }
|
| -
|
| - Calendar *cal = Calendar::createInstance(loc, status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: could not create calendar from %s", n, calLoc);
|
| - }
|
| -
|
| - if (zone.length() > 0) {
|
| - TimeZone * tz = TimeZone::createTimeZone(zone);
|
| - cal->setTimeZone(*tz);
|
| - format->setTimeZone(*tz);
|
| - delete tz;
|
| - }
|
| -
|
| - // parse 'date'
|
| - if(date.startsWith(kMILLIS)) {
|
| - UnicodeString millis = UnicodeString(date, kMILLIS.length());
|
| - useDate = TRUE;
|
| - fromDate = udbg_stod(millis);
|
| - } else if(date.startsWith(kRELATIVE_MILLIS)) {
|
| - UnicodeString millis = UnicodeString(date, kRELATIVE_MILLIS.length());
|
| - useDate = TRUE;
|
| - fromDate = udbg_stod(millis) + now;
|
| - } else if(date.startsWith(kRELATIVE_ADD)) {
|
| - UnicodeString add = UnicodeString(date, kRELATIVE_ADD.length()); // "add" is a string indicating which fields to add
|
| - if(fromSet.parseFrom(add, status)<0 || U_FAILURE(status)) {
|
| - errln("case %d: could not parse date as RELATIVE_ADD calendar fields: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| - useDate=TRUE;
|
| - cal->clear();
|
| - cal->setTime(now, status);
|
| - for (int q=0; q<UCAL_FIELD_COUNT; q++) {
|
| - if (fromSet.isSet((UCalendarDateFields)q)) {
|
| - //int32_t oldv = cal->get((UCalendarDateFields)q, status);
|
| - if (q == UCAL_DATE) {
|
| - cal->add((UCalendarDateFields)q,
|
| - fromSet.get((UCalendarDateFields)q), status);
|
| - } else {
|
| - cal->set((UCalendarDateFields)q,
|
| - fromSet.get((UCalendarDateFields)q));
|
| - }
|
| - //int32_t newv = cal->get((UCalendarDateFields)q, status);
|
| - }
|
| - }
|
| - fromDate = cal->getTime(status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: could not apply date as RELATIVE_ADD calendar fields: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| - } else if(fromSet.parseFrom(date, status)<0 || U_FAILURE(status)) {
|
| - errln("case %d: could not parse date as calendar fields: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| -
|
| - // now, do it.
|
| - if (fmt) {
|
| - FieldPosition pos;
|
| -// logln((UnicodeString)"#"+n+" "+locale+"/"+from+" >>> "+toCalLoc+"/"
|
| -// +to);
|
| - cal->clear();
|
| - UnicodeString output;
|
| - output.remove();
|
| -
|
| - if(useDate) {
|
| -// cal->setTime(fromDate, status);
|
| -// if(U_FAILURE(status)) {
|
| -// errln("case %d: could not set time on calendar: %s", n, u_errorName(status));
|
| -// continue;
|
| -// }
|
| - format->format(fromDate, output, pos, status);
|
| - } else {
|
| - fromSet.setOnCalendar(cal, status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: could not set fields on calendar: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| - format->format(*cal, output, pos);
|
| - }
|
| -
|
| - // check erro result from 'format'
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: could not format(): %s", n, u_errorName(status)); // TODO: use 'pos'
|
| - }
|
| -// if(pos.getBeginIndex()==0 && pos.getEndIndex()==0) { // TODO: more precise error?
|
| -// errln("WARNING: case %d: format's pos returned (0,0) - error ??", n);
|
| -// }
|
| -
|
| - if(output == expectStr) {
|
| - logln(caseString+": format: SUCCESS! "+UnicodeString("expect=output=")+output);
|
| - } else {
|
| - UnicodeString result;
|
| - UnicodeString result2;
|
| - errln(caseString+": format: output!=expectStr, got " + *udbg_escape(output, &result) + " expected " + *udbg_escape(expectStr, &result2));
|
| - }
|
| - } else {
|
| - cal->clear();
|
| - ParsePosition pos;
|
| - format->parse(expectStr,*cal,pos);
|
| - if(useDate) {
|
| - UDate gotDate = cal->getTime(status);
|
| - if(U_FAILURE(status)) {
|
| - errln(caseString+": parse: could not get time on calendar: "+UnicodeString(u_errorName(status)));
|
| - continue;
|
| - }
|
| - if(gotDate == fromDate) {
|
| - logln(caseString+": parse: SUCCESS! "+UnicodeString("gotDate=parseDate=")+expectStr);
|
| - } else {
|
| - UnicodeString expectDateStr, gotDateStr;
|
| - basicFmt.format(fromDate,expectDateStr);
|
| - basicFmt.format(gotDate,gotDateStr);
|
| - errln(caseString+": parse: FAIL. parsed '"+expectStr+"' and got "+gotDateStr+", expected " + expectDateStr);
|
| - }
|
| - } else {
|
| -// Calendar *cal2 = cal->clone();
|
| -// cal2->clear();
|
| -// fromSet.setOnCalendar(cal2, status);
|
| - if(U_FAILURE(status)) {
|
| - errln("case %d: parse: could not set fields on calendar: %s", n, u_errorName(status));
|
| - continue;
|
| - }
|
| -
|
| - CalendarFieldsSet diffSet;
|
| -// diffSet.clear();
|
| - if (!fromSet.matches(cal, diffSet, status)) {
|
| - UnicodeString diffs = diffSet.diffFrom(fromSet, status);
|
| - errln((UnicodeString)"FAIL: "+caseString
|
| - +", Differences: '"+ diffs
|
| - +"', status: "+ u_errorName(status));
|
| - } else if (U_FAILURE(status)) {
|
| - errln("FAIL: "+caseString+" parse SET SOURCE calendar Failed to match: "
|
| - +u_errorName(status));
|
| - } else {
|
| - logln("PASS: "+caseString+" parse.");
|
| - }
|
| -
|
| -
|
| -
|
| - }
|
| - }
|
| - delete cal;
|
| - delete format;
|
| -
|
| - }
|
| -// delete basicFmt;
|
| -}
|
| -
|
| -void DataDrivenFormatTest::processTest(TestData *testData) {
|
| - //Format *cal= NULL;
|
| - //const UChar *arguments= NULL;
|
| - //int32_t argLen = 0;
|
| - char testType[256];
|
| - const DataMap *settings= NULL;
|
| - //const UChar *type= NULL;
|
| - UErrorCode status = U_ZERO_ERROR;
|
| - UnicodeString testSetting;
|
| - int n = 0;
|
| - while (testData->nextSettings(settings, status)) {
|
| - status = U_ZERO_ERROR;
|
| - // try to get a locale
|
| - testSetting = settings->getString("Type", status);
|
| - if (U_SUCCESS(status)) {
|
| - if ((++n)>0) {
|
| - logln("---");
|
| - }
|
| - logln(testSetting + "---");
|
| - testSetting.extract(0, testSetting.length(), testType, "");
|
| - } else {
|
| - errln("Unable to extract 'Type'. Skipping..");
|
| - continue;
|
| - }
|
| -
|
| - if (!strcmp(testType, "date_format")) {
|
| - testConvertDate(testData, settings, true);
|
| - } else if (!strcmp(testType, "date_parse")) {
|
| - testConvertDate(testData, settings, false);
|
| - } else {
|
| - errln("Unknown type: %s", testType);
|
| - }
|
| - }
|
| -}
|
| -
|
| -#endif
|
|
|