From 3ca0f3beebb238ba0761109f2c61c3234a11e25b Mon Sep 17 00:00:00 2001 From: Peter Edberg <pedberg@unicode.org> Date: Wed, 28 Feb 2018 07:26:03 +0000 Subject: [PATCH] ICU-12740 getFieldDisplayName C++ tests X-SVN-Rev: 41012 --- icu4c/source/test/cintltst/udatpg_test.c | 4 +- icu4c/source/test/intltest/dtptngts.cpp | 49 ++++++++++++++++++++++++ icu4c/source/test/intltest/dtptngts.h | 1 + 3 files changed, 52 insertions(+), 2 deletions(-) diff --git a/icu4c/source/test/cintltst/udatpg_test.c b/icu4c/source/test/cintltst/udatpg_test.c index a594560290e..2338a2f687f 100644 --- a/icu4c/source/test/cintltst/udatpg_test.c +++ b/icu4c/source/test/cintltst/udatpg_test.c @@ -456,9 +456,9 @@ static void TestGetFieldDisplayNames() { { "de", UDATPG_QUARTER_FIELD, UDATPG_NARROW, "Q" }, { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_WIDE, "weekday of the month" }, { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_ABBREVIATED, "wkday. of mo." }, - { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_NARROW, "wkday. of mo." }, + { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_NARROW, "wkday. of mo." }, // fallback { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_WIDE, "weekday of the month" }, - { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_ABBREVIATED, "wkday of mo" }, + { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_ABBREVIATED, "wkday of mo" }, // override { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_NARROW, "wkday of mo" }, { "it", UDATPG_SECOND_FIELD, UDATPG_WIDE, "secondo" }, { "it", UDATPG_SECOND_FIELD, UDATPG_ABBREVIATED, "s" }, diff --git a/icu4c/source/test/intltest/dtptngts.cpp b/icu4c/source/test/intltest/dtptngts.cpp index 33d248d5f31..da262ba99e4 100644 --- a/icu4c/source/test/intltest/dtptngts.cpp +++ b/icu4c/source/test/intltest/dtptngts.cpp @@ -18,6 +18,7 @@ #include "unicode/smpdtfmt.h" #include "unicode/dtfmtsym.h" #include "unicode/dtptngen.h" +#include "unicode/ustring.h" #include "cmemory.h" #include "loctest.h" @@ -36,6 +37,7 @@ void IntlTestDateTimePatternGeneratorAPI::runIndexedTest( int32_t index, UBool e TESTCASE(3, testStaticGetSkeleton); TESTCASE(4, testC); TESTCASE(5, testSkeletonsWithDayPeriods); + TESTCASE(6, testGetFieldDisplayNames); default: name = ""; break; } } @@ -1210,4 +1212,51 @@ void IntlTestDateTimePatternGeneratorAPI::testSkeletonsWithDayPeriods() { delete gen; } +typedef struct FieldDisplayNameData { + const char * locale; + UDateTimePatternField field; + UDateTimePGDisplayWidth width; + const char * expected; // can have escapes such as \\u00E0 +} FieldDisplayNameData; +enum { kFieldDisplayNameMax = 32 }; + +void IntlTestDateTimePatternGeneratorAPI::testGetFieldDisplayNames() { + const FieldDisplayNameData testData[] = { + /*loc field width expectedName */ + { "de", UDATPG_QUARTER_FIELD, UDATPG_WIDE, "Quartal" }, + { "de", UDATPG_QUARTER_FIELD, UDATPG_ABBREVIATED, "Quart." }, + { "de", UDATPG_QUARTER_FIELD, UDATPG_NARROW, "Q" }, + { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_WIDE, "weekday of the month" }, + { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_ABBREVIATED, "wkday. of mo." }, + { "en", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_NARROW, "wkday. of mo." }, // fallback + { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_WIDE, "weekday of the month" }, + { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_ABBREVIATED, "wkday of mo" }, // override + { "en_GB", UDATPG_DAY_OF_WEEK_IN_MONTH_FIELD, UDATPG_NARROW, "wkday of mo" }, + { "it", UDATPG_SECOND_FIELD, UDATPG_WIDE, "secondo" }, + { "it", UDATPG_SECOND_FIELD, UDATPG_ABBREVIATED, "s" }, + { "it", UDATPG_SECOND_FIELD, UDATPG_NARROW, "s" }, + }; + + int count = UPRV_LENGTHOF(testData); + const FieldDisplayNameData * testDataPtr = testData; + for (; count-- > 0; ++testDataPtr) { + UErrorCode status = U_ZERO_ERROR; + Locale locale(testDataPtr->locale); + DateTimePatternGenerator * dtpg = DateTimePatternGenerator::createInstance(locale, status); + if (U_FAILURE(status)) { + dataerrln("FAIL: DateTimePatternGenerator::createInstance failed for locale %s", testDataPtr->locale); + } else { + UChar expName[kFieldDisplayNameMax+1]; + u_unescape(testDataPtr->expected, expName, kFieldDisplayNameMax); + expName[kFieldDisplayNameMax] = 0; // ensure 0 termination + UnicodeString getName = dtpg->getFieldDisplayName(testDataPtr->field, testDataPtr->width); + if (getName.compare(expName, u_strlen(expName)) != 0) { + errln("ERROR: locale %s field %d width %d, expected %s\n", + testDataPtr->locale, testDataPtr->field, testDataPtr->width, testDataPtr->expected); + } + delete dtpg; + } + } +} + #endif /* #if !UCONFIG_NO_FORMATTING */ diff --git a/icu4c/source/test/intltest/dtptngts.h b/icu4c/source/test/intltest/dtptngts.h index 03da8485984..adef0dca5cf 100644 --- a/icu4c/source/test/intltest/dtptngts.h +++ b/icu4c/source/test/intltest/dtptngts.h @@ -31,6 +31,7 @@ private: void testStaticGetSkeleton(/* char* par */); void testC(); void testSkeletonsWithDayPeriods(); + void testGetFieldDisplayNames(); }; #endif /* #if !UCONFIG_NO_FORMATTING */ -- 2.40.0