summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp')
-rw-r--r--Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp149
1 files changed, 148 insertions, 1 deletions
diff --git a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
index 6fe8af05b60..dde9d4dd3ac 100644
--- a/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
+++ b/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
@@ -46,6 +46,7 @@ void IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool e
TESTCASE(10, testGetDefaultHourCycle_OnEmptyInstance);
TESTCASE(11, test_jConsistencyOddLocales);
TESTCASE(12, testBestPattern);
+ TESTCASE(13, testDateTimePatterns);
default: name = ""; break;
}
}
@@ -530,7 +531,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
format->applyPattern(gen->getBestPattern(UnicodeString("MMMMdHmm"), status));
dateReturned.remove();
dateReturned = format->format(sampleDate, dateReturned, status);
- expectedResult=UnicodeString("14. von Oktober, 08:58", -1, US_INV);
+ expectedResult=UnicodeString("14. von Oktober um 08:58", -1, US_INV);
if ( dateReturned != expectedResult ) {
errln(UnicodeString("ERROR: Simple test addPattern failed!: d\'. von\' MMMM Got: ") + dateReturned + UnicodeString(" Expected: ") + expectedResult);
}
@@ -1631,4 +1632,150 @@ void IntlTestDateTimePatternGeneratorAPI::testBestPattern() {
}
}
+void IntlTestDateTimePatternGeneratorAPI::testDateTimePatterns() {
+ UnicodeString skeletons[kNumDateTimePatterns] = {
+ UnicodeString("yMMMMEEEEdjmm"), // full date, short time
+ UnicodeString("yMMMMdjmm"), // long date, short time
+ UnicodeString("yMMMdjmm"), // medium date, short time
+ UnicodeString("yMdjmm") // short date, short time
+ };
+ // The following tests some locales in which there are differences between the
+ // DateTimePatterns of various length styles.
+ DTPLocaleAndResults localeAndResults[] = {
+ { "en", { UnicodeString(u"EEEE, MMMM d, y 'at' h:mm a"), // long != medium
+ UnicodeString(u"MMMM d, y 'at' h:mm a"),
+ UnicodeString(u"MMM d, y, h:mm a"),
+ UnicodeString(u"M/d/y, h:mm a") } },
+ { "fr", { UnicodeString(u"EEEE d MMMM y 'à' HH:mm"), // medium != short
+ UnicodeString(u"d MMMM y 'à' HH:mm"),
+ UnicodeString(u"d MMM y, HH:mm"),
+ UnicodeString(u"dd/MM/y HH:mm") } },
+ { "ha", { UnicodeString(u"EEEE d MMMM, y HH:mm"), // full != long
+ UnicodeString(u"d MMMM, y 'da' HH:mm"),
+ UnicodeString(u"d MMM, y, HH:mm"),
+ UnicodeString(u"y-MM-dd, HH:mm") } },
+ { nullptr, { UnicodeString(""), UnicodeString(""), // terminator
+ UnicodeString(""), UnicodeString("") } },
+ };
+
+ UnicodeString enDTPatterns[kNumDateTimePatterns] = {
+ UnicodeString(u"{1} 'at' {0}"),
+ UnicodeString(u"{1} 'at' {0}"),
+ UnicodeString(u"{1}, {0}"),
+ UnicodeString(u"{1}, {0}")
+ };
+ UnicodeString modDTPatterns[kNumDateTimePatterns] = {
+ UnicodeString(u"{1} _0_ {0}"),
+ UnicodeString(u"{1} _1_ {0}"),
+ UnicodeString(u"{1} _2_ {0}"),
+ UnicodeString(u"{1} _3_ {0}")
+ };
+ DTPLocaleAndResults enModResults = { "en", { UnicodeString(u"EEEE, MMMM d, y _0_ h:mm a"),
+ UnicodeString(u"MMMM d, y _1_ h:mm a"),
+ UnicodeString(u"MMM d, y _2_ h:mm a"),
+ UnicodeString(u"M/d/y _3_ h:mm a") }
+ };
+
+ // Test various locales with standard data
+ UErrorCode status;
+ LocalPointer<DateTimePatternGenerator> dtpg;
+ DTPLocaleAndResults* localeAndResultsPtr = localeAndResults;
+ for (; localeAndResultsPtr->localeID != nullptr; localeAndResultsPtr++) {
+ status = U_ZERO_ERROR;
+ Locale locale(localeAndResultsPtr->localeID);
+ dtpg.adoptInstead(DateTimePatternGenerator::createInstance(locale, status));
+ if (U_FAILURE(status)) {
+ dataerrln("FAIL: DateTimePatternGenerator::createInstance for locale %s: %s",
+ localeAndResultsPtr->localeID, u_errorName(status));
+ } else {
+ doDTPatternTest(dtpg.getAlias(), skeletons, localeAndResultsPtr);
+ }
+ }
+ // Test getting and modifying date-time combining patterns
+ status = U_ZERO_ERROR;
+ dtpg.adoptInstead(DateTimePatternGenerator::createInstance(Locale::getEnglish(), status));
+ if (U_FAILURE(status)) {
+ dataerrln("FAIL: DateTimePatternGenerator::createInstance #2 for locale en: %s", u_errorName(status));
+ } else {
+ char bExpect[64];
+ char bGet[64];
+ // Test style out of range
+ status = U_ZERO_ERROR;
+ const UnicodeString& dtFormat0 = dtpg->getDateTimeFormat(UDAT_NONE, status);
+ int32_t dtFormat0Len = dtFormat0.length();
+ if (status != U_ILLEGAL_ARGUMENT_ERROR || dtFormat0Len != 0) {
+ errln("ERROR: getDateTimeFormat with invalid style, expected U_ILLEGAL_ARGUMENT_ERROR and lero-length string, "
+ "got %s with length %d", u_errorName(status), dtFormat0Len);
+ }
+ // Test normal getting and setting
+ for (int32_t patStyle = 0; patStyle < kNumDateTimePatterns; patStyle++) {
+ status = U_ZERO_ERROR;
+ const UnicodeString& dtFormat1 = dtpg->getDateTimeFormat((UDateFormatStyle)patStyle, status);
+ if (U_FAILURE(status)) {
+ errln("FAIL: getDateTimeFormat for en before mod, style %d, get %s", patStyle, u_errorName(status));
+ } else if (dtFormat1 != enDTPatterns[patStyle]) {
+ enDTPatterns[patStyle].extract(0, enDTPatterns[patStyle].length(), bExpect, 64);
+ dtFormat1.extract(0, dtFormat1.length(), bGet, 64);
+ errln("ERROR: getDateTimeFormat for en before mod, style %d, expect \"%s\", get \"%s\"",
+ patStyle, bExpect, bGet);
+ }
+ status = U_ZERO_ERROR;
+ dtpg->setDateTimeFormat((UDateFormatStyle)patStyle, modDTPatterns[patStyle], status);
+ if (U_FAILURE(status)) {
+ errln("FAIL: setDateTimeFormat for en, style %d, get %s", patStyle, u_errorName(status));
+ } else {
+ const UnicodeString& dtFormat2 = dtpg->getDateTimeFormat((UDateFormatStyle)patStyle, status);
+ if (U_FAILURE(status)) {
+ errln("FAIL: getDateTimeFormat for en after mod, style %d, get %s", patStyle, u_errorName(status));
+ } else if (dtFormat2 != modDTPatterns[patStyle]) {
+ modDTPatterns[patStyle].extract(0, modDTPatterns[patStyle].length(), bExpect, 64);
+ dtFormat2.extract(0, dtFormat2.length(), bGet, 64);
+ errln("ERROR: getDateTimeFormat for en after mod, style %d, expect \"%s\", get \"%s\"",
+ patStyle, bExpect, bGet);
+ }
+ }
+ }
+ // Test result of setting
+ doDTPatternTest(dtpg.getAlias(), skeletons, &enModResults);
+ // Test old get/set functions
+ const UnicodeString& dtFormat3 = dtpg->getDateTimeFormat();
+ if (dtFormat3 != modDTPatterns[UDAT_MEDIUM]) {
+ modDTPatterns[UDAT_MEDIUM].extract(0, modDTPatterns[UDAT_MEDIUM].length(), bExpect, 64);
+ dtFormat3.extract(0, dtFormat3.length(), bGet, 64);
+ errln("ERROR: old getDateTimeFormat for en after mod, expect \"%s\", get \"%s\"", bExpect, bGet);
+ }
+ dtpg->setDateTimeFormat(modDTPatterns[UDAT_SHORT]); // set all dateTimePatterns to the short format
+ modDTPatterns[UDAT_SHORT].extract(0, modDTPatterns[UDAT_SHORT].length(), bExpect, 64);
+ for (int32_t patStyle = 0; patStyle < kNumDateTimePatterns; patStyle++) {
+ status = U_ZERO_ERROR;
+ const UnicodeString& dtFormat4 = dtpg->getDateTimeFormat((UDateFormatStyle)patStyle, status);
+ if (U_FAILURE(status)) {
+ errln("FAIL: getDateTimeFormat for en after second mod, style %d, get %s", patStyle, u_errorName(status));
+ } else if (dtFormat4 != modDTPatterns[UDAT_SHORT]) {
+ dtFormat4.extract(0, dtFormat4.length(), bGet, 64);
+ errln("ERROR: getDateTimeFormat for en after second mod, style %d, expect \"%s\", get \"%s\"",
+ patStyle, bExpect, bGet);
+ }
+ }
+ }
+}
+
+void IntlTestDateTimePatternGeneratorAPI::doDTPatternTest(DateTimePatternGenerator* dtpg, UnicodeString* skeletons, DTPLocaleAndResults* localeAndResultsPtr) {
+ for (int32_t patStyle = 0; patStyle < kNumDateTimePatterns; patStyle++) {
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString getPat = dtpg->getBestPattern(skeletons[patStyle], UDATPG_MATCH_NO_OPTIONS, status);
+ if (U_FAILURE(status)) {
+ errln("FAIL: DateTimePatternGenerator::getBestPattern locale %s, style %d: %s",
+ localeAndResultsPtr->localeID, patStyle, u_errorName(status));
+ } else if (getPat != localeAndResultsPtr->expectPat[patStyle]) {
+ char bExpect[64];
+ char bGet[64];
+ localeAndResultsPtr->expectPat[patStyle].extract(0, localeAndResultsPtr->expectPat[patStyle].length(), bExpect, 64);
+ getPat.extract(0, getPat.length(), bGet, 64);
+ errln("ERROR: DateTimePatternGenerator::getBestPattern locale %s, style %d, expect \"%s\", get \"%s\"",
+ localeAndResultsPtr->localeID, patStyle, bExpect, bGet);
+ }
+ }
+}
+
#endif /* #if !UCONFIG_NO_FORMATTING */