#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>
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);
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 */
}
}
+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
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 */
};
}
}
+#if !U_PLATFORM_HAS_WIN32_API
/* *** */
typedef struct {
}
}
+#endif
typedef enum RemapTesttype {
REMAP_TESTTYPE_FULL = UDAT_FULL, // 0
{ "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 }
};
"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
};
"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
};
"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
};
"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
};
"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
};
"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
};
"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
};
{ "th", remapResults_th },
{ "hi", remapResults_hi },
{ "ar", remapResults_ar },
+ { "en_IL", remapResults_en_IL },
{ NULL, NULL }
};