]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/cintltst/cdattst.c
ICU-62135.0.1.tar.gz
[apple/icu.git] / icuSources / test / cintltst / cdattst.c
index e94c2132993d3f1ea3ba664c0029c8017dcb25b4..c2a89205f0cc993577de3fed86cae22ec4465de2 100644 (file)
@@ -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 <math.h>
 
@@ -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 }, // <rdar://problem/38826484> 
+
     { 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 }
 };