Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: source/test/cintltst/cdattst.c

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/test/cintltst/cdateintervalformattest.c ('k') | source/test/cintltst/cformtst.c » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/cintltst/cdattst.c
diff --git a/source/test/cintltst/cdattst.c b/source/test/cintltst/cdattst.c
index ac3a1b27577686a86d2cb36959bc87d46868a7ee..c52c9821d799d8efc7ae58f65ab602859e47e5d7 100644
--- a/source/test/cintltst/cdattst.c
+++ b/source/test/cintltst/cdattst.c
@@ -1,6 +1,6 @@
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2014, International Business Machines Corporation and
+ * Copyright (c) 1997-2015, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
/********************************************************************************
@@ -25,6 +25,7 @@
#include "unicode/ucal.h"
#include "unicode/unum.h"
#include "unicode/ustring.h"
+#include "unicode/ufieldpositer.h"
#include "cintltst.h"
#include "cdattst.h"
#include "cformtst.h"
@@ -37,6 +38,8 @@ static void TestAllLocales(void);
static void TestRelativeCrash(void);
static void TestContext(void);
static void TestCalendarDateParse(void);
+static void TestParseErrorReturnValue(void);
+static void TestFormatForFields(void);
#define LEN(a) (sizeof(a)/sizeof(a[0]))
@@ -56,6 +59,8 @@ void addDateForTest(TestNode** root)
TESTCASE(TestContext);
TESTCASE(TestCalendarDateParse);
TESTCASE(TestOverrideNumberFormat);
+ TESTCASE(TestParseErrorReturnValue);
+ TESTCASE(TestFormatForFields);
}
/* Testing the DateFormat API */
static void TestDateFormat()
@@ -187,7 +192,7 @@ static void TestDateFormat()
}
/*format using fr */
- u_unescape("10 juil. 1996 16:05:28 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", temp, 50);
+ u_unescape("10 juil. 1996 \\u00E0 16:05:28 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", temp, 50);
if(result != NULL) {
free(result);
result = NULL;
@@ -673,7 +678,11 @@ static void TestSymbols()
VerifygetSymbols(zhChiCal, UDAT_CYCLIC_YEARS_NARROW, 59, "\\u7678\\u4EA5");
VerifygetSymbols(zhChiCal, UDAT_ZODIAC_NAMES_ABBREVIATED, 0, "\\u9F20");
VerifygetSymbols(zhChiCal, UDAT_ZODIAC_NAMES_WIDE, 11, "\\u732A");
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr:");
+#else
VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr");
+#endif
if(result != NULL) {
@@ -828,6 +837,10 @@ static void TestDateFormatCalendar() {
int32_t pos;
UDate when;
UErrorCode ec = U_ZERO_ERROR;
+ UChar buf1[256];
+ int32_t len1;
+ const char *expected;
+ UChar uExpected[32];
ctest_setTimeZone(NULL, &ec);
@@ -874,6 +887,19 @@ static void TestDateFormatCalendar() {
goto FAIL;
}
+ /* Check if formatCalendar matches the original date */
+ len1 = udat_formatCalendar(date, cal, buf1, UPRV_LENGTHOF(buf1), NULL, &ec);
+ if (U_FAILURE(ec)) {
+ log_err("FAIL: udat_formatCalendar(4/5/2001) failed with %s\n",
+ u_errorName(ec));
+ goto FAIL;
+ }
+ expected = "4/5/01";
+ u_uastrcpy(uExpected, expected);
+ if (u_strlen(uExpected) != len1 || u_strncmp(uExpected, buf1, len1) != 0) {
+ log_err("FAIL: udat_formatCalendar(4/5/2001), expected: %s", expected);
+ }
+
/* Parse the time */
u_uastrcpy(buf, "5:45 PM");
pos = 0;
@@ -883,7 +909,20 @@ static void TestDateFormatCalendar() {
pos, u_errorName(ec));
goto FAIL;
}
-
+
+ /* Check if formatCalendar matches the original time */
+ len1 = udat_formatCalendar(time, cal, buf1, UPRV_LENGTHOF(buf1), NULL, &ec);
+ if (U_FAILURE(ec)) {
+ log_err("FAIL: udat_formatCalendar(17:45) failed with %s\n",
+ u_errorName(ec));
+ goto FAIL;
+ }
+ expected = "5:45 PM";
+ u_uastrcpy(uExpected, expected);
+ if (u_strlen(uExpected) != len1 || u_strncmp(uExpected, buf1, len1) != 0) {
+ log_err("FAIL: udat_formatCalendar(17:45), expected: %s", expected);
+ }
+
/* Check result */
when = ucal_getMillis(cal, &ec);
if (U_FAILURE(ec)) {
@@ -1576,33 +1615,28 @@ static const char * overrideNumberFormat[][2] = {
static void TestOverrideNumberFormat(void) {
UErrorCode status = U_ZERO_ERROR;
UChar pattern[50];
- UChar* expected;
- UChar* fields;
+ UChar expected[50];
+ UChar fields[50];
char bbuf1[kBbufMax];
char bbuf2[kBbufMax];
const char* localeString = "zh@numbers=hanidays";
UDateFormat* fmt;
const UNumberFormat* getter_result;
int32_t i;
- unsigned j;
- expected=(UChar*)malloc(sizeof(UChar) * 10);
- fields=(UChar*)malloc(sizeof(UChar) * 10);
u_uastrcpy(fields, "d");
u_uastrcpy(pattern,"MM d");
- fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
+ fmt=udat_open(UDAT_PATTERN, UDAT_PATTERN, "en_US", zoneGMT, -1, pattern, u_strlen(pattern), &status);
if (!assertSuccess("udat_open()", &status)) {
return;
}
-
- // loop 50 times to check getter/setter
+ // loop 5 times to check getter/setter
for (i = 0; i < 5; i++){
UNumberFormat* overrideFmt;
overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
assertSuccess("unum_open()", &status);
-
udat_adoptNumberFormatForFields(fmt, fields, overrideFmt, &status);
overrideFmt = NULL; // no longer valid
assertSuccess("udat_setNumberFormatForField()", &status);
@@ -1612,7 +1646,6 @@ static void TestOverrideNumberFormat(void) {
log_err("FAIL: udat_getNumberFormatForField did not return a valid pointer\n");
}
}
-
{
UNumberFormat* overrideFmt;
overrideFmt = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
@@ -1622,22 +1655,22 @@ static void TestOverrideNumberFormat(void) {
}
udat_close(fmt);
- for (j=0; i<sizeof(overrideNumberFormat)/sizeof(overrideNumberFormat[0]); i++){
+ for (i=0; i<UPRV_LENGTHOF(overrideNumberFormat); i++){
UChar ubuf[kUbufMax];
UDateFormat* fmt2;
UNumberFormat* overrideFmt2;
- fmt2 =udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US",NULL,0,pattern, u_strlen(pattern), &status);
+ fmt2 =udat_open(UDAT_PATTERN, UDAT_PATTERN,"en_US", zoneGMT, -1, pattern, u_strlen(pattern), &status);
assertSuccess("udat_open() with en_US", &status);
overrideFmt2 = unum_open(UNUM_DEFAULT, NULL, 0, localeString, NULL, &status);
assertSuccess("unum_open() in loop", &status);
u_uastrcpy(fields, overrideNumberFormat[i][0]);
- u_unescape(overrideNumberFormat[i][1], expected, 50);
+ u_unescape(overrideNumberFormat[i][1], expected, UPRV_LENGTHOF(expected));
if ( strcmp(overrideNumberFormat[i][0], "") == 0 ) { // use the one w/o field
- udat_setNumberFormat(fmt2, overrideFmt2);
+ udat_adoptNumberFormat(fmt2, overrideFmt2);
} else if ( strcmp(overrideNumberFormat[i][0], "mixed") == 0 ) { // set 1 field at first but then full override, both(M & d) should be override
const char* singleLocale = "en@numbers=hebr";
UNumberFormat* singleOverrideFmt;
@@ -1649,7 +1682,7 @@ static void TestOverrideNumberFormat(void) {
udat_adoptNumberFormatForFields(fmt2, fields, singleOverrideFmt, &status);
assertSuccess("udat_setNumberFormatForField() in mixed", &status);
- udat_setNumberFormat(fmt2, overrideFmt2);
+ udat_adoptNumberFormat(fmt2, overrideFmt2);
} else if ( strcmp(overrideNumberFormat[i][0], "do") == 0 ) { // o is an invalid field
udat_adoptNumberFormatForFields(fmt2, fields, overrideFmt2, &status);
if(status == U_INVALID_FORMAT_ERROR) {
@@ -1669,11 +1702,146 @@ static void TestOverrideNumberFormat(void) {
log_err("fail: udat_format for locale, expected %s, got %s\n",
u_austrncpy(bbuf1,expected,kUbufMax), u_austrncpy(bbuf2,ubuf,kUbufMax) );
- udat_close(overrideFmt2);
udat_close(fmt2);
}
- free(expected);
- free(fields);
+}
+
+/*
+ * Ticket #11523
+ * udat_parse and udat_parseCalendar should have the same error code when given the same invalid input.
+ */
+static void TestParseErrorReturnValue(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UErrorCode expectStatus = U_PARSE_ERROR;
+ UDateFormat* df;
+ UCalendar* cal;
+
+ df = udat_open(UDAT_DEFAULT, UDAT_DEFAULT, NULL, NULL, -1, NULL, -1, &status);
+ if (!assertSuccessCheck("udat_open()", &status, TRUE)) {
+ return;
+ }
+
+ cal = ucal_open(NULL, 0, "en_US", UCAL_GREGORIAN, &status);
+ if (!assertSuccess("ucal_open()", &status)) {
+ return;
+ }
+
+ udat_parse(df, NULL, -1, NULL, &status);
+ if (status != expectStatus) {
+ log_err("%s should have been returned by udat_parse when given an invalid input, instead got - %s\n", u_errorName(expectStatus), u_errorName(status));
+ }
+
+ status = U_ZERO_ERROR;
+ udat_parseCalendar(df, cal, NULL, -1, NULL, &status);
+ if (status != expectStatus) {
+ log_err("%s should have been returned by udat_parseCalendar when given an invalid input, instead got - %s\n", u_errorName(expectStatus), u_errorName(status));
+ }
+
+ ucal_close(cal);
+ udat_close(df);
+}
+
+/*
+ * Ticket #11553
+ * Test new udat_formatForFields, udat_formatCalendarForFields (and UFieldPositionIterator)
+ */
+static const char localeForFields[] = "en_US";
+/* zoneGMT[]defined above */
+static const UDate date2015Feb25 = 1424841000000.0; /* Wednesday, February 25, 2015 at 5:10:00 AM GMT */
+
+typedef struct {
+ int32_t field;
+ int32_t beginPos;
+ int32_t endPos;
+} FieldsData;
+static const FieldsData expectedFields[] = {
+ { UDAT_DAY_OF_WEEK_FIELD /* 9*/, 0, 9 },
+ { UDAT_MONTH_FIELD /* 2*/, 11, 19 },
+ { UDAT_DATE_FIELD /* 3*/, 20, 22 },
+ { UDAT_YEAR_FIELD /* 1*/, 24, 28 },
+ { UDAT_HOUR1_FIELD /*15*/, 32, 33 },
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ { UDAT_TIME_SEPARATOR_FIELD /*35*/, 33, 34 },
+#endif
+ { UDAT_MINUTE_FIELD /* 6*/, 34, 36 },
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ { UDAT_TIME_SEPARATOR_FIELD /*35*/, 36, 37 },
+#endif
+ { UDAT_SECOND_FIELD /* 7*/, 37, 39 },
+ { UDAT_AM_PM_FIELD /*14*/, 40, 42 },
+ { UDAT_TIMEZONE_FIELD /*17*/, 43, 46 },
+ { -1, -1, -1 },
+};
+
+enum {kUBufFieldsLen = 128, kBBufFieldsLen = 256 };
+
+static void TestFormatForFields(void) {
+ UErrorCode status = U_ZERO_ERROR;
+ UFieldPositionIterator* fpositer = ufieldpositer_open(&status);
+ if ( U_FAILURE(status) ) {
+ log_err("ufieldpositer_open fails, status %s\n", u_errorName(status));
+ } else {
+ UDateFormat* udfmt = udat_open(UDAT_LONG, UDAT_FULL, localeForFields, zoneGMT, -1, NULL, 0, &status);
+ UCalendar* ucal = ucal_open(zoneGMT, -1, localeForFields, UCAL_DEFAULT, &status);
+ if ( U_FAILURE(status) ) {
+ log_data_err("udat_open or ucal_open fails for locale %s, status %s (Are you missing data?)\n", localeForFields, u_errorName(status));
+ } else {
+ int32_t ulen, field, beginPos, endPos;
+ UChar ubuf[kUBufFieldsLen];
+ const FieldsData * fptr;
+
+ status = U_ZERO_ERROR;
+ ulen = udat_formatForFields(udfmt, date2015Feb25, ubuf, kUBufFieldsLen, fpositer, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("udat_formatForFields fails, status %s\n", u_errorName(status));
+ } else {
+ for (fptr = expectedFields; ; fptr++) {
+ field = ufieldpositer_next(fpositer, &beginPos, &endPos);
+ if (field != fptr->field || (field >= 0 && (beginPos != fptr->beginPos || endPos != fptr->endPos))) {
+ if (fptr->field >= 0) {
+ log_err("udat_formatForFields as \"%s\"; expect field %d range %d-%d, get field %d range %d-%d\n",
+ aescstrdup(ubuf, ulen), fptr->field, fptr->beginPos, fptr->endPos, field, beginPos, endPos);
+ } else {
+ log_err("udat_formatForFields as \"%s\"; expect field < 0, get field %d range %d-%d\n",
+ aescstrdup(ubuf, ulen), field, beginPos, endPos);
+ }
+ break;
+ }
+ if (field < 0) {
+ break;
+ }
+ }
+ }
+
+ ucal_setMillis(ucal, date2015Feb25, &status);
+ status = U_ZERO_ERROR;
+ ulen = udat_formatCalendarForFields(udfmt, ucal, ubuf, kUBufFieldsLen, fpositer, &status);
+ if ( U_FAILURE(status) ) {
+ log_err("udat_formatCalendarForFields fails, status %s\n", u_errorName(status));
+ } else {
+ for (fptr = expectedFields; ; fptr++) {
+ field = ufieldpositer_next(fpositer, &beginPos, &endPos);
+ if (field != fptr->field || (field >= 0 && (beginPos != fptr->beginPos || endPos != fptr->endPos))) {
+ if (fptr->field >= 0) {
+ log_err("udat_formatFudat_formatCalendarForFieldsorFields as \"%s\"; expect field %d range %d-%d, get field %d range %d-%d\n",
+ aescstrdup(ubuf, ulen), fptr->field, fptr->beginPos, fptr->endPos, field, beginPos, endPos);
+ } else {
+ log_err("udat_formatCalendarForFields as \"%s\"; expect field < 0, get field %d range %d-%d\n",
+ aescstrdup(ubuf, ulen), field, beginPos, endPos);
+ }
+ break;
+ }
+ if (field < 0) {
+ break;
+ }
+ }
+ }
+
+ ucal_close(ucal);
+ udat_close(udfmt);
+ }
+ ufieldpositer_close(fpositer);
+ }
}
#endif /* #if !UCONFIG_NO_FORMATTING */
« no previous file with comments | « source/test/cintltst/cdateintervalformattest.c ('k') | source/test/cintltst/cformtst.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698