| Index: source/test/intltest/dtfmrgts.cpp
|
| diff --git a/source/test/intltest/dtfmrgts.cpp b/source/test/intltest/dtfmrgts.cpp
|
| index a72976fe92aa3264459661afa45304bce2503b11..61106fcb471f4b683b1084684797e02f3ab25ad3 100644
|
| --- a/source/test/intltest/dtfmrgts.cpp
|
| +++ b/source/test/intltest/dtfmrgts.cpp
|
| @@ -1,13 +1,12 @@
|
| /********************************************************************
|
| * COPYRIGHT:
|
| - * Copyright (c) 1997-2012, International Business Machines Corporation and
|
| + * Copyright (c) 1997-2014, International Business Machines Corporation and
|
| * others. All Rights Reserved.
|
| ********************************************************************/
|
|
|
| #include "unicode/utypes.h"
|
|
|
| #if !UCONFIG_NO_FORMATTING
|
| -
|
| #include "dtfmrgts.h"
|
|
|
| #include "unicode/timezone.h"
|
| @@ -57,6 +56,10 @@ DateFormatRegressionTest::runIndexedTest( int32_t index, UBool exec, const char*
|
| CASE(26,Test5554)
|
| CASE(27,Test9237)
|
| CASE(28,TestParsing)
|
| + CASE(29,TestT10334)
|
| + CASE(30,TestT10619)
|
| + CASE(31,TestT10855)
|
| + CASE(32,TestT10906)
|
| default: name = ""; break;
|
| }
|
| }
|
| @@ -84,6 +87,7 @@ void DateFormatRegressionTest::Test4029195(void)
|
| pat = sdf->toPattern(pat);
|
| logln("pattern: " + pat);
|
| UnicodeString fmtd;
|
| +
|
| FieldPosition pos(FieldPosition::DONT_CARE);
|
| fmtd = sdf->format(today, fmtd, pos);
|
| logln("today: " + fmtd);
|
| @@ -1525,6 +1529,198 @@ void DateFormatRegressionTest::TestParsing(void) {
|
| delete cal;
|
| }
|
|
|
| +void DateFormatRegressionTest::TestT10334(void) {
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + UnicodeString pattern("--: EEE-WW-MMMM-yyyy");
|
| + UnicodeString text("--mon-02-march-2011");
|
| + SimpleDateFormat format(pattern, status);
|
| +
|
| + logln("pattern["+pattern+"] text["+text+"]");
|
| +
|
| + if (U_FAILURE(status)) {
|
| + dataerrln("Fail creating SimpleDateFormat object - %s", u_errorName(status));
|
| + return;
|
| + }
|
| +
|
| + format.setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, FALSE, status);
|
| + format.parse(text, status);
|
| + if (!U_FAILURE(status)) {
|
| + errln("parse partial match did NOT fail in strict mode - %s", u_errorName(status));
|
| + }
|
| +
|
| + status = U_ZERO_ERROR;
|
| + format.setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, TRUE, status);
|
| + format.parse(text, status);
|
| + if (U_FAILURE(status)) {
|
| + errln("parse partial match failure in lenient mode - %s", u_errorName(status));
|
| + }
|
| +
|
| + status = U_ZERO_ERROR;
|
| + pattern = UnicodeString("YYYY MM dd");
|
| + text = UnicodeString("2013 12 10");
|
| + format.applyPattern(pattern);
|
| + UDate referenceDate = format.parse(text, status);
|
| +
|
| + FieldPosition fp(0);
|
| + UnicodeString formattedString("");
|
| + pattern = UnicodeString("YYYY LL dd ee cc qq QQ");
|
| + format.applyPattern(pattern);
|
| + format.format(referenceDate, formattedString, fp, status);
|
| + logln("ref date: " + formattedString);
|
| +
|
| +
|
| + char patternArray[] = "YYYY LLL dd eee ccc qqq QQQ";
|
| + pattern = UnicodeString(patternArray);
|
| + text = UnicodeString("2013 12 10 03 3 04 04");
|
| + status = U_ZERO_ERROR;
|
| + format.setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, TRUE, status);
|
| + format.applyPattern(pattern);
|
| + ParsePosition pp(0);
|
| + format.parse(text, pp);
|
| + if (pp.getErrorIndex() != -1) {
|
| + errln("numeric parse error");
|
| + }
|
| +
|
| + status = U_ZERO_ERROR;
|
| + format.setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, FALSE, status);
|
| + format.parse(text, status);
|
| + if (!U_FAILURE(status)) {
|
| + errln("numeric parse did NOT fail in strict mode", u_errorName(status));
|
| + }
|
| +
|
| +}
|
| +
|
| +
|
| +typedef struct {
|
| + const char * locale;
|
| + UBool leniency;
|
| + UnicodeString parseString;
|
| + UnicodeString pattern;
|
| + UnicodeString expectedResult; // null indicates expected error
|
| +} TestDateFormatLeniencyItem;
|
| +
|
| +
|
| +void DateFormatRegressionTest::TestT10619(void) {
|
| + const UDate july022008 = 1215000001979.0;
|
| + const TestDateFormatLeniencyItem items[] = {
|
| + //locale leniency parse String pattern expected result
|
| + { "en", true, UnicodeString("2008-07 02"), UnicodeString("yyyy-LLLL dd"), UnicodeString("2008-July 02") },
|
| + { "en", false, UnicodeString("2008-07 03"), UnicodeString("yyyy-LLLL dd"), UnicodeString("") },
|
| + { "en", true, UnicodeString("2008-Jan. 04"), UnicodeString("yyyy-LLL dd"), UnicodeString("2008-Jan 04") },
|
| + { "en", false, UnicodeString("2008-Jan. 05"), UnicodeString("yyyy-LLL dd"), UnicodeString("") },
|
| + { "en", true, UnicodeString("2008-Jan--06"), UnicodeString("yyyy-MMM -- dd"), UnicodeString("2008-Jan 06") },
|
| + { "en", false, UnicodeString("2008-Jan--07"), UnicodeString("yyyy-MMM -- dd"), UnicodeString("") },
|
| + { "en", true, UnicodeString("6 Jan 08 2008"), UnicodeString("eee MMM dd yyyy"), UnicodeString("Sat Jan 08 2008") },
|
| + { "en", false, UnicodeString("6 Jan 09 2008"), UnicodeString("eee MMM dd yyyy"), UnicodeString("") },
|
| + // terminator
|
| + { NULL, true, UnicodeString(""), UnicodeString(""), UnicodeString("") }
|
| + };
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + Calendar* cal = Calendar::createInstance(status);
|
| + if (U_FAILURE(status)) {
|
| + dataerrln(UnicodeString("FAIL: Unable to create Calendar for default timezone and locale."));
|
| + } else {
|
| + cal->setTime(july022008, status);
|
| + const TestDateFormatLeniencyItem * itemPtr;
|
| + for (itemPtr = items; itemPtr->locale != NULL; itemPtr++ ) {
|
| +
|
| + Locale locale = Locale::createFromName(itemPtr->locale);
|
| + status = U_ZERO_ERROR;
|
| + ParsePosition pos(0);
|
| + SimpleDateFormat * sdmft = new SimpleDateFormat(itemPtr->pattern, locale, status);
|
| + if (U_FAILURE(status)) {
|
| + dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
|
| + continue;
|
| + }
|
| + logln("parsing " + itemPtr->parseString);
|
| + sdmft->setLenient(itemPtr->leniency);
|
| + sdmft->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, itemPtr->leniency, status);
|
| + sdmft->setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, itemPtr->leniency, status);
|
| + sdmft->setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, itemPtr->leniency, status);
|
| + sdmft->parse(itemPtr->parseString, pos);
|
| +
|
| + delete sdmft;
|
| + if(pos.getErrorIndex() > -1) {
|
| + if(itemPtr->expectedResult.length() != 0) {
|
| + errln("error: unexpected error - " + itemPtr->parseString + " - error index " + pos.getErrorIndex() +
|
| + " - leniency " + itemPtr->leniency);
|
| + continue;
|
| + } else {
|
| + continue;
|
| + }
|
| + }
|
| + }
|
| + }
|
| + delete cal;
|
| +
|
| +}
|
| +
|
| +
|
| +typedef struct {
|
| + UnicodeString text;
|
| + UnicodeString pattern;
|
| + int initialParsePos;
|
| +} T10855Data;
|
| +
|
| +void DateFormatRegressionTest::TestT10855(void) {
|
| + // NOTE: these should NOT parse
|
| + const T10855Data items[] = {
|
| + //parse String pattern initial parse pos
|
| + { UnicodeString("September 30, 1998"), UnicodeString("MM-dd-yyyy"), 0},
|
| + { UnicodeString("123-73-1950"), UnicodeString("MM-dd-yyyy"), -1},
|
| + { UnicodeString("12-23-1950"), UnicodeString("MM-dd-yyyy"), -1},
|
| + // terminator
|
| + { UnicodeString(""), UnicodeString(""), 0}
|
| + };
|
| + UErrorCode status = U_ZERO_ERROR;
|
| +
|
| + int x = 0;
|
| + while(items[x].pattern.length() > 0)
|
| + {
|
| + status = U_ZERO_ERROR;
|
| + logln("Date to parse: \""+items[x].text+"\"");
|
| + logln("Starting Index: %d", items[x].initialParsePos);
|
| +
|
| + SimpleDateFormat dateFmt(items[x].pattern, status);
|
| + if(U_FAILURE(status)) {
|
| + errcheckln(status, "Failed dateFmt: %s", u_errorName(status));
|
| + ++x;
|
| + continue;
|
| + }
|
| + status = U_ZERO_ERROR;
|
| +
|
| + dateFmt.setLenient(false);
|
| + dateFmt.setTimeZone(*TimeZone::getGMT());
|
| +
|
| + ParsePosition position(items[x].initialParsePos);
|
| + logln("set position is now: %d", position.getIndex());
|
| + UDate d = dateFmt.parse(items[x].text, position);
|
| + if (position.getErrorIndex() != -1 || position.getIndex() == items[x].initialParsePos) {
|
| + logln("Parse Failed. ErrorIndex is %d - Index is %d", position.getErrorIndex(), position.getIndex());
|
| + } else {
|
| + errln("Parse Succeeded...should have failed. Index is %d - ErrorIndex is %d", position.getIndex(), position.getErrorIndex());
|
| + }
|
| + logln("Parsed date returns %d\n", d);
|
| +
|
| + ++x;
|
| + }
|
| +}
|
| +
|
| +void DateFormatRegressionTest::TestT10906(void) {
|
| +
|
| + UErrorCode status = U_ZERO_ERROR;
|
| + UnicodeString pattern = "MM-dd-yyyy";
|
| + UnicodeString text = "06-10-2014";
|
| + SimpleDateFormat format(pattern, status);
|
| + int32_t errorIdx = 0;
|
| + ParsePosition pp(-1);
|
| + format.parse(text, pp);
|
| + errorIdx = pp.getErrorIndex();
|
| + if (errorIdx == -1) {
|
| + errln("failed to report invalid (negative) starting parse position");
|
| + }
|
| +}
|
| +
|
| #endif /* #if !UCONFIG_NO_FORMATTING */
|
|
|
| //eof
|
|
|