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/reldatefmttest.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/regiontst.cpp ('k') | source/test/intltest/restest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/test/intltest/reldatefmttest.cpp
diff --git a/source/test/intltest/reldatefmttest.cpp b/source/test/intltest/reldatefmttest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6c52d4df7cc8927b2091473152de48ccb7f3a4d9
--- /dev/null
+++ b/source/test/intltest/reldatefmttest.cpp
@@ -0,0 +1,1009 @@
+/*
+*******************************************************************************
+* Copyright (C) 2013-2014, International Business Machines Corporation and *
+* others. All Rights Reserved. *
+*******************************************************************************
+*
+* File RELDATEFMTTEST.CPP
+*
+*******************************************************************************
+*/
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "intltest.h"
+
+#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/localpointer.h"
+#include "unicode/numfmt.h"
+#include "unicode/reldatefmt.h"
+#include "cmemory.h"
+
+static const char *DirectionStr(UDateDirection direction);
+static const char *RelativeUnitStr(UDateRelativeUnit unit);
+static const char *AbsoluteUnitStr(UDateAbsoluteUnit unit);
+
+typedef struct WithQuantityExpected {
+ double value;
+ UDateDirection direction;
+ UDateRelativeUnit unit;
+ const char *expected;
+} WithQuantityExpected;
+
+typedef struct WithoutQuantityExpected {
+ UDateDirection direction;
+ UDateAbsoluteUnit unit;
+ const char *expected;
+} WithoutQuantityExpected;
+
+static WithQuantityExpected kEnglish[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0 seconds"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0.5 seconds"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 1 second"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 2 seconds"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 0 minutes"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 0.5 minutes"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 1 minute"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 2 minutes"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 0 hours"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 0.5 hours"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 1 hour"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 2 hours"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 0 days"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 0.5 days"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 1 day"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 2 days"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 0 weeks"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 0.5 weeks"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 1 week"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 2 weeks"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 0 months"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 0.5 months"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 1 month"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 2 months"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 0 years"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 0.5 years"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 1 year"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 2 years"},
+
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0 seconds ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0.5 seconds ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "1 second ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "2 seconds ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0 minutes ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0.5 minutes ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "1 minute ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "2 minutes ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0 hours ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0.5 hours ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "1 hour ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "2 hours ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0 days ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0.5 days ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "1 day ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "2 days ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0 weeks ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0.5 weeks ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "1 week ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "2 weeks ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0 months ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0.5 months ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "1 month ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "2 months ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0 years ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0.5 years ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "1 year ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "2 years ago"}
+};
+
+static WithQuantityExpected kEnglishCaps[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "In 0 seconds"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "In 0.5 seconds"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "In 1 second"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "In 2 seconds"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "In 0 minutes"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "In 0.5 minutes"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "In 1 minute"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "In 2 minutes"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "In 0 hours"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "In 0.5 hours"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "In 1 hour"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "In 2 hours"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "In 0 days"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "In 0.5 days"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "In 1 day"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "In 2 days"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "In 0 weeks"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "In 0.5 weeks"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "In 1 week"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "In 2 weeks"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "In 0 months"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "In 0.5 months"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "In 1 month"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "In 2 months"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "In 0 years"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "In 0.5 years"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "In 1 year"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "In 2 years"},
+
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0 seconds ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0.5 seconds ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "1 second ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "2 seconds ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0 minutes ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0.5 minutes ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "1 minute ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "2 minutes ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0 hours ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0.5 hours ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "1 hour ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "2 hours ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0 days ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0.5 days ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "1 day ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "2 days ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0 weeks ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0.5 weeks ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "1 week ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "2 weeks ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0 months ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0.5 months ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "1 month ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "2 months ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0 years ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0.5 years ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "1 year ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "2 years ago"}
+};
+
+static WithQuantityExpected kEnglishShort[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0 sec."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0.5 sec."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 1 sec."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 2 sec."},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 0 min."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 0.5 min."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 1 min."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MINUTES, "in 2 min."},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 0 hr."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 0.5 hr."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 1 hr."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_HOURS, "in 2 hr."},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 0 days"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 0.5 days"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 1 day"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_DAYS, "in 2 days"},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 0 wk."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 0.5 wk."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 1 wk."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_WEEKS, "in 2 wk."},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 0 mo."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 0.5 mo."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 1 mo."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "in 2 mo."},
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 0 yr."},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 0.5 yr."},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 1 yr."},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_YEARS, "in 2 yr."},
+
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0 sec. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "0.5 sec. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "1 sec. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_SECONDS, "2 sec. ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0 min. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "0.5 min. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "1 min. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MINUTES, "2 min. ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0 hr. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "0.5 hr. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "1 hr. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_HOURS, "2 hr. ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0 days ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "0.5 days ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "1 day ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_DAYS, "2 days ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0 wk. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "0.5 wk. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "1 wk. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_WEEKS, "2 wk. ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0 mo. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "0.5 mo. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "1 mo. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_MONTHS, "2 mo. ago"},
+ {0.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0 yr. ago"},
+ {0.5, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "0.5 yr. ago"},
+ {1.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "1 yr. ago"},
+ {2.0, UDAT_DIRECTION_LAST, UDAT_RELATIVE_YEARS, "2 yr. ago"}
+};
+
+static WithQuantityExpected kEnglishDecimal[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0.0 seconds"},
+ {0.5, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 0.5 seconds"},
+ {1.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 1.0 seconds"},
+ {2.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_SECONDS, "in 2.0 seconds"}
+};
+
+static WithQuantityExpected kSerbian[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 0 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0438"},
+ {1.2, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 1,2 \\u043c\\u0435\\u0441\\u0435\\u0446\\u0430"},
+ {21.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 21 \\u043c\\u0435\\u0441\\u0435\\u0446"}
+};
+
+static WithQuantityExpected kSerbianNarrow[] = {
+ {0.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 0 \\u043c\\u0435\\u0441."},
+ {1.2, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 1,2 \\u043c\\u0435\\u0441."},
+ {21.0, UDAT_DIRECTION_NEXT, UDAT_RELATIVE_MONTHS, "\\u0437\\u0430 21 \\u043c\\u0435\\u0441."}
+};
+
+static WithoutQuantityExpected kEnglishNoQuantity[] = {
+ {UDAT_DIRECTION_NEXT_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_DAY, "tomorrow"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEEK, "next week"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONTH, "next month"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_YEAR, "next year"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONDAY, "next Monday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_TUESDAY, "next Tuesday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEDNESDAY, "next Wednesday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_THURSDAY, "next Thursday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_FRIDAY, "next Friday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SATURDAY, "next Saturday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SUNDAY, "next Sunday"},
+
+ {UDAT_DIRECTION_LAST_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_DAY, "yesterday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEEK, "last week"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONTH, "last month"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_YEAR, "last year"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONDAY, "last Monday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_TUESDAY, "last Tuesday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEDNESDAY, "last Wednesday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_THURSDAY, "last Thursday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_FRIDAY, "last Friday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SATURDAY, "last Saturday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SUNDAY, "last Sunday"},
+
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_DAY, "today"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEEK, "this week"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONTH, "this month"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_YEAR, "this year"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONDAY, "this Monday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_TUESDAY, "this Tuesday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEDNESDAY, "this Wednesday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_THURSDAY, "this Thursday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_FRIDAY, "this Friday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SATURDAY, "this Saturday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, "this Sunday"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_DAY, "day"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEEK, "week"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONTH, "month"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_YEAR, "year"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONDAY, "Monday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_TUESDAY, "Tuesday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEDNESDAY, "Wednesday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_THURSDAY, "Thursday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_FRIDAY, "Friday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SATURDAY, "Saturday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, "Sunday"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, "now"}
+};
+
+static WithoutQuantityExpected kEnglishNoQuantityCaps[] = {
+ {UDAT_DIRECTION_NEXT_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_DAY, "Tomorrow"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEEK, "Next week"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONTH, "Next month"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_YEAR, "Next year"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONDAY, "Next Monday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_TUESDAY, "Next Tuesday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEDNESDAY, "Next Wednesday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_THURSDAY, "Next Thursday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_FRIDAY, "Next Friday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SATURDAY, "Next Saturday"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SUNDAY, "Next Sunday"},
+
+ {UDAT_DIRECTION_LAST_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_DAY, "Yesterday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEEK, "Last week"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONTH, "Last month"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_YEAR, "Last year"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONDAY, "Last Monday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_TUESDAY, "Last Tuesday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEDNESDAY, "Last Wednesday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_THURSDAY, "Last Thursday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_FRIDAY, "Last Friday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SATURDAY, "Last Saturday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SUNDAY, "Last Sunday"},
+
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_DAY, "Today"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEEK, "This week"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONTH, "This month"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_YEAR, "This year"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONDAY, "This Monday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_TUESDAY, "This Tuesday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEDNESDAY, "This Wednesday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_THURSDAY, "This Thursday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_FRIDAY, "This Friday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SATURDAY, "This Saturday"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, "This Sunday"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_DAY, "Day"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEEK, "Week"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONTH, "Month"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_YEAR, "Year"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONDAY, "Monday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_TUESDAY, "Tuesday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEDNESDAY, "Wednesday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_THURSDAY, "Thursday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_FRIDAY, "Friday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SATURDAY, "Saturday"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, "Sunday"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, "Now"}
+};
+
+static WithoutQuantityExpected kEnglishNoQuantityShort[] = {
+ {UDAT_DIRECTION_NEXT_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_DAY, "tomorrow"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEEK, "next wk."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONTH, "next mo."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_YEAR, "next yr."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONDAY, "next Mon."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_TUESDAY, "next Tue."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEDNESDAY, "next Wed."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_THURSDAY, "next Thu."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_FRIDAY, "next Fri."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SATURDAY, "next Sat."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SUNDAY, "next Sun."},
+
+ {UDAT_DIRECTION_LAST_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_DAY, "yesterday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEEK, "last wk."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONTH, "last mo."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_YEAR, "last yr."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONDAY, "last Mon."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_TUESDAY, "last Tue."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEDNESDAY, "last Wed."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_THURSDAY, "last Thu."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_FRIDAY, "last Fri."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SATURDAY, "last Sat."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SUNDAY, "last Sun."},
+
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_DAY, "today"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEEK, "this wk."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONTH, "this mo."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_YEAR, "this yr."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONDAY, "this Mon."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_TUESDAY, "this Tue."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEDNESDAY, "this Wed."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_THURSDAY, "this Thu."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_FRIDAY, "this Fri."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SATURDAY, "this Sat."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, "this Sun."},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_DAY, "day"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEEK, "wk."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONTH, "mo."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_YEAR, "yr."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONDAY, "Mo"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_TUESDAY, "Tu"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEDNESDAY, "We"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_THURSDAY, "Th"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_FRIDAY, "Fr"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SATURDAY, "Sa"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, "Su"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, "now"}
+};
+
+static WithoutQuantityExpected kEnglishNoQuantityNarrow[] = {
+ {UDAT_DIRECTION_NEXT_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_DAY, "tomorrow"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEEK, "next wk."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONTH, "next mo."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_YEAR, "next yr."},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_MONDAY, "next M"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_TUESDAY, "next Tu"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_WEDNESDAY, "next W"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_THURSDAY, "next Th"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_FRIDAY, "next F"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SATURDAY, "next Sa"},
+ {UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_SUNDAY, "next Su"},
+
+ {UDAT_DIRECTION_LAST_2, UDAT_ABSOLUTE_DAY, ""},
+
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_DAY, "yesterday"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEEK, "last wk."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONTH, "last mo."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_YEAR, "last yr."},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_MONDAY, "last M"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_TUESDAY, "last Tu"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_WEDNESDAY, "last W"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_THURSDAY, "last Th"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_FRIDAY, "last F"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SATURDAY, "last Sa"},
+ {UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_SUNDAY, "last Su"},
+
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_DAY, "today"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEEK, "this wk."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONTH, "this mo."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_YEAR, "this yr."},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_MONDAY, "this M"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_TUESDAY, "this Tu"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_WEDNESDAY, "this W"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_THURSDAY, "this Th"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_FRIDAY, "this F"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SATURDAY, "this Sa"},
+ {UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_SUNDAY, "this Su"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_DAY, "day"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEEK, "wk."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONTH, "mo."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_YEAR, "yr."},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_MONDAY, "M"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_TUESDAY, "T"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_WEDNESDAY, "W"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_THURSDAY, "T"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_FRIDAY, "F"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SATURDAY, "S"},
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_SUNDAY, "S"},
+
+ {UDAT_DIRECTION_PLAIN, UDAT_ABSOLUTE_NOW, "now"}
+};
+
+static WithoutQuantityExpected kSpanishNoQuantity[] = {
+ {UDAT_DIRECTION_NEXT_2, UDAT_ABSOLUTE_DAY, "pasado ma\\u00F1ana"},
+ {UDAT_DIRECTION_LAST_2, UDAT_ABSOLUTE_DAY, "antes de ayer"}
+};
+
+class RelativeDateTimeFormatterTest : public IntlTest {
+public:
+ RelativeDateTimeFormatterTest() {
+ }
+
+ void runIndexedTest(int32_t index, UBool exec, const char *&name, char *par=0);
+private:
+ void TestEnglish();
+ void TestEnglishCaps();
+ void TestEnglishShort();
+ void TestEnglishNarrow();
+ void TestSerbian();
+ void TestSerbianFallback();
+ void TestEnglishNoQuantity();
+ void TestEnglishNoQuantityCaps();
+ void TestEnglishNoQuantityShort();
+ void TestEnglishNoQuantityNarrow();
+ void TestSpanishNoQuantity();
+ void TestFormatWithQuantityIllegalArgument();
+ void TestFormatWithoutQuantityIllegalArgument();
+ void TestCustomNumberFormat();
+ void TestGetters();
+ void TestCombineDateAndTime();
+ void TestBadDisplayContext();
+ void RunTest(
+ const Locale& locale,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength);
+ void RunTest(
+ const Locale& locale,
+ UDateRelativeDateTimeFormatterStyle style,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength);
+ void RunTest(
+ const Locale& locale,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength);
+ void RunTest(
+ const Locale& locale,
+ UDateRelativeDateTimeFormatterStyle style,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength);
+ void RunTest(
+ const RelativeDateTimeFormatter& fmt,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength,
+ const char *description);
+ void RunTest(
+ const RelativeDateTimeFormatter& fmt,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength,
+ const char *description);
+ void CheckExpectedResult(
+ const RelativeDateTimeFormatter& fmt,
+ const WithQuantityExpected& expectedResult,
+ const char* description);
+ void CheckExpectedResult(
+ const RelativeDateTimeFormatter& fmt,
+ const WithoutQuantityExpected& expectedResult,
+ const char* description);
+ void VerifyIllegalArgument(
+ const RelativeDateTimeFormatter& fmt,
+ UDateDirection direction,
+ UDateRelativeUnit unit);
+ void VerifyIllegalArgument(
+ const RelativeDateTimeFormatter& fmt,
+ UDateDirection direction,
+ UDateAbsoluteUnit unit);
+};
+
+void RelativeDateTimeFormatterTest::runIndexedTest(
+ int32_t index, UBool exec, const char *&name, char *) {
+ if (exec) {
+ logln("TestSuite RelativeDateTimeFormatterTest: ");
+ }
+ TESTCASE_AUTO_BEGIN;
+ TESTCASE_AUTO(TestEnglish);
+ TESTCASE_AUTO(TestEnglishCaps);
+ TESTCASE_AUTO(TestEnglishShort);
+ TESTCASE_AUTO(TestEnglishNarrow);
+ TESTCASE_AUTO(TestSerbian);
+ TESTCASE_AUTO(TestSerbianFallback);
+ TESTCASE_AUTO(TestEnglishNoQuantity);
+ TESTCASE_AUTO(TestEnglishNoQuantityCaps);
+ TESTCASE_AUTO(TestEnglishNoQuantityShort);
+ TESTCASE_AUTO(TestEnglishNoQuantityNarrow);
+ TESTCASE_AUTO(TestSpanishNoQuantity);
+ TESTCASE_AUTO(TestFormatWithQuantityIllegalArgument);
+ TESTCASE_AUTO(TestFormatWithoutQuantityIllegalArgument);
+ TESTCASE_AUTO(TestCustomNumberFormat);
+ TESTCASE_AUTO(TestGetters);
+ TESTCASE_AUTO(TestCombineDateAndTime);
+ TESTCASE_AUTO(TestBadDisplayContext);
+ TESTCASE_AUTO_END;
+}
+
+void RelativeDateTimeFormatterTest::TestEnglish() {
+ RunTest("en", kEnglish, UPRV_LENGTHOF(kEnglish));
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishCaps() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ "en",
+ NULL,
+ UDAT_STYLE_LONG,
+ UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE,
+ status);
+ if (U_FAILURE(status)) {
+ dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_LONG, UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE, status); : %s", u_errorName(status));
+ return;
+ }
+ RelativeDateTimeFormatter fmt3(status);
+
+ // Test assignment and copy constructor with capitalization on.
+ RelativeDateTimeFormatter fmt2(fmt);
+ fmt3 = fmt2;
+ assertSuccess("", status);
+ RunTest(fmt3, kEnglishCaps, UPRV_LENGTHOF(kEnglishCaps), "en caps");
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishShort() {
+ RunTest("en", UDAT_STYLE_SHORT, kEnglishShort, UPRV_LENGTHOF(kEnglishShort));
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishNarrow() {
+ RunTest("en", UDAT_STYLE_NARROW, kEnglishShort, UPRV_LENGTHOF(kEnglishShort));
+}
+
+void RelativeDateTimeFormatterTest::TestSerbian() {
+ RunTest("sr", kSerbian, UPRV_LENGTHOF(kSerbian));
+}
+
+void RelativeDateTimeFormatterTest::TestSerbianFallback() {
+ RunTest("sr", UDAT_STYLE_NARROW, kSerbianNarrow, UPRV_LENGTHOF(kSerbianNarrow));
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishNoQuantity() {
+ RunTest("en", kEnglishNoQuantity, UPRV_LENGTHOF(kEnglishNoQuantity));
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishNoQuantityCaps() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ "en",
+ NULL,
+ UDAT_STYLE_LONG,
+ UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE,
+ status);
+ if (assertSuccess("RelativeDateTimeFormatter", status, TRUE) == FALSE) {
+ return;
+ }
+ RunTest(
+ fmt,
+ kEnglishNoQuantityCaps,
+ UPRV_LENGTHOF(kEnglishNoQuantityCaps),
+ "en caps no quantity");
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishNoQuantityShort() {
+ RunTest(
+ "en",
+ UDAT_STYLE_SHORT,
+ kEnglishNoQuantityShort,
+ UPRV_LENGTHOF(kEnglishNoQuantityShort));
+}
+
+void RelativeDateTimeFormatterTest::TestEnglishNoQuantityNarrow() {
+ RunTest(
+ "en",
+ UDAT_STYLE_NARROW,
+ kEnglishNoQuantityNarrow,
+ UPRV_LENGTHOF(kEnglishNoQuantityNarrow));
+}
+
+void RelativeDateTimeFormatterTest::TestSpanishNoQuantity() {
+ RunTest("es", kSpanishNoQuantity, UPRV_LENGTHOF(kSpanishNoQuantity));
+}
+
+void RelativeDateTimeFormatterTest::TestFormatWithQuantityIllegalArgument() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt("en", status);
+ if (U_FAILURE(status)) {
+ dataerrln("Failure creating format object - %s", u_errorName(status));
+ return;
+ }
+ VerifyIllegalArgument(fmt, UDAT_DIRECTION_PLAIN, UDAT_RELATIVE_DAYS);
+ VerifyIllegalArgument(fmt, UDAT_DIRECTION_THIS, UDAT_RELATIVE_DAYS);
+}
+
+void RelativeDateTimeFormatterTest::TestFormatWithoutQuantityIllegalArgument() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt("en", status);
+ if (U_FAILURE(status)) {
+ dataerrln("Failure creating format object - %s", u_errorName(status));
+ return;
+ }
+ VerifyIllegalArgument(fmt, UDAT_DIRECTION_LAST, UDAT_ABSOLUTE_NOW);
+ VerifyIllegalArgument(fmt, UDAT_DIRECTION_NEXT, UDAT_ABSOLUTE_NOW);
+ VerifyIllegalArgument(fmt, UDAT_DIRECTION_THIS, UDAT_ABSOLUTE_NOW);
+}
+
+void RelativeDateTimeFormatterTest::TestCustomNumberFormat() {
+ NumberFormat *nf;
+ UErrorCode status = U_ZERO_ERROR;
+ {
+ RelativeDateTimeFormatter fmt("en", status);
+ if (U_FAILURE(status)) {
+ dataerrln(
+ "Failure creating format object - %s", u_errorName(status));
+ return;
+ }
+ nf = (NumberFormat *) fmt.getNumberFormat().clone();
+ }
+ nf->setMinimumFractionDigits(1);
+ nf->setMaximumFractionDigits(1);
+ RelativeDateTimeFormatter fmt("en", nf, status);
+
+ // Test copy constructor.
+ RelativeDateTimeFormatter fmt2(fmt);
+ RunTest(fmt2, kEnglishDecimal, UPRV_LENGTHOF(kEnglishDecimal), "en decimal digits");
+
+ // Test assignment
+ fmt = RelativeDateTimeFormatter("es", status);
+ RunTest(fmt, kSpanishNoQuantity, UPRV_LENGTHOF(kSpanishNoQuantity), "assignment operator");
+
+}
+
+void RelativeDateTimeFormatterTest::TestGetters() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ "en",
+ NULL,
+ UDAT_STYLE_NARROW,
+ UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,
+ status);
+ if (U_FAILURE(status)) {
+ dataerrln("Failed call to RelativeDateTimeFormatter(\"en\", NULL, UDAT_STYLE_NARROW, UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE, status);) : %s", u_errorName(status));
+ return;
+ }
+ RelativeDateTimeFormatter fmt3(status);
+
+ // copy and assignment.
+ RelativeDateTimeFormatter fmt2(fmt);
+ fmt3 = fmt2;
+ assertEquals("style", UDAT_STYLE_NARROW, fmt3.getFormatStyle());
+ assertEquals(
+ "context",
+ UDISPCTX_CAPITALIZATION_FOR_MIDDLE_OF_SENTENCE,
+ fmt3.getCapitalizationContext());
+ assertSuccess("", status);
+}
+
+void RelativeDateTimeFormatterTest::TestCombineDateAndTime() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt("en", status);
+ if (U_FAILURE(status)) {
+ dataerrln("Failure creating format object - %s", u_errorName(status));
+ return;
+ }
+ UnicodeString actual;
+ fmt.combineDateAndTime(
+ UnicodeString("yesterday"),
+ UnicodeString("3:50"),
+ actual,
+ status);
+ UnicodeString expected("yesterday, 3:50");
+ if (expected != actual) {
+ errln("Expected "+expected+", got "+actual);
+ }
+}
+
+void RelativeDateTimeFormatterTest::TestBadDisplayContext() {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ "en", NULL, UDAT_STYLE_LONG, UDISPCTX_STANDARD_NAMES, status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status));
+ }
+}
+
+
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const Locale& locale,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength) {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(locale, status);
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create format object - %s", u_errorName(status));
+ return;
+ }
+ RunTest(fmt, expectedResults, expectedResultLength, locale.getName());
+}
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const Locale& locale,
+ UDateRelativeDateTimeFormatterStyle style,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength) {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ locale, NULL, style, UDISPCTX_CAPITALIZATION_NONE, status);
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create format object - %s", u_errorName(status));
+ return;
+ }
+ RunTest(fmt, expectedResults, expectedResultLength, locale.getName());
+}
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const Locale& locale,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength) {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(locale, status);
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create format object - %s", u_errorName(status));
+ return;
+ }
+ RunTest(fmt, expectedResults, expectedResultLength, locale.getName());
+}
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const Locale& locale,
+ UDateRelativeDateTimeFormatterStyle style,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength) {
+ UErrorCode status = U_ZERO_ERROR;
+ RelativeDateTimeFormatter fmt(
+ locale, NULL, style, UDISPCTX_CAPITALIZATION_NONE, status);
+ if (U_FAILURE(status)) {
+ dataerrln("Unable to create format object - %s", u_errorName(status));
+ return;
+ }
+ RunTest(fmt, expectedResults, expectedResultLength, locale.getName());
+}
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const RelativeDateTimeFormatter& fmt,
+ const WithQuantityExpected* expectedResults,
+ int32_t expectedResultLength,
+ const char *description) {
+ for (int32_t i = 0; i < expectedResultLength; ++i) {
+ CheckExpectedResult(fmt, expectedResults[i], description);
+ }
+}
+
+void RelativeDateTimeFormatterTest::RunTest(
+ const RelativeDateTimeFormatter& fmt,
+ const WithoutQuantityExpected* expectedResults,
+ int32_t expectedResultLength,
+ const char *description) {
+ for (int32_t i = 0; i < expectedResultLength; ++i) {
+ CheckExpectedResult(fmt, expectedResults[i], description);
+ }
+}
+
+void RelativeDateTimeFormatterTest::CheckExpectedResult(
+ const RelativeDateTimeFormatter& fmt,
+ const WithQuantityExpected& expectedResult,
+ const char* description) {
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString actual;
+ fmt.format(expectedResult.value, expectedResult.direction, expectedResult.unit, actual, status);
+ UnicodeString expected(expectedResult.expected, -1, US_INV);
+ expected = expected.unescape();
+ char buffer[256];
+ sprintf(
+ buffer,
+ "%s, %f, %s, %s",
+ description,
+ expectedResult.value,
+ DirectionStr(expectedResult.direction),
+ RelativeUnitStr(expectedResult.unit));
+ if (actual != expected) {
+ errln(UnicodeString("Fail: Expected: ") + expected
+ + ", Got: " + actual
+ + ", For: " + buffer);
+ }
+}
+
+void RelativeDateTimeFormatterTest::CheckExpectedResult(
+ const RelativeDateTimeFormatter& fmt,
+ const WithoutQuantityExpected& expectedResult,
+ const char* description) {
+ UErrorCode status = U_ZERO_ERROR;
+ UnicodeString actual;
+ fmt.format(expectedResult.direction, expectedResult.unit, actual, status);
+ UnicodeString expected(expectedResult.expected, -1, US_INV);
+ expected = expected.unescape();
+ char buffer[256];
+ sprintf(
+ buffer,
+ "%s, %s, %s",
+ description,
+ DirectionStr(expectedResult.direction),
+ AbsoluteUnitStr(expectedResult.unit));
+ if (actual != expected) {
+ errln(UnicodeString("Fail: Expected: ") + expected
+ + ", Got: " + actual
+ + ", For: " + buffer);
+ }
+}
+
+void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
+ const RelativeDateTimeFormatter& fmt,
+ UDateDirection direction,
+ UDateRelativeUnit unit) {
+ UnicodeString appendTo;
+ UErrorCode status = U_ZERO_ERROR;
+ fmt.format(1.0, direction, unit, appendTo, status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status));
+ }
+}
+
+void RelativeDateTimeFormatterTest::VerifyIllegalArgument(
+ const RelativeDateTimeFormatter& fmt,
+ UDateDirection direction,
+ UDateAbsoluteUnit unit) {
+ UnicodeString appendTo;
+ UErrorCode status = U_ZERO_ERROR;
+ fmt.format(direction, unit, appendTo, status);
+ if (status != U_ILLEGAL_ARGUMENT_ERROR) {
+ errln("Expected U_ILLEGAL_ARGUMENT_ERROR, got %s", u_errorName(status));
+ }
+}
+
+static const char *kLast2 = "Last_2";
+static const char *kLast = "Last";
+static const char *kThis = "This";
+static const char *kNext = "Next";
+static const char *kNext2 = "Next_2";
+static const char *kPlain = "Plain";
+
+static const char *kSeconds = "Seconds";
+static const char *kMinutes = "Minutes";
+static const char *kHours = "Hours";
+static const char *kDays = "Days";
+static const char *kWeeks = "Weeks";
+static const char *kMonths = "Months";
+static const char *kYears = "Years";
+
+static const char *kSunday = "Sunday";
+static const char *kMonday = "Monday";
+static const char *kTuesday = "Tuesday";
+static const char *kWednesday = "Wednesday";
+static const char *kThursday = "Thursday";
+static const char *kFriday = "Friday";
+static const char *kSaturday = "Saturday";
+static const char *kDay = "Day";
+static const char *kWeek = "Week";
+static const char *kMonth = "Month";
+static const char *kYear = "Year";
+static const char *kNow = "Now";
+
+static const char *kUndefined = "Undefined";
+
+static const char *DirectionStr(
+ UDateDirection direction) {
+ switch (direction) {
+ case UDAT_DIRECTION_LAST_2:
+ return kLast2;
+ case UDAT_DIRECTION_LAST:
+ return kLast;
+ case UDAT_DIRECTION_THIS:
+ return kThis;
+ case UDAT_DIRECTION_NEXT:
+ return kNext;
+ case UDAT_DIRECTION_NEXT_2:
+ return kNext2;
+ case UDAT_DIRECTION_PLAIN:
+ return kPlain;
+ default:
+ return kUndefined;
+ }
+ return kUndefined;
+}
+
+static const char *RelativeUnitStr(
+ UDateRelativeUnit unit) {
+ switch (unit) {
+ case UDAT_RELATIVE_SECONDS:
+ return kSeconds;
+ case UDAT_RELATIVE_MINUTES:
+ return kMinutes;
+ case UDAT_RELATIVE_HOURS:
+ return kHours;
+ case UDAT_RELATIVE_DAYS:
+ return kDays;
+ case UDAT_RELATIVE_WEEKS:
+ return kWeeks;
+ case UDAT_RELATIVE_MONTHS:
+ return kMonths;
+ case UDAT_RELATIVE_YEARS:
+ return kYears;
+ default:
+ return kUndefined;
+ }
+ return kUndefined;
+}
+
+static const char *AbsoluteUnitStr(
+ UDateAbsoluteUnit unit) {
+ switch (unit) {
+ case UDAT_ABSOLUTE_SUNDAY:
+ return kSunday;
+ case UDAT_ABSOLUTE_MONDAY:
+ return kMonday;
+ case UDAT_ABSOLUTE_TUESDAY:
+ return kTuesday;
+ case UDAT_ABSOLUTE_WEDNESDAY:
+ return kWednesday;
+ case UDAT_ABSOLUTE_THURSDAY:
+ return kThursday;
+ case UDAT_ABSOLUTE_FRIDAY:
+ return kFriday;
+ case UDAT_ABSOLUTE_SATURDAY:
+ return kSaturday;
+ case UDAT_ABSOLUTE_DAY:
+ return kDay;
+ case UDAT_ABSOLUTE_WEEK:
+ return kWeek;
+ case UDAT_ABSOLUTE_MONTH:
+ return kMonth;
+ case UDAT_ABSOLUTE_YEAR:
+ return kYear;
+ case UDAT_ABSOLUTE_NOW:
+ return kNow;
+ default:
+ return kUndefined;
+ }
+ return kUndefined;
+}
+
+extern IntlTest *createRelativeDateTimeFormatterTest() {
+ return new RelativeDateTimeFormatterTest();
+}
+
+#endif
« no previous file with comments | « source/test/intltest/regiontst.cpp ('k') | source/test/intltest/restest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698