Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Unified Diff: source/test/intltest/tufmtts.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/test/intltest/tufmtts.h ('k') | source/test/intltest/tzfmttst.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/intltest/tufmtts.cpp
diff --git a/source/test/intltest/tufmtts.cpp b/source/test/intltest/tufmtts.cpp
index ee4339a045f926f9308a23df1255b14d2856e245..9a814d22fa62dffff9cbe7eb2ba16a3c62340552 100644
--- a/source/test/intltest/tufmtts.cpp
+++ b/source/test/intltest/tufmtts.cpp
@@ -1,5 +1,5 @@
/********************************************************************
- * Copyright (c) 2008-2013, International Business Machines Corporation and
+ * Copyright (c) 2008-2014, International Business Machines Corporation and
* others. All Rights Reserved.
********************************************************************/
@@ -7,10 +7,12 @@
#if !UCONFIG_NO_FORMATTING
+#include "unicode/decimfmt.h"
#include "unicode/tmunit.h"
#include "unicode/tmutamt.h"
#include "unicode/tmutfmt.h"
#include "tufmtts.h"
+#include "cmemory.h"
#include "unicode/ustring.h"
//TODO: put as compilation flag
@@ -27,10 +29,28 @@ void TimeUnitTest::runIndexedTest( int32_t index, UBool exec, const char* &name,
TESTCASE(1, testAPI);
TESTCASE(2, testGreekWithFallback);
TESTCASE(3, testGreekWithSanitization);
+ TESTCASE(4, test10219Plurals);
default: name = ""; break;
}
}
+// 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
*/
@@ -78,14 +98,14 @@ void TimeUnitTest::testBasic() {
Formattable result;
((Format*)formats[style])->parseObject(formatted, result, status);
if (!assertSuccess("parseObject()", status)) return;
- if (result != formattable) {
+ 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 (result_1 != formattable) {
+ if (!tmaEqual(*((TimeUnitAmount *)result_1.getObject()), *((TimeUnitAmount *) formattable.getObject()))) {
dataerrln("No round trip: ");
}
}
@@ -117,10 +137,39 @@ void TimeUnitTest::testAPI() {
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 =================
@@ -226,15 +275,18 @@ void TimeUnitTest::testGreekWithFallback() {
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);
@@ -245,24 +297,29 @@ void TimeUnitTest::testGreekWithFallback() {
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, oneYearStr,
- sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
- sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsStr,
- oneSecondStr, oneMinuteStr, oneHourStr, oneDayStr, oneMonthStr, oneYearStr,
- oneSecondShortStr, oneMinuteShortStr, oneHourStr, oneDayStr, oneMonthShortStr, oneYearStr,
- sevenSecondsStr, sevenMinutesStr, sevenHoursStr, sevenDaysStr, sevenMonthsStr, sevenYearsStr,
- sevenSecondsShortStr, sevenMinutesShortStr, sevenHoursStr, sevenDaysStr, sevenMonthsShortStr, sevenYearsStr};
+ 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;
@@ -354,4 +411,61 @@ void TimeUnitTest::testGreekWithSanitization() {
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));
+ 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.");
+ }
+}
+
#endif
« no previous file with comments | « source/test/intltest/tufmtts.h ('k') | source/test/intltest/tzfmttst.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698