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

Unified Diff: source/test/intltest/dtfmttst.cpp

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/intltest/dtfmttst.h ('k') | source/test/intltest/dtifmtts.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/intltest/dtfmttst.cpp
diff --git a/source/test/intltest/dtfmttst.cpp b/source/test/intltest/dtfmttst.cpp
index b289e133c594617ec34f304383ce68baa99102d9..1329e952fa5d6d7d04d8bddfd27e299150d4232b 100644
--- a/source/test/intltest/dtfmttst.cpp
+++ b/source/test/intltest/dtfmttst.cpp
@@ -1,6 +1,6 @@
/********************************************************************
* COPYRIGHT:
- * Copyright (c) 1997-2014, International Business Machines
+ * Copyright (c) 1997-2015, International Business Machines
* Corporation and others. All Rights Reserved.
********************************************************************/
@@ -58,6 +58,7 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam
TESTCASE_AUTO(TestDateFormatZone061);
TESTCASE_AUTO(TestDateFormatZone146);
TESTCASE_AUTO(TestLocaleDateFormat);
+ TESTCASE_AUTO(TestFormattingLocaleTimeSeparator);
TESTCASE_AUTO(TestWallyWedel);
TESTCASE_AUTO(TestDateFormatCalendar);
TESTCASE_AUTO(TestSpaceParsing);
@@ -79,6 +80,8 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam
TESTCASE_AUTO(TestRelative);
TESTCASE_AUTO(TestRelativeClone);
TESTCASE_AUTO(TestHostClone);
+ TESTCASE_AUTO(TestHebrewClone);
+ TESTCASE_AUTO(TestDateFormatSymbolsClone);
TESTCASE_AUTO(TestTimeZoneDisplayName);
TESTCASE_AUTO(TestRoundtripWithCalendar);
TESTCASE_AUTO(Test6338);
@@ -103,6 +106,12 @@ void DateFormatTest::runIndexedTest( int32_t index, UBool exec, const char* &nam
TESTCASE_AUTO(TestParseLeniencyAPIs);
TESTCASE_AUTO(TestNumberFormatOverride);
+ TESTCASE_AUTO(TestCreateInstanceForSkeleton);
+ TESTCASE_AUTO(TestCreateInstanceForSkeletonDefault);
+ TESTCASE_AUTO(TestCreateInstanceForSkeletonWithCalendar);
+ TESTCASE_AUTO(TestDFSCreateForLocaleNonGregorianLocale);
+ TESTCASE_AUTO(TestDFSCreateForLocaleWithCalendarInLocale);
+ TESTCASE_AUTO(TestChangeCalendar);
TESTCASE_AUTO_END;
}
@@ -424,7 +433,11 @@ DateFormatTest::escape(UnicodeString& s)
/**
* This MUST be kept in sync with DateFormatSymbols.gPatternChars.
*/
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr:";
+#else
static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr";
+#endif
/**
* A list of the names of all the fields in DateFormat.
@@ -466,6 +479,7 @@ static const char* DATEFORMAT_FIELD_NAMES[] = {
"TIMEZONE_ISO_FIELD",
"TIMEZONE_ISO_LOCAL_FIELD",
"RELATED_YEAR_FIELD",
+ "UDAT_TIME_SEPARATOR_FIELD",
};
static const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
@@ -491,7 +505,11 @@ void DateFormatTest::TestFieldPosition() {
assertEquals("patternChars", PATTERN_CHARS, rootSyms.getLocalPatternChars(buf));
assertEquals("patternChars", PATTERN_CHARS, DateFormatSymbols::getPatternUChars());
assertTrue("DATEFORMAT_FIELD_NAMES", DATEFORMAT_FIELD_NAMES_LENGTH == UDAT_FIELD_COUNT);
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS));
+#else
+ assertTrue("Data", UDAT_FIELD_COUNT == uprv_strlen(PATTERN_CHARS) + 1); // +1 for missing TIME_SEPARATOR pattern char
+#endif
// Create test formatters
const int32_t COUNT = 4;
@@ -521,22 +539,38 @@ void DateFormatTest::TestFieldPosition() {
"", "1997", "August", "13", "", "", "34", "12", "", "Wednesday",
"", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "",
"", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "",
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ "", "", "", "", "", ":",
+#else
+ "", "", "", "", "", "",
+#endif
"", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "", "mercredi",
"", "", "", "", "", "", "", "heure d\\u2019\\u00E9t\\u00E9 du Pacifique", "", "",
"", "", "", "", "", "", "", "", "", "",
- "", "", "", "", "",
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ "", "", "", "", "", ":",
+#else
+ "", "", "", "", "", "",
+#endif
"AD", "1997", "8", "13", "14", "14", "34", "12", "5", "Wed",
"225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4",
"1997", "2450674", "52452513", "-0700", "PT", "4", "8", "3", "3", "uslax",
- "1997", "GMT-7", "-07", "-07", "1997",
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ "1997", "GMT-7", "-07", "-07", "1997", ":",
+#else
+ "1997", "GMT-7", "-07", "-07", "1997", "",
+#endif
"Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", "Wednesday",
"0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday",
"1997", "2450674", "52452513", "GMT-07:00", "Pacific Time", "Wednesday", "August", "3rd quarter", "3rd quarter", "Los Angeles Time",
- "1997", "GMT-07:00", "-0700", "-0700","1997",
+#if UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR
+ "1997", "GMT-07:00", "-0700", "-0700", "1997", ":",
+#else
+ "1997", "GMT-07:00", "-0700", "-0700", "1997", "",
+#endif
};
const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
@@ -1280,7 +1314,7 @@ DateFormatTest::TestLocaleDateFormat() // Bug 495
DateFormat::FULL, Locale::getFrench());
DateFormat *dfUS = DateFormat::createDateTimeInstance(DateFormat::FULL,
DateFormat::FULL, Locale::getUS());
- UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 00:00:00 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", -1, US_INV );
+ UnicodeString expectedFRENCH ( "lundi 15 septembre 1997 \\u00E0 00:00:00 heure d\\u2019\\u00E9t\\u00E9 du Pacifique", -1, US_INV );
expectedFRENCH = expectedFRENCH.unescape();
UnicodeString expectedUS ( "Monday, September 15, 1997 at 12:00:00 AM Pacific Daylight Time" );
logln((UnicodeString)"Date set to : " + dateToString(testDate));
@@ -1305,6 +1339,46 @@ DateFormatTest::TestLocaleDateFormat() // Bug 495
delete dfFrench;
}
+void
+DateFormatTest::TestFormattingLocaleTimeSeparator()
+{
+ // This test not as useful is it once was, since timeSeparator
+ // in the Arabic is changed back to ":" in CLDR 28.
+ const UDate testDate = 874266720000.; // Sun Sep 14 21:52:00 CET 1997
+ logln((UnicodeString)"Date set to : " + dateToString(testDate));
+
+ const LocalPointer<const TimeZone> tz(TimeZone::createTimeZone("CET"));
+
+ const LocalPointer<DateFormat> dfArab(DateFormat::createTimeInstance(
+ DateFormat::SHORT, Locale("ar")));
+
+ const LocalPointer<DateFormat> dfLatn(DateFormat::createTimeInstance(
+ DateFormat::SHORT, Locale("ar", NULL, NULL, "numbers=latn")));
+
+ if (dfLatn.isNull() || dfArab.isNull()) {
+ dataerrln("Error calling DateFormat::createTimeInstance()");
+ return;
+ }
+
+ dfArab->setTimeZone(*tz);
+ dfLatn->setTimeZone(*tz);
+
+ const UnicodeString expectedArab = UnicodeString(
+ "\\u0669:\\u0665\\u0662 \\u0645", -1, US_INV).unescape();
+
+ const UnicodeString expectedLatn = UnicodeString(
+ "9:52 \\u0645", -1, US_INV).unescape();
+
+ UnicodeString actualArab;
+ UnicodeString actualLatn;
+
+ dfArab->format(testDate, actualArab);
+ dfLatn->format(testDate, actualLatn);
+
+ assertEquals("Arab", expectedArab, actualArab);
+ assertEquals("Latn", expectedLatn, actualLatn);
+}
+
/**
* Test DateFormat(Calendar) API
*/
@@ -1417,7 +1491,6 @@ void DateFormatTest::TestSpaceParsing() {
"hh:mm:ss a", "12:34:56 PM", "1970 01 01 12:34:56",
NULL, "12:34:56PM", "1970 01 01 12:34:56",
NULL, "12.34.56PM", "1970 01 01 12:34:56",
- NULL, "12-34-56 PM", "1970 01 01 12:34:56",
NULL, "12 : 34 : 56 PM", "1970 01 01 12:34:56",
"MM d yy 'at' hh:mm:ss a", "04/05/06 12:34:56 PM", "2006 04 05 12:34:56",
@@ -1649,8 +1722,8 @@ void DateFormatTest::TestShortDays()
"EEEEEE d MMM y", "fp", "2013 01 13 0:00:00", "s\\u00F6 13 jan. 2013", "2013 01 13 0:00:00",
"EEEEEE d MMM y", "fp", "2013 01 16 0:00:00", "on 16 jan. 2013", "2013 01 16 0:00:00",
"EEEEEE d", "fp", "1970 01 17 0:00:00", "l\\u00F6 17", "1970 01 17 0:00:00",
- "cccccc d", "fp", "1970 01 17 0:00:00", "L\\u00F6 17", "1970 01 17 0:00:00",
- "cccccc", "fp", "1970 01 03 0:00:00", "L\\u00F6", "1970 01 03 0:00:00",
+ "cccccc d", "fp", "1970 01 17 0:00:00", "l\\u00F6 17", "1970 01 17 0:00:00",
+ "cccccc", "fp", "1970 01 03 0:00:00", "l\\u00F6", "1970 01 03 0:00:00",
};
expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
expect(SV_DATA, ARRAY_SIZE(SV_DATA), Locale("sv", "", ""));
@@ -1705,6 +1778,11 @@ void DateFormatTest::TestNarrowNames()
"ccccc", "1970 01 01 0:00:00", "T",
"ccccc", "1970 01 02 0:00:00", "F",
"ccccc", "1970 01 03 0:00:00", "S",
+
+ "h:mm a", "2015 01 01 10:00:00", "10:00 AM",
+ "h:mm a", "2015 01 01 22:00:00", "10:00 PM",
+ "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 a",
+ "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 p",
};
const char *CS_DATA[] = {
@@ -1754,10 +1832,25 @@ void DateFormatTest::TestNarrowNames()
"ccccc", "1970 01 01 0:00:00", "\\u010C",
"ccccc", "1970 01 02 0:00:00", "P",
"ccccc", "1970 01 03 0:00:00", "S",
+
+ "h:mm a", "2015 01 01 10:00:00", "10:00 dop.",
+ "h:mm a", "2015 01 01 22:00:00", "10:00 odp.",
+ "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 dop.",
+ "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 odp.",
+ };
+
+ const char *CA_DATA[] = {
+ "yyyy MM dd HH:mm:ss",
+
+ "h:mm a", "2015 01 01 10:00:00", "10:00 a. m.",
+ "h:mm a", "2015 01 01 22:00:00", "10:00 p. m.",
+ "h:mm aaaaa", "2015 01 01 10:00:00", "10:00 a. m.",
+ "h:mm aaaaa", "2015 01 01 22:00:00", "10:00 p. m.",
};
expectFormat(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
expectFormat(CS_DATA, ARRAY_SIZE(CS_DATA), Locale("cs", "", ""));
+ expectFormat(CA_DATA, ARRAY_SIZE(CA_DATA), Locale("ca", "", ""));
}
void DateFormatTest::TestEras()
@@ -1793,6 +1886,9 @@ void DateFormatTest::TestQuarters()
"qq", "fp", "1970 04 01", "02", "1970 04 01",
"qqq", "fp", "1970 07 01", "Q3", "1970 07 01",
"qqqq", "fp", "1970 10 01", "4th quarter", "1970 10 01",
+
+ "Qyy", "fp", "2015 04 01", "215", "2015 04 01",
+ "QQyy", "fp", "2015 07 01", "0315", "2015 07 01",
};
expect(EN_DATA, ARRAY_SIZE(EN_DATA), Locale("en", "", ""));
@@ -2422,7 +2518,7 @@ void DateFormatTest::TestHostClone(void)
UDate now = Calendar::getNow();
DateFormat *full = DateFormat::createDateInstance(DateFormat::kFull, loc);
if (full == NULL) {
- dataerrln("FAIL: Can't create Relative date instance");
+ dataerrln("FAIL: Can't create host date instance");
return;
}
UnicodeString result1;
@@ -2440,6 +2536,82 @@ void DateFormatTest::TestHostClone(void)
delete fullClone;
}
+void DateFormatTest::TestHebrewClone(void)
+{
+ /*
+ Verify that a cloned formatter gives the same results
+ and is useable after the original has been deleted.
+ */
+ UErrorCode status = U_ZERO_ERROR;
+ Locale loc("he@calendar=hebrew");
+ UDate now = Calendar::getNow();
+ LocalPointer<DateFormat> fmt(
+ DateFormat::createDateInstance(DateFormat::kLong, loc));
+ if (fmt.isNull()) {
+ dataerrln("FAIL: Can't create Hebrew date instance");
+ return;
+ }
+ UnicodeString result1;
+ fmt->format(now, result1, status);
+ LocalPointer<Format> fmtClone(fmt->clone());
+
+ // free fmt to be sure that fmtClone is independent of fmt.
+ fmt.adoptInstead(NULL);
+
+ UnicodeString result2;
+ fmtClone->format(now, result2, status);
+ ASSERT_OK(status);
+ if (result1 != result2) {
+ errln("FAIL: Clone returned different result from non-clone.");
+ }
+}
+
+static UBool getActualAndValidLocales(
+ const Format &fmt, Locale &valid, Locale &actual) {
+ const SimpleDateFormat* dat = dynamic_cast<const SimpleDateFormat*>(&fmt);
+ if (dat == NULL) {
+ return FALSE;
+ }
+ const DateFormatSymbols *sym = dat->getDateFormatSymbols();
+ if (sym == NULL) {
+ return FALSE;
+ }
+ UErrorCode status = U_ZERO_ERROR;
+ valid = sym->getLocale(ULOC_VALID_LOCALE, status);
+ actual = sym->getLocale(ULOC_ACTUAL_LOCALE, status);
+ return U_SUCCESS(status);
+}
+
+void DateFormatTest::TestDateFormatSymbolsClone(void)
+{
+ /*
+ Verify that a cloned formatter gives the same results
+ and is useable after the original has been deleted.
+ */
+ Locale loc("de_CH_LUCERNE");
+ LocalPointer<DateFormat> fmt(
+ DateFormat::createDateInstance(DateFormat::kDefault, loc));
+ Locale valid1;
+ Locale actual1;
+ if (!getActualAndValidLocales(*fmt, valid1, actual1)) {
+ dataerrln("FAIL: Could not fetch valid + actual locales");
+ return;
+ }
+ LocalPointer<Format> fmtClone(fmt->clone());
+
+ // Free fmt to be sure that fmtClone is really independent of fmt.
+ fmt.adoptInstead(NULL);
+ Locale valid2;
+ Locale actual2;
+ if (!getActualAndValidLocales(*fmtClone, valid2, actual2)) {
+ errln("FAIL: Could not fetch valid + actual locales");
+ return;
+ }
+ if (valid1 != valid2 || actual1 != actual2) {
+ errln("Date format symbol locales of clone don't match original");
+ }
+}
+
void DateFormatTest::TestTimeZoneDisplayName()
{
// This test data was ported from ICU4J. Don't know why the 6th column in there because it's not being
@@ -2962,8 +3134,8 @@ void DateFormatTest::TestTimeZoneDisplayName()
{ "bg", "Europe/London", "2004-07-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+01:00", "+1:00" },
{ "bg", "Europe/London", "2004-07-15T00:00:00Z", "z", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447+1", "+1:00" },
{ "bg", "Europe/London", "2004-07-15T00:00:00Z", "zzzz", "\\u0411\\u0440\\u0438\\u0442\\u0430\\u043d\\u0441\\u043a\\u043e \\u043b\\u044f\\u0442\\u043d\\u043e \\u0447\\u0430\\u0441\\u043e\\u0432\\u043e \\u0432\\u0440\\u0435\\u043c\\u0435", "+1:00" },
- { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u0412\\u0435\\u043b\\u0438\\u043a\\u043e\\u0431\\u0440\\u0438\\u0442\\u0430\\u043d\\u0438\\u044f", "Europe/London" },
- { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u0412\\u0435\\u043b\\u0438\\u043a\\u043e\\u0431\\u0440\\u0438\\u0442\\u0430\\u043d\\u0438\\u044f", "Europe/London" },
+ { "bg", "Europe/London", "2004-07-15T00:00:00Z", "v", "\\u041E\\u0431\\u0435\\u0434\\u0438\\u043D\\u0435\\u043D\\u043E\\u0442\\u043E \\u043A\\u0440\\u0430\\u043B\\u0441\\u0442\\u0432\\u043E", "Europe/London" },
+ { "bg", "Europe/London", "2004-07-15T00:00:00Z", "vvvv", "\\u041E\\u0431\\u0435\\u0434\\u0438\\u043D\\u0435\\u043D\\u043E\\u0442\\u043E \\u043A\\u0440\\u0430\\u043B\\u0441\\u0442\\u0432\\u043E", "Europe/London" },
{ "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "Z", "-0300", "-3:00" },
{ "bg", "Etc/GMT+3", "2004-01-15T00:00:00Z", "ZZZZ", "\\u0413\\u0440\\u0438\\u043D\\u0443\\u0438\\u0447-03:00", "-3:00" },
@@ -3751,7 +3923,9 @@ void DateFormatTest::TestFormalChineseDate() {
// create formatter
SimpleDateFormat *sdf = new SimpleDateFormat(pattern,override,Locale::getChina(),status);
- failure(status, "new SimpleDateFormat with override", TRUE);
+ if (failure(status, "new SimpleDateFormat with override", TRUE)) {
+ return;
+ }
UDate thedate = date(2009-1900, UCAL_JULY, 28);
FieldPosition pos(0);
@@ -3876,39 +4050,39 @@ void DateFormatTest::TestMonthPatterns()
const MonthPatternItem items[] = {
// locale date style; expected formats for the 3 dates above
- { "root@calendar=chinese", DateFormat::kLong, { UnicodeString("ren-chen M04 2"), UnicodeString("ren-chen M04bis 2"), UnicodeString("ren-chen M05 2") } },
- { "root@calendar=chinese", DateFormat::kShort, { UnicodeString("29-04-02"), UnicodeString("29-04bis-02"), UnicodeString("29-05-02") } },
+ { "root@calendar=chinese", DateFormat::kLong, { UnicodeString("2012(ren-chen) M04 2"), UnicodeString("2012(ren-chen) M04bis 2"), UnicodeString("2012(ren-chen) M05 2") } },
+ { "root@calendar=chinese", DateFormat::kShort, { UnicodeString("2012-04-02"), UnicodeString("2012-04bis-02"), UnicodeString("2012-05-02") } },
{ "root@calendar=chinese", -1, { UnicodeString("29-4-2"), UnicodeString("29-4bis-2"), UnicodeString("29-5-2") } },
{ "root@calendar=chinese", -2, { UnicodeString("78x29-4-2"), UnicodeString("78x29-4bis-2"), UnicodeString("78x29-5-2") } },
{ "root@calendar=chinese", -3, { UnicodeString("ren-chen-4-2"), UnicodeString("ren-chen-4bis-2"), UnicodeString("ren-chen-5-2") } },
{ "root@calendar=chinese", -4, { UnicodeString("ren-chen M04 2"), UnicodeString("ren-chen M04bis 2"), UnicodeString("ren-chen M05 2") } },
{ "en@calendar=gregorian", -3, { UnicodeString("2012-4-22"), UnicodeString("2012-5-22"), UnicodeString("2012-6-20") } },
- { "en@calendar=chinese", DateFormat::kLong, { UnicodeString("Month4 2, ren-chen"), UnicodeString("Month4bis 2, ren-chen"), UnicodeString("Month5 2, ren-chen") } },
- { "en@calendar=chinese", DateFormat::kShort, { UnicodeString("4/2/29"), UnicodeString("4bis/2/29"), UnicodeString("5/2/29") } },
- { "zh@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
- CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u95F0\\u56DB\\u6708\\u521D\\u4E8C"),
- CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
- { "zh@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("\\u58EC\\u8FB0-4-2"),
- CharsToUnicodeString("\\u58EC\\u8FB0-\\u95F04-2"),
- CharsToUnicodeString("\\u58EC\\u8FB0-5-2") } },
+ { "en@calendar=chinese", DateFormat::kLong, { UnicodeString("Month4 2, 2012(ren-chen)"), UnicodeString("Month4bis 2, 2012(ren-chen)"), UnicodeString("Month5 2, 2012(ren-chen)") } },
+ { "en@calendar=chinese", DateFormat::kShort, { UnicodeString("4/2/2012"), UnicodeString("4bis/2/2012"), UnicodeString("5/2/2012") } },
+ { "zh@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
+ CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u95F0\\u56DB\\u6708\\u521D\\u4E8C"),
+ CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
+ { "zh@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("2012-4-2"),
+ CharsToUnicodeString("2012-\\u95F04-2"),
+ CharsToUnicodeString("2012-5-2") } },
{ "zh@calendar=chinese", -3, { CharsToUnicodeString("\\u58EC\\u8FB0-4-2"),
CharsToUnicodeString("\\u58EC\\u8FB0-\\u95F04-2"),
CharsToUnicodeString("\\u58EC\\u8FB0-5-2") } },
{ "zh@calendar=chinese", -4, { CharsToUnicodeString("\\u58EC\\u8FB0 \\u56DB\\u6708 2"),
CharsToUnicodeString("\\u58EC\\u8FB0 \\u95F0\\u56DB\\u6708 2"),
CharsToUnicodeString("\\u58EC\\u8FB0 \\u4E94\\u6708 2") } },
- { "zh_Hant@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
- CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u958F\\u56DB\\u6708\\u521D\\u4E8C"),
- CharsToUnicodeString("\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
- { "zh_Hant@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("\\u58EC\\u8FB0/4/2"),
- CharsToUnicodeString("\\u58EC\\u8FB0/\\u958F4/2"),
- CharsToUnicodeString("\\u58EC\\u8FB0/5/2") } },
+ { "zh_Hant@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u56DB\\u6708\\u521D\\u4E8C"),
+ CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u958F\\u56DB\\u6708\\u521D\\u4E8C"),
+ CharsToUnicodeString("2012\\u58EC\\u8FB0\\u5E74\\u4E94\\u6708\\u521D\\u4E8C") } },
+ { "zh_Hant@calendar=chinese", DateFormat::kShort, { CharsToUnicodeString("2012/4/2"),
+ CharsToUnicodeString("2012/\\u958F4/2"),
+ CharsToUnicodeString("2012/5/2") } },
{ "fr@calendar=chinese", DateFormat::kLong, { CharsToUnicodeString("2 s\\u00ECyu\\u00E8 ren-chen"),
CharsToUnicodeString("2 s\\u00ECyu\\u00E8bis ren-chen"),
CharsToUnicodeString("2 w\\u01D4yu\\u00E8 ren-chen") } },
{ "fr@calendar=chinese", DateFormat::kShort, { UnicodeString("2/4/29"), UnicodeString("2/4bis/29"), UnicodeString("2/5/29") } },
- { "en@calendar=dangi", DateFormat::kLong, { UnicodeString("Month3bis 2, 29"), UnicodeString("Month4 2, 29"), UnicodeString("Month5 1, 29") } },
- { "en@calendar=dangi", DateFormat::kShort, { UnicodeString("3bis/2/29"), UnicodeString("4/2/29"), UnicodeString("5/1/29") } },
+ { "en@calendar=dangi", DateFormat::kLong, { UnicodeString("Month3bis 2, 2012(29)"), UnicodeString("Month4 2, 2012(29)"), UnicodeString("Month5 1, 2012(29)") } },
+ { "en@calendar=dangi", DateFormat::kShort, { UnicodeString("3bis/2/2012"), UnicodeString("4/2/2012"), UnicodeString("5/1/2012") } },
{ "en@calendar=dangi", -2, { UnicodeString("78x29-3bis-2"), UnicodeString("78x29-4-2"), UnicodeString("78x29-5-1") } },
{ "ko@calendar=dangi", DateFormat::kLong, { CharsToUnicodeString("\\uC784\\uC9C4\\uB144 \\uC7243\\uC6D4 2\\uC77C"),
CharsToUnicodeString("\\uC784\\uC9C4\\uB144 4\\uC6D4 2\\uC77C"),
@@ -4276,14 +4450,14 @@ void DateFormatTest::TestDateFormatLeniency() {
Locale locale = Locale::createFromName(itemPtr->locale);
status = U_ZERO_ERROR;
ParsePosition pos(0);
- sdmft.adoptInstead(new SimpleDateFormat(itemPtr->pattern, locale, status));
+ sdmft.adoptInsteadAndCheckErrorCode(new SimpleDateFormat(itemPtr->pattern, locale, status), status);
if (U_FAILURE(status)) {
dataerrln("Unable to create SimpleDateFormat - %s", u_errorName(status));
continue;
}
sdmft->setBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, itemPtr->leniency, status).
setBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, itemPtr->leniency, status).
- setBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, itemPtr->leniency, status);
+ setBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, itemPtr->leniency, status);
UDate d = sdmft->parse(itemPtr->parseString, pos);
if(itemPtr->expectedResult.length() == 0) {
@@ -4423,7 +4597,7 @@ void DateFormatTest::TestParseLeniencyAPIs() {
assertTrue("isCalendarLenient default", fmt->isCalendarLenient());
assertTrue("ALLOW_WHITESPACE default", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
assertTrue("ALLOW_NUMERIC default", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
- assertTrue("PARTIAL_MATCH default", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, status));
+ assertTrue("PARTIAL_MATCH default", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, status));
assertTrue("MULTIPLE_PATTERNS default", fmt->getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status));
// Set calendar to strict
@@ -4442,7 +4616,7 @@ void DateFormatTest::TestParseLeniencyAPIs() {
assertFalse("ALLOW_WHITESPACE after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_WHITESPACE, status));
assertFalse("ALLOW_NUMERIC after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_ALLOW_NUMERIC, status));
// These two boolean attributes are NOT affected according to the API specification
- assertTrue("PARTIAL_MATCH after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_MATCH, status));
+ assertTrue("PARTIAL_MATCH after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_PARTIAL_LITERAL_MATCH, status));
assertTrue("MULTIPLE_PATTERNS after setLenient(FALSE)", fmt->getBooleanAttribute(UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH, status));
// Allow white space leniency
@@ -4467,22 +4641,23 @@ void DateFormatTest::TestNumberFormatOverride() {
UnicodeString fields = (UnicodeString) "M";
LocalPointer<SimpleDateFormat> fmt;
- fmt.adoptInstead(new SimpleDateFormat((UnicodeString)"MM d", status));
+ fmt.adoptInsteadAndCheckErrorCode(new SimpleDateFormat((UnicodeString)"MM d", status), status);
if (!assertSuccess("SimpleDateFormat with pattern MM d", status)) {
return;
}
- NumberFormat* check_nf = NumberFormat::createInstance(Locale("en_US"), status);
- assertSuccess("NumberFormat en_US", status);
- // loop 100 times to test setter/getter
- for(int i=0; i<100; i++){
+ for(int i=0; i<3; i++){
+ NumberFormat* check_nf = NumberFormat::createInstance(Locale("en_US"), status);
+ assertSuccess("NumberFormat en_US", status);
fmt->adoptNumberFormat(fields, check_nf, status);
assertSuccess("adoptNumberFormat check_nf", status);
const NumberFormat* get_nf = fmt->getNumberFormatForField('M');
if (get_nf != check_nf) errln("FAIL: getter and setter do not work");
}
+ NumberFormat* check_nf = NumberFormat::createInstance(Locale("en_US"), status);
+ assertSuccess("NumberFormat en_US", status);
fmt->adoptNumberFormat(check_nf); // make sure using the same NF will not crash
const char * DATA [][2] = {
@@ -4500,7 +4675,7 @@ void DateFormatTest::TestNumberFormatOverride() {
fields = DATA[i][0];
LocalPointer<SimpleDateFormat> fmt;
- fmt.adoptInstead(new SimpleDateFormat((UnicodeString)"MM d", status));
+ fmt.adoptInsteadAndCheckErrorCode(new SimpleDateFormat((UnicodeString)"MM d", status), status);
assertSuccess("SimpleDateFormat with pattern MM d", status);
NumberFormat* overrideNF = NumberFormat::createInstance(Locale::createFromName("zh@numbers=hanidays"),status);
assertSuccess("NumberFormat zh@numbers=hanidays", status);
@@ -4537,6 +4712,130 @@ void DateFormatTest::TestNumberFormatOverride() {
errln("FAIL: Expected " + expected + " get: " + result);
}
}
+
+void DateFormatTest::TestCreateInstanceForSkeleton() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<DateFormat> fmt(DateFormat::createInstanceForSkeleton(
+ "yMMMMd", "en", status));
+ if (!assertSuccess("Create with pattern yMMMMd", status)) {
+ return;
+ }
+ UnicodeString result;
+ FieldPosition pos(0);
+ fmt->format(date(98, 5-1, 25), result, pos);
+ assertEquals("format yMMMMd", "May 25, 1998", result);
+ fmt.adoptInstead(DateFormat::createInstanceForSkeleton(
+ "yMd", "en", status));
+ if (!assertSuccess("Create with pattern yMd", status)) {
+ return;
+ }
+ result.remove();
+ fmt->format(date(98, 5-1, 25), result, pos);
+ assertEquals("format yMd", "5/25/1998", result);
+}
+
+void DateFormatTest::TestCreateInstanceForSkeletonDefault() {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale savedLocale;
+ Locale::setDefault(Locale::getUS(), status);
+ LocalPointer<DateFormat> fmt(DateFormat::createInstanceForSkeleton(
+ "yMMMd", status));
+ Locale::setDefault(savedLocale, status);
+ if (!assertSuccess("Create with pattern yMMMd", status)) {
+ return;
+ }
+ UnicodeString result;
+ FieldPosition pos(0);
+ fmt->format(date(98, 5-1, 25), result, pos);
+ assertEquals("format yMMMd", "May 25, 1998", result);
+}
+
+void DateFormatTest::TestCreateInstanceForSkeletonWithCalendar() {
+ UErrorCode status = U_ZERO_ERROR;
+ LocalPointer<DateFormat> fmt(
+ DateFormat::createInstanceForSkeleton(
+ Calendar::createInstance(
+ TimeZone::createTimeZone("GMT-3:00"),
+ status),
+ "yMdHm", "en", status));
+ if (!assertSuccess("Create with pattern yMMMMd", status)) {
+ return;
+ }
+ UnicodeString result;
+ FieldPosition pos(0);
+
+ LocalPointer<Calendar> cal(Calendar::createInstance(
+ TimeZone::createTimeZone("GMT-7:00"),
+ status));
+ if (!assertSuccess("Creating GMT-7 time zone failed", status)) {
+ return;
+ }
+ cal->clear();
+ cal->set(1998, 5-1, 25, 0, 0, 0);
+
+ // date format time zone should be 4 hours ahead.
+ fmt->format(cal->getTime(status), result, pos);
+ assertEquals("format yMdHm", "5/25/1998, 04:00", result);
+ assertSuccess("", status);
+}
+
+void DateFormatTest::TestDFSCreateForLocaleNonGregorianLocale() {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale fa("fa");
+ LocalPointer<DateFormatSymbols> sym(
+ DateFormatSymbols::createForLocale(fa, status));
+ if (!assertSuccess("", status)) {
+ return;
+ }
+
+ // Farsi should default to the persian calendar, not gregorian
+ int32_t count;
+ const UnicodeString *months = sym->getShortMonths(count);
+
+ // First persian month.
+ UnicodeString expected("\\u0641\\u0631\\u0648\\u0631\\u062f\\u06cc\\u0646");
+ assertEquals("", expected.unescape(), months[0]);
+}
+
+void DateFormatTest::TestDFSCreateForLocaleWithCalendarInLocale() {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale en_heb("en@calendar=hebrew");
+ LocalPointer<DateFormatSymbols> sym(
+ DateFormatSymbols::createForLocale(en_heb, status));
+ if (!assertSuccess("", status)) {
+ return;
+ }
+
+ // We should get the months of the hebrew calendar, not the gregorian
+ // calendar.
+ int32_t count;
+ const UnicodeString *months = sym->getShortMonths(count);
+
+ // First hebrew month.
+ UnicodeString expected("Tishri");
+ assertEquals("", expected, months[0]);
+}
+
+void DateFormatTest::TestChangeCalendar() {
+ UErrorCode status = U_ZERO_ERROR;
+ Locale en("en");
+ Locale en_heb("en@calendar=hebrew");
+ LocalPointer<DateFormat> fmt(
+ DateFormat::createInstanceForSkeleton("yMMMd", en, status));
+ if (!assertSuccess("", status)) {
+ return;
+ }
+ fmt->adoptCalendar(Calendar::createInstance(en_heb, status));
+ if (!assertSuccess("", status)) {
+ return;
+ }
+ UnicodeString result;
+ FieldPosition pos(0);
+ fmt->format(date(98, 5-1, 25), result, pos);
+ assertEquals("format yMMMd", "Iyar 29, 5758", result);
+}
+
+
#endif /* #if !UCONFIG_NO_FORMATTING */
//eof
« no previous file with comments | « source/test/intltest/dtfmttst.h ('k') | source/test/intltest/dtifmtts.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698