Index: source/test/intltest/tufmtts.cpp |
diff --git a/source/test/intltest/tufmtts.cpp b/source/test/intltest/tufmtts.cpp |
deleted file mode 100644 |
index 6b1ed5a0080f2878a43725ae3a12f3d3992164cf..0000000000000000000000000000000000000000 |
--- a/source/test/intltest/tufmtts.cpp |
+++ /dev/null |
@@ -1,528 +0,0 @@ |
-/******************************************************************** |
- * Copyright (c) 2008-2015, International Business Machines Corporation and |
- * others. All Rights Reserved. |
- ********************************************************************/ |
- |
-#include "unicode/utypes.h" |
- |
-#if !UCONFIG_NO_FORMATTING |
- |
-#include "unicode/decimfmt.h" |
-#include "unicode/tmunit.h" |
-#include "unicode/tmutamt.h" |
-#include "unicode/tmutfmt.h" |
-#include "unicode/ustring.h" |
-#include "cmemory.h" |
-#include "intltest.h" |
- |
-//TODO: put as compilation flag |
-//#define TUFMTTS_DEBUG 1 |
- |
-#ifdef TUFMTTS_DEBUG |
-#include <iostream> |
-#endif |
- |
-class TimeUnitTest : public IntlTest { |
- void runIndexedTest(int32_t index, UBool exec, const char* &name, char* /*par*/ ) { |
- if (exec) logln("TestSuite TimeUnitTest"); |
- TESTCASE_AUTO_BEGIN; |
- TESTCASE_AUTO(testBasic); |
- TESTCASE_AUTO(testAPI); |
- TESTCASE_AUTO(testGreekWithFallback); |
- TESTCASE_AUTO(testGreekWithSanitization); |
- TESTCASE_AUTO(test10219Plurals); |
- TESTCASE_AUTO(TestBritishShortHourFallback); |
- TESTCASE_AUTO_END; |
- } |
- |
-public: |
- /** |
- * Performs basic tests |
- **/ |
- void testBasic(); |
- |
- /** |
- * Performs API tests |
- **/ |
- void testAPI(); |
- |
- /** |
- * Performs tests for Greek |
- * This tests that requests for short unit names correctly fall back |
- * to long unit names for a locale where the locale data does not |
- * provide short unit names. As of CLDR 1.9, Greek is one such language. |
- **/ |
- void testGreekWithFallback(); |
- |
- /** |
- * Performs tests for Greek |
- * This tests that if the plural count listed in time unit format does not |
- * match those in the plural rules for the locale, those plural count in |
- * time unit format will be ingored and subsequently, fall back will kick in |
- * which is tested above. |
- * Without data sanitization, setNumberFormat() would crash. |
- * As of CLDR shiped in ICU4.8, Greek is one such language. |
- */ |
- void testGreekWithSanitization(); |
- |
- /** |
- * Performs unit test for ticket 10219 making sure that plurals work |
- * correctly with rounding. |
- */ |
- void test10219Plurals(); |
- |
- void TestBritishShortHourFallback(); |
-}; |
- |
-extern IntlTest *createTimeUnitTest() { |
- return new TimeUnitTest(); |
-} |
- |
-// This function is more lenient than equals operator as it considers integer 3 hours and |
-// double 3.0 hours to be equal |
-static UBool tmaEqual(const TimeUnitAmount& left, const TimeUnitAmount& right) { |
- if (left.getTimeUnitField() != right.getTimeUnitField()) { |
- return FALSE; |
- } |
- UErrorCode status = U_ZERO_ERROR; |
- if (!left.getNumber().isNumeric() || !right.getNumber().isNumeric()) { |
- return FALSE; |
- } |
- UBool result = left.getNumber().getDouble(status) == right.getNumber().getDouble(status); |
- if (U_FAILURE(status)) { |
- return FALSE; |
- } |
- return result; |
-} |
- |
-/** |
- * Test basic |
- */ |
-void TimeUnitTest::testBasic() { |
- const char* locales[] = {"en", "sl", "fr", "zh", "ar", "ru", "zh_Hant", "pa"}; |
- for ( unsigned int locIndex = 0; |
- locIndex < sizeof(locales)/sizeof(locales[0]); |
- ++locIndex ) { |
- UErrorCode status = U_ZERO_ERROR; |
- Locale loc(locales[locIndex]); |
- TimeUnitFormat** formats = new TimeUnitFormat*[2]; |
- formats[UTMUTFMT_FULL_STYLE] = new TimeUnitFormat(loc, status); |
- if (!assertSuccess("TimeUnitFormat(full)", status, TRUE)) return; |
- formats[UTMUTFMT_ABBREVIATED_STYLE] = new TimeUnitFormat(loc, UTMUTFMT_ABBREVIATED_STYLE, status); |
- if (!assertSuccess("TimeUnitFormat(short)", status)) return; |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "locale: " << locales[locIndex] << "\n"; |
-#endif |
- for (int style = UTMUTFMT_FULL_STYLE; |
- style <= UTMUTFMT_ABBREVIATED_STYLE; |
- ++style) { |
- for (TimeUnit::UTimeUnitFields j = TimeUnit::UTIMEUNIT_YEAR; |
- j < TimeUnit::UTIMEUNIT_FIELD_COUNT; |
- j = (TimeUnit::UTimeUnitFields)(j+1)) { |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "time unit: " << j << "\n"; |
-#endif |
- double tests[] = {0, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 5, 10, 100, 101.35}; |
- for (unsigned int i = 0; i < sizeof(tests)/sizeof(tests[0]); ++i) { |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "number: " << tests[i] << "\n"; |
-#endif |
- TimeUnitAmount* source = new TimeUnitAmount(tests[i], j, status); |
- if (!assertSuccess("TimeUnitAmount()", status)) return; |
- UnicodeString formatted; |
- Formattable formattable; |
- formattable.adoptObject(source); |
- formatted = ((Format*)formats[style])->format(formattable, formatted, status); |
- if (!assertSuccess("format()", status)) return; |
-#ifdef TUFMTTS_DEBUG |
- char formatResult[1000]; |
- formatted.extract(0, formatted.length(), formatResult, "UTF-8"); |
- std::cout << "format result: " << formatResult << "\n"; |
-#endif |
- Formattable result; |
- ((Format*)formats[style])->parseObject(formatted, result, status); |
- if (!assertSuccess("parseObject()", status)) return; |
- if (!tmaEqual(*((TimeUnitAmount *)result.getObject()), *((TimeUnitAmount *) formattable.getObject()))) { |
- dataerrln("No round trip: "); |
- } |
- // other style parsing |
- Formattable result_1; |
- ((Format*)formats[1-style])->parseObject(formatted, result_1, status); |
- if (!assertSuccess("parseObject()", status)) return; |
- if (!tmaEqual(*((TimeUnitAmount *)result_1.getObject()), *((TimeUnitAmount *) formattable.getObject()))) { |
- dataerrln("No round trip: "); |
- } |
- } |
- } |
- } |
- delete formats[UTMUTFMT_FULL_STYLE]; |
- delete formats[UTMUTFMT_ABBREVIATED_STYLE]; |
- delete[] formats; |
- } |
-} |
- |
- |
-void TimeUnitTest::testAPI() { |
- //================= TimeUnit ================= |
- UErrorCode status = U_ZERO_ERROR; |
- |
- TimeUnit* tmunit = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_YEAR, status); |
- if (!assertSuccess("TimeUnit::createInstance", status)) return; |
- |
- TimeUnit* another = (TimeUnit*)tmunit->clone(); |
- TimeUnit third(*tmunit); |
- TimeUnit fourth = third; |
- |
- assertTrue("orig and clone are equal", (*tmunit == *another)); |
- assertTrue("copied and assigned are equal", (third == fourth)); |
- |
- TimeUnit* tmunit_m = TimeUnit::createInstance(TimeUnit::UTIMEUNIT_MONTH, status); |
- assertTrue("year != month", (*tmunit != *tmunit_m)); |
- |
- TimeUnit::UTimeUnitFields field = tmunit_m->getTimeUnitField(); |
- assertTrue("field of month time unit is month", (field == TimeUnit::UTIMEUNIT_MONTH)); |
- |
- //===== Interoperability with MeasureUnit ====== |
- MeasureUnit **ptrs = new MeasureUnit *[TimeUnit::UTIMEUNIT_FIELD_COUNT]; |
- |
- ptrs[TimeUnit::UTIMEUNIT_YEAR] = MeasureUnit::createYear(status); |
- ptrs[TimeUnit::UTIMEUNIT_MONTH] = MeasureUnit::createMonth(status); |
- ptrs[TimeUnit::UTIMEUNIT_DAY] = MeasureUnit::createDay(status); |
- ptrs[TimeUnit::UTIMEUNIT_WEEK] = MeasureUnit::createWeek(status); |
- ptrs[TimeUnit::UTIMEUNIT_HOUR] = MeasureUnit::createHour(status); |
- ptrs[TimeUnit::UTIMEUNIT_MINUTE] = MeasureUnit::createMinute(status); |
- ptrs[TimeUnit::UTIMEUNIT_SECOND] = MeasureUnit::createSecond(status); |
- if (!assertSuccess("TimeUnit::createInstance", status)) return; |
- |
- for (TimeUnit::UTimeUnitFields j = TimeUnit::UTIMEUNIT_YEAR; |
- j < TimeUnit::UTIMEUNIT_FIELD_COUNT; |
- j = (TimeUnit::UTimeUnitFields)(j+1)) { |
- MeasureUnit *ptr = TimeUnit::createInstance(j, status); |
- if (!assertSuccess("TimeUnit::createInstance", status)) return; |
- // We have to convert *ptr to a MeasureUnit or else == will fail over |
- // differing types (TimeUnit vs. MeasureUnit). |
- assertTrue( |
- "Time unit should be equal to corresponding MeasureUnit", |
- MeasureUnit(*ptr) == *ptrs[j]); |
- delete ptr; |
- } |
- delete tmunit; |
- delete another; |
- delete tmunit_m; |
- for (int i = 0; i < TimeUnit::UTIMEUNIT_FIELD_COUNT; ++i) { |
- delete ptrs[i]; |
- } |
- delete [] ptrs; |
- |
- // |
- //================= TimeUnitAmount ================= |
- |
- Formattable formattable((int32_t)2); |
- TimeUnitAmount tma_long(formattable, TimeUnit::UTIMEUNIT_DAY, status); |
- if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return; |
- |
- formattable.setDouble(2); |
- TimeUnitAmount tma_double(formattable, TimeUnit::UTIMEUNIT_DAY, status); |
- if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return; |
- |
- formattable.setDouble(3); |
- TimeUnitAmount tma_double_3(formattable, TimeUnit::UTIMEUNIT_DAY, status); |
- if (!assertSuccess("TimeUnitAmount(formattable...)", status)) return; |
- |
- TimeUnitAmount tma(2, TimeUnit::UTIMEUNIT_DAY, status); |
- if (!assertSuccess("TimeUnitAmount(number...)", status)) return; |
- |
- TimeUnitAmount tma_h(2, TimeUnit::UTIMEUNIT_HOUR, status); |
- if (!assertSuccess("TimeUnitAmount(number...)", status)) return; |
- |
- TimeUnitAmount second(tma); |
- TimeUnitAmount third_tma = tma; |
- TimeUnitAmount* fourth_tma = (TimeUnitAmount*)tma.clone(); |
- |
- assertTrue("orig and copy are equal", (second == tma)); |
- assertTrue("clone and assigned are equal", (third_tma == *fourth_tma)); |
- assertTrue("different if number diff", (tma_double != tma_double_3)); |
- assertTrue("different if number type diff", (tma_double != tma_long)); |
- assertTrue("different if time unit diff", (tma != tma_h)); |
- assertTrue("same even different constructor", (tma_double == tma)); |
- |
- assertTrue("getTimeUnitField", (tma.getTimeUnitField() == TimeUnit::UTIMEUNIT_DAY)); |
- delete fourth_tma; |
- // |
- //================= TimeUnitFormat ================= |
- // |
- TimeUnitFormat* tmf_en = new TimeUnitFormat(Locale("en"), status); |
- if (!assertSuccess("TimeUnitFormat(en...)", status, TRUE)) return; |
- TimeUnitFormat tmf_fr(Locale("fr"), status); |
- if (!assertSuccess("TimeUnitFormat(fr...)", status)) return; |
- |
- assertTrue("TimeUnitFormat: en and fr diff", (*tmf_en != tmf_fr)); |
- |
- TimeUnitFormat tmf_assign = *tmf_en; |
- assertTrue("TimeUnitFormat: orig and assign are equal", (*tmf_en == tmf_assign)); |
- |
- TimeUnitFormat tmf_copy(tmf_fr); |
- assertTrue("TimeUnitFormat: orig and copy are equal", (tmf_fr == tmf_copy)); |
- |
- TimeUnitFormat* tmf_clone = (TimeUnitFormat*)tmf_en->clone(); |
- assertTrue("TimeUnitFormat: orig and clone are equal", (*tmf_en == *tmf_clone)); |
- delete tmf_clone; |
- |
- tmf_en->setLocale(Locale("fr"), status); |
- if (!assertSuccess("setLocale(fr...)", status)) return; |
- |
- NumberFormat* numberFmt = NumberFormat::createInstance( |
- Locale("fr"), status); |
- if (!assertSuccess("NumberFormat::createInstance()", status)) return; |
- tmf_en->setNumberFormat(*numberFmt, status); |
- if (!assertSuccess("setNumberFormat(en...)", status)) return; |
- assertTrue("TimeUnitFormat: setLocale", (*tmf_en == tmf_fr)); |
- |
- delete tmf_en; |
- |
- TimeUnitFormat* en_long = new TimeUnitFormat(Locale("en"), UTMUTFMT_FULL_STYLE, status); |
- if (!assertSuccess("TimeUnitFormat(en...)", status)) return; |
- delete en_long; |
- |
- TimeUnitFormat* en_short = new TimeUnitFormat(Locale("en"), UTMUTFMT_ABBREVIATED_STYLE, status); |
- if (!assertSuccess("TimeUnitFormat(en...)", status)) return; |
- delete en_short; |
- |
- TimeUnitFormat* format = new TimeUnitFormat(status); |
- format->setLocale(Locale("zh"), status); |
- format->setNumberFormat(*numberFmt, status); |
- if (!assertSuccess("TimeUnitFormat(en...)", status)) return; |
- delete numberFmt; |
- delete format; |
-} |
- |
-/* @bug 7902 |
- * Tests for Greek Language. |
- * This tests that requests for short unit names correctly fall back |
- * to long unit names for a locale where the locale data does not |
- * provide short unit names. As of CLDR 1.9, Greek is one such language. |
- */ |
-void TimeUnitTest::testGreekWithFallback() { |
- UErrorCode status = U_ZERO_ERROR; |
- |
- const char* locales[] = {"el-GR", "el"}; |
- TimeUnit::UTimeUnitFields tunits[] = {TimeUnit::UTIMEUNIT_SECOND, TimeUnit::UTIMEUNIT_MINUTE, TimeUnit::UTIMEUNIT_HOUR, TimeUnit::UTIMEUNIT_DAY, TimeUnit::UTIMEUNIT_MONTH, TimeUnit::UTIMEUNIT_YEAR}; |
- UTimeUnitFormatStyle styles[] = {UTMUTFMT_FULL_STYLE, UTMUTFMT_ABBREVIATED_STYLE}; |
- const int numbers[] = {1, 7}; |
- |
- const UChar oneSecond[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03bf, 0}; |
- const UChar oneSecondShort[] = {0x0031, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x002e, 0}; |
- const UChar oneMinute[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03cc, 0}; |
- const UChar oneMinuteShort[] = {0x0031, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x002e, 0}; |
- const UChar oneHour[] = {0x0031, 0x0020, 0x03ce, 0x03c1, 0x03b1, 0}; |
- const UChar oneDay[] = {0x0031, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b1, 0}; |
- const UChar oneMonth[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b1, 0x03c2, 0}; |
- const UChar oneMonthShort[] = {0x0031, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x002e, 0}; |
- const UChar oneYear[] = {0x0031, 0x0020, 0x03ad, 0x03c4, 0x03bf, 0x03c2, 0}; |
- const UChar oneYearShort[] = {0x0031, 0x0020, 0x03ad, 0x03c4, 0x002e, 0}; |
- const UChar sevenSeconds[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x03b5, 0x03c1, 0x03cc, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03b1, 0}; |
- const UChar sevenSecondsShort[] = {0x0037, 0x0020, 0x03b4, 0x03b5, 0x03c5, 0x03c4, 0x002e, 0}; |
- const UChar sevenMinutes[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x03c4, 0x03ac, 0}; |
- const UChar sevenMinutesShort[] = {0x0037, 0x0020, 0x03bb, 0x03b5, 0x03c0, 0x002e, 0}; |
- const UChar sevenHours[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x03b5, 0x03c2, 0}; |
- const UChar sevenHoursShort[] = {0x0037, 0x0020, 0x03ce, 0x03c1, 0x002e, 0}; |
- const UChar sevenDays[] = {0x0037, 0x0020, 0x03b7, 0x03bc, 0x03ad, 0x03c1, 0x03b5, 0x03c2, 0}; |
- const UChar sevenMonths[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x03b5, 0x3c2, 0}; |
- const UChar sevenMonthsShort[] = {0x0037, 0x0020, 0x03bc, 0x03ae, 0x03bd, 0x002e, 0}; |
- const UChar sevenYears[] = {0x0037, 0x0020, 0x03ad, 0x03c4, 0x03b7, 0}; |
- const UChar sevenYearsShort[] = {0x0037, 0x0020, 0x03ad, 0x03c4, 0x002e, 0}; |
- |
- const UnicodeString oneSecondStr(oneSecond); |
- const UnicodeString oneSecondShortStr(oneSecondShort); |
- const UnicodeString oneMinuteStr(oneMinute); |
- const UnicodeString oneMinuteShortStr(oneMinuteShort); |
- const UnicodeString oneHourStr(oneHour); |
- const UnicodeString oneDayStr(oneDay); |
- const UnicodeString oneMonthStr(oneMonth); |
- const UnicodeString oneMonthShortStr(oneMonthShort); |
- const UnicodeString oneYearStr(oneYear); |
- const UnicodeString oneYearShortStr(oneYearShort); |
- const UnicodeString sevenSecondsStr(sevenSeconds); |
- const UnicodeString sevenSecondsShortStr(sevenSecondsShort); |
- const UnicodeString sevenMinutesStr(sevenMinutes); |
- const UnicodeString sevenMinutesShortStr(sevenMinutesShort); |
- const UnicodeString sevenHoursStr(sevenHours); |
- const UnicodeString sevenHoursShortStr(sevenHoursShort); |
- const UnicodeString sevenDaysStr(sevenDays); |
- const UnicodeString sevenMonthsStr(sevenMonths); |
- const UnicodeString sevenMonthsShortStr(sevenMonthsShort); |
- const UnicodeString sevenYearsStr(sevenYears); |
- const UnicodeString sevenYearsShortStr(sevenYearsShort); |
- |
- const UnicodeString expected[] = { |
- oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr, |
- oneSecondShortStr, oneMinuteShortStr, oneHourStr, oneDayStr, oneMonthShortStr, oneYearShortStr, |
- sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr, |
- sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursShortStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsShortStr, |
- |
- oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr, |
- oneSecondShortStr, oneMinuteShortStr, oneHourStr, oneDayStr, oneMonthShortStr, oneYearShortStr, |
- sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr, |
- sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursShortStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsShortStr}; |
- |
- int counter = 0; |
- for ( unsigned int locIndex = 0; |
- locIndex < sizeof(locales)/sizeof(locales[0]); |
- ++locIndex ) { |
- |
- Locale l = Locale::createFromName(locales[locIndex]); |
- |
- for ( unsigned int numberIndex = 0; |
- numberIndex < sizeof(numbers)/sizeof(int); |
- ++numberIndex ) { |
- |
- for ( unsigned int styleIndex = 0; |
- styleIndex < sizeof(styles)/sizeof(styles[0]); |
- ++styleIndex ) { |
- |
- for ( unsigned int unitIndex = 0; |
- unitIndex < sizeof(tunits)/sizeof(tunits[0]); |
- ++unitIndex ) { |
- |
- TimeUnitAmount *tamt = new TimeUnitAmount(numbers[numberIndex], tunits[unitIndex], status); |
- if (U_FAILURE(status)) { |
- dataerrln("generating TimeUnitAmount Object failed."); |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "Failed to get TimeUnitAmount for " << tunits[unitIndex] << "\n"; |
-#endif |
- return; |
- } |
- |
- TimeUnitFormat *tfmt = new TimeUnitFormat(l, styles[styleIndex], status); |
- if (U_FAILURE(status)) { |
- dataerrln("generating TimeUnitAmount Object failed."); |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "Failed to get TimeUnitFormat for " << locales[locIndex] << "\n"; |
-#endif |
- return; |
- } |
- |
- Formattable fmt; |
- UnicodeString str; |
- |
- fmt.adoptObject(tamt); |
- str = ((Format *)tfmt)->format(fmt, str, status); |
- if (!assertSuccess("formatting relative time failed", status)) { |
- delete tfmt; |
-#ifdef TUFMTTS_DEBUG |
- std::cout << "Failed to format" << "\n"; |
-#endif |
- return; |
- } |
- |
-#ifdef TUFMTTS_DEBUG |
- char tmp[128]; //output |
- char tmp1[128]; //expected |
- int len = 0; |
- u_strToUTF8(tmp, 128, &len, str.getTerminatedBuffer(), str.length(), &status); |
- u_strToUTF8(tmp1, 128, &len, expected[counter].unescape().getTerminatedBuffer(), expected[counter].unescape().length(), &status); |
- std::cout << "Formatted string : " << tmp << " expected : " << tmp1 << "\n"; |
-#endif |
- if (!assertEquals("formatted time string is not expected, locale: " + UnicodeString(locales[locIndex]) + " style: " + (int)styles[styleIndex] + " units: " + (int)tunits[unitIndex], expected[counter], str)) { |
- delete tfmt; |
- str.remove(); |
- return; |
- } |
- delete tfmt; |
- str.remove(); |
- ++counter; |
- } |
- } |
- } |
- } |
-} |
- |
-// Test bug9042 |
-void TimeUnitTest::testGreekWithSanitization() { |
- |
- UErrorCode status = U_ZERO_ERROR; |
- Locale elLoc("el"); |
- NumberFormat* numberFmt = NumberFormat::createInstance(Locale("el"), status); |
- if (!assertSuccess("NumberFormat::createInstance for el locale", status, TRUE)) return; |
- numberFmt->setMaximumFractionDigits(1); |
- |
- TimeUnitFormat* timeUnitFormat = new TimeUnitFormat(elLoc, status); |
- if (!assertSuccess("TimeUnitFormat::TimeUnitFormat for el locale", status)) return; |
- |
- timeUnitFormat->setNumberFormat(*numberFmt, status); |
- |
- delete numberFmt; |
- delete timeUnitFormat; |
-} |
- |
-void TimeUnitTest::test10219Plurals() { |
- Locale usLocale("en_US"); |
- double values[2] = {1.588, 1.011}; |
- UnicodeString expected[2][3] = { |
- {"1 minute", "1.5 minutes", "1.58 minutes"}, |
- {"1 minute", "1.0 minutes", "1.01 minutes"} |
- }; |
- UErrorCode status = U_ZERO_ERROR; |
- TimeUnitFormat tuf(usLocale, status); |
- if (U_FAILURE(status)) { |
- dataerrln("generating TimeUnitFormat Object failed: %s", u_errorName(status)); |
- return; |
- } |
- LocalPointer<DecimalFormat> nf((DecimalFormat *) NumberFormat::createInstance(usLocale, status)); |
- if (U_FAILURE(status)) { |
- dataerrln("generating NumberFormat Object failed: %s", u_errorName(status)); |
- return; |
- } |
- for (int32_t j = 0; j < UPRV_LENGTHOF(values); ++j) { |
- for (int32_t i = 0; i < UPRV_LENGTHOF(expected[j]); ++i) { |
- nf->setMinimumFractionDigits(i); |
- nf->setMaximumFractionDigits(i); |
- nf->setRoundingMode(DecimalFormat::kRoundDown); |
- tuf.setNumberFormat(*nf, status); |
- if (U_FAILURE(status)) { |
- dataerrln("setting NumberFormat failed: %s", u_errorName(status)); |
- return; |
- } |
- UnicodeString actual; |
- Formattable fmt; |
- LocalPointer<TimeUnitAmount> tamt( |
- new TimeUnitAmount(values[j], TimeUnit::UTIMEUNIT_MINUTE, status), status); |
- if (U_FAILURE(status)) { |
- dataerrln("generating TimeUnitAmount Object failed: %s", u_errorName(status)); |
- return; |
- } |
- fmt.adoptObject(tamt.orphan()); |
- tuf.format(fmt, actual, status); |
- if (U_FAILURE(status)) { |
- dataerrln("Actual formatting failed: %s", u_errorName(status)); |
- return; |
- } |
- if (expected[j][i] != actual) { |
- errln("Expected " + expected[j][i] + ", got " + actual); |
- } |
- } |
- } |
- |
- // test parsing |
- Formattable result; |
- ParsePosition pos; |
- UnicodeString formattedString = "1 minutes"; |
- tuf.parseObject(formattedString, result, pos); |
- if (formattedString.length() != pos.getIndex()) { |
- errln("Expect parsing to go all the way to the end of the string."); |
- } |
-} |
- |
-void TimeUnitTest::TestBritishShortHourFallback() { |
- // See ticket #11986 "incomplete fallback in MeasureFormat". |
- UErrorCode status = U_ZERO_ERROR; |
- Formattable oneHour(new TimeUnitAmount(1, TimeUnit::UTIMEUNIT_HOUR, status)); |
- Locale en_GB("en_GB"); |
- TimeUnitFormat formatter(en_GB, UTMUTFMT_ABBREVIATED_STYLE, status); |
- UnicodeString result; |
- formatter.format(oneHour, result, status); |
- assertSuccess("TestBritishShortHourFallback()", status); |
- assertEquals("TestBritishShortHourFallback()", UNICODE_STRING_SIMPLE("1 hr"), result); |
-} |
- |
-#endif |