X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/f3c0d7a59d99c2a94c6b8822291f0e42be3773c9..1546d4af2ed1219a41ef4170bf188f2ab91442e6:/icuSources/test/cintltst/cdattst.c diff --git a/icuSources/test/cintltst/cdattst.c b/icuSources/test/cintltst/cdattst.c index e94c2132..c2a89205 100644 --- a/icuSources/test/cintltst/cdattst.c +++ b/icuSources/test/cintltst/cdattst.c @@ -32,7 +32,9 @@ #include "cdattst.h" #include "cformtst.h" #include "cmemory.h" +#if !U_PLATFORM_HAS_WIN32_API #include "unicode/uatimeunitformat.h" /* Apple-specific */ +#endif #include @@ -43,10 +45,13 @@ static void TestContext(void); static void TestCalendarDateParse(void); static void TestParseErrorReturnValue(void); static void TestFormatForFields(void); +static void TestForceGannenNumbering(void); static void TestStandardPatterns(void); static void TestApplyPatnOverridesTimeSep(void); static void Test12HrFormats(void); +#if !U_PLATFORM_HAS_WIN32_API static void TestTimeUnitFormat(void); /* Apple-specific */ +#endif static void TestRemapPatternWithOpts(void); /* Apple-specific */ void addDateForTest(TestNode** root); @@ -67,10 +72,13 @@ void addDateForTest(TestNode** root) TESTCASE(TestOverrideNumberFormat); TESTCASE(TestParseErrorReturnValue); TESTCASE(TestFormatForFields); + TESTCASE(TestForceGannenNumbering); TESTCASE(TestStandardPatterns); TESTCASE(TestApplyPatnOverridesTimeSep); TESTCASE(Test12HrFormats); +#if !U_PLATFORM_HAS_WIN32_API TESTCASE(TestTimeUnitFormat); /* Apple-specific */ +#endif TESTCASE(TestRemapPatternWithOpts); /* Apple-specific */ } /* Testing the DateFormat API */ @@ -1931,6 +1939,44 @@ static void TestFormatForFields(void) { } } +static void TestForceGannenNumbering(void) { + UErrorCode status; + const char* locID = "ja_JP@calendar=japanese"; + UDate refDate = 600336000000.0; // 1989 Jan 9 Monday = Heisei 1 + const UChar* testSkeleton = u"yMMMd"; + + // Test Gannen year forcing + status = U_ZERO_ERROR; + UDateTimePatternGenerator* dtpgen = udatpg_open(locID, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udatpg_open locale %s: %s", locID, u_errorName(status)); + } else { + UChar pattern[kUbufMax]; + int32_t patlen = udatpg_getBestPattern(dtpgen, testSkeleton, -1, pattern, kUbufMax, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udatpg_getBestPattern locale %s: %s", locID, u_errorName(status)); + } else { + UDateFormat *testFmt = udat_open(UDAT_PATTERN, UDAT_PATTERN, locID, NULL, 0, pattern, patlen, &status); + if (U_FAILURE(status)) { + log_data_err("Fail in udat_open locale %s: %s", locID, u_errorName(status)); + } else { + UChar testString[kUbufMax]; + int32_t testStrLen = udat_format(testFmt, refDate, testString, kUbufMax, NULL, &status); + if (U_FAILURE(status)) { + log_err("Fail in udat_format locale %s: %s", locID, u_errorName(status)); + } else if (testStrLen < 3 || testString[2] != 0x5143) { + char bbuf[kBbufMax]; + UErrorCode convStatus = U_ZERO_ERROR; + u_strToUTF8(bbuf, kBbufMax, NULL, testString, testStrLen, &convStatus); + log_err("Formatting year 1 as Gannen, (conv status %s) got %s but expected 3rd char to be 0x5143", u_errorName(convStatus), bbuf); + } + udat_close(testFmt); + } + } + udatpg_close(dtpgen); + } +} + /* defined above static const UChar zoneGMT[] = { 0x47,0x4D,0x54,0 }; // "GMT" static const UDate date2015Feb25 = 1424841000000.0; // Wednesday, February 25, 2015 at 5:10:00 AM GMT @@ -1945,8 +1991,8 @@ typedef struct { static const StandardPatternItem stdPatternItems[] = { { "en_JP", UDAT_MEDIUM, UDAT_SHORT, "Feb 25, 2015 5:10" }, - { "en_CN", UDAT_MEDIUM, UDAT_SHORT, "25 Feb 2015 at 5:10 AM" }, - { "en_TW", UDAT_MEDIUM, UDAT_SHORT, "25 Feb 2015 at 5:10 AM" }, + { "en_CN", UDAT_MEDIUM, UDAT_SHORT, "Feb 25, 2015 at 5:10 AM" }, + { "en_TW", UDAT_MEDIUM, UDAT_SHORT, "Feb 25, 2015 at 5:10 AM" }, { "en_KR", UDAT_MEDIUM, UDAT_SHORT, "25 Feb 2015 at 5:10 AM" }, { NULL, (UDateFormatStyle)0, (UDateFormatStyle)0, NULL } /* terminator */ }; @@ -2151,6 +2197,7 @@ static void Test12HrFormats(void) { } } +#if !U_PLATFORM_HAS_WIN32_API /* *** */ typedef struct { @@ -2235,6 +2282,7 @@ static void TestTimeUnitFormat(void) { /* Apple-specific */ } } +#endif typedef enum RemapTesttype { REMAP_TESTTYPE_FULL = UDAT_FULL, // 0 @@ -2310,6 +2358,10 @@ static const RemapPatternTestItem remapPatItems[] = { { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", REMAP_TESTTYPE_PATTERN, UADATPG_FORCE_24_HOUR_CYCLE }, { "EEE, d MMM y 'aha' H'h'mm'm'ss", REMAP_TESTTYPE_PATTERN, UADATPG_FORCE_12_HOUR_CYCLE }, { "EEE, d MMM y 'aha' H'h'mm'm'ss", REMAP_TESTTYPE_PATTERN, UADATPG_FORCE_24_HOUR_CYCLE }, + + // special cases per bugs + { "uuuu-MM-dd HH:mm:ss '+0000'", REMAP_TESTTYPE_PATTERN, UADATPG_FORCE_12_HOUR_CYCLE }, // + { NULL, (RemapTesttype)0, 0 } }; @@ -2370,6 +2422,9 @@ static const char * remapResults_root[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' h'h'mm'm'ss a", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd h:mm:ss a '+0000'", // + NULL }; @@ -2430,6 +2485,9 @@ static const char * remapResults_en[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' h'h'mm'm'ss a", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd h:mm:ss a '+0000'", // + NULL }; @@ -2490,6 +2548,9 @@ static const char * remapResults_ja[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' aK'h'mm'm'ss", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd aK:mm:ss '+0000'", // + NULL }; @@ -2550,6 +2611,9 @@ static const char * remapResults_ko[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' a h'h'mm'm'ss", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd a h:mm:ss '+0000'", // + NULL }; @@ -2610,6 +2674,9 @@ static const char * remapResults_th[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' h'h'mm'm'ss a", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd h:mm:ss a '+0000'", // + NULL }; @@ -2670,6 +2737,9 @@ static const char * remapResults_hi[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' a h'h'mm'm'ss", // "EEE, d MMM y 'aha' H'h'mm'm'ss" "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd a h:mm:ss '+0000'", // + NULL }; @@ -2730,6 +2800,72 @@ static const char * remapResults_ar[] = { "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // "EEE, d MMM y 'aha' h'h'mm'm'ssa", // "EEE, d MMM y 'aha' H'h'mm'm'ss" (should there be \\u00A0 before a?) "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd h:mm:ss\\u00A0a '+0000'", // + + NULL +}; + +static const char * remapResults_en_IL[] = { + "H:mm:ss zzzz", // full + "H:mm:ss zzzz", // force24 + "h:mm:ss a zzzz", // force12 + "H:mm:ss z", // long + "H:mm:ss z", // force24 + "h:mm:ss a z", // force12 + "H:mm:ss", // medium + "H:mm:ss", // force24 + "h:mm:ss a", // force12 + "H:mm", // short + "H:mm", // force24 + "h:mm a", // force12 + "EEEE, d MMMM y 'at' H:mm:ss z", // long_df + "EEEE, d MMMM y 'at' H:mm:ss z", // force24 + "EEEE, d MMMM y 'at' h:mm:ss a z", // force12 + "dd/MM/y, H:mm", // short_ds + "dd/MM/y, H:mm", // force24 + "dd/MM/y, h:mm a", // force12 + + "H:mm:ss", // jmmss + "H:mm:ss", // force24 + "h:mm:ss a", // force12 + "H:mm:ss", // jjmmss + "H:mm:ss", // force24 + "HH:mm:ss", // force24 | match hour field length + "h:mm:ss a", // force12 + "hh:mm:ss a", // force12 | match hour field length + "H:mm", // Jmm + "H:mm", // force24 + "h:mm", // force12 + "H:mm:ss v", // jmsv + "H:mm:ss v", // force24 + "h:mm:ss a v", // force12 + "H:mm:ss z", // jmsz + "H:mm:ss z", // force24 + "h:mm:ss a z", // force12 + + "h:mm:ss a", // "h:mm:ss" + "H:mm:ss", // + "a'xx'h:mm:ss d MMM y", // "a'xx'h:mm:ss d MMM y" + "H:mm:ss d MMM y", // + "EEE, d MMM y 'aha' h:mm:ss a 'hrs'", // "EEE, d MMM y 'aha' h:mm:ss a 'hrs'" + "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // + "EEE, d MMM y 'aha' a'xx'h:mm:ss", // "EEE, d MMM y 'aha' a'xx'h:mm:ss" + "EEE, d MMM y 'aha' H:mm:ss", // + "yyMMddhhmmss", // "yyMMddhhmmss" + "yyMMddHHmmss", // + + "h:mm:ss a", // "H:mm:ss" + "H:mm:ss", // + "h:mm:ss a d MMM y", // "H:mm:ss d MMM y" + "H:mm:ss d MMM y", // + "EEE, d MMM y 'aha' h:mm:ss a 'hrs'", // "EEE, d MMM y 'aha' H:mm:ss 'hrs'" + "EEE, d MMM y 'aha' H:mm:ss 'hrs'", // + "EEE, d MMM y 'aha' h'h'mm'm'ss a", // "EEE, d MMM y 'aha' H'h'mm'm'ss" + "EEE, d MMM y 'aha' H'h'mm'm'ss", // + + "uuuu-MM-dd h:mm:ss a '+0000'", // + NULL }; @@ -2746,6 +2882,7 @@ static const RemapPatternLocaleResults remapLocResults[] = { { "th", remapResults_th }, { "hi", remapResults_hi }, { "ar", remapResults_ar }, + { "en_IL", remapResults_en_IL }, { NULL, NULL } };