summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js')
-rw-r--r--js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js156
1 files changed, 156 insertions, 0 deletions
diff --git a/js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js b/js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
new file mode 100644
index 0000000000..fdf9ab6487
--- /dev/null
+++ b/js/src/tests/test262/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js
@@ -0,0 +1,156 @@
+// Copyright 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-Intl.RelativeTimeFormat.prototype.formatToParts
+description: Checks the behavior of Intl.RelativeTimeFormat.prototype.formatToParts() in English.
+features: [Intl.RelativeTimeFormat]
+locale: [en-US]
+---*/
+
+function verifyFormatParts(actual, expected, message) {
+ assert.sameValue(actual.length, expected.length, `${message}: length`);
+
+ for (let i = 0; i < actual.length; ++i) {
+ assert.sameValue(actual[i].type, expected[i].type, `${message}: parts[${i}].type`);
+ assert.sameValue(actual[i].value, expected[i].value, `${message}: parts[${i}].value`);
+ assert.sameValue(actual[i].unit, expected[i].unit, `${message}: parts[${i}].unit`);
+ }
+}
+
+function expected(key, unit, default_) {
+ // https://www.unicode.org/cldr/charts/33/summary/en.html#1530
+ const exceptions = {
+ "year": {
+ "-1": "last year",
+ "0": "this year",
+ "1": "next year",
+ },
+ "quarter": {
+ "-1": "last quarter",
+ "0": "this quarter",
+ "1": "next quarter",
+ },
+ "month": {
+ "-1": "last month",
+ "0": "this month",
+ "1": "next month",
+ },
+ "week": {
+ "-1": "last week",
+ "0": "this week",
+ "1": "next week",
+ },
+ "day": {
+ "-1": "yesterday",
+ "0": "today",
+ "1": "tomorrow",
+ },
+ "hour": {
+ "0": "this hour",
+ },
+ "minute": {
+ "0": "this minute",
+ },
+ "second": {
+ "0": "now",
+ },
+ };
+
+ const exception = exceptions[unit] || {};
+ if (key in exception) {
+ return [
+ { "type": "literal", "value": exception[key] },
+ ]
+ }
+
+ return default_;
+}
+
+const units = [
+ "second",
+ "minute",
+ "hour",
+ "day",
+ "week",
+ "month",
+ "quarter",
+ "year",
+];
+
+const rtf = new Intl.RelativeTimeFormat("en-US", { "numeric": "auto" });
+
+assert.sameValue(typeof rtf.formatToParts, "function", "formatToParts should be supported");
+
+for (const unit of units) {
+ verifyFormatParts(rtf.formatToParts(1000, unit), [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "1", "unit": unit },
+ { "type": "group", "value": ",", "unit": unit },
+ { "type": "integer", "value": "000", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s` },
+ ], `formatToParts(1000, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(10, unit), [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "10", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s` },
+ ], `formatToParts(10, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(2, unit), [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "2", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s` },
+ ], `formatToParts(2, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(1, unit), expected("1", unit, [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "1", "unit": unit },
+ { "type": "literal", "value": ` ${unit}` },
+ ]), `formatToParts(1, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(0, unit), expected("0", unit, [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "0", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s` },
+ ]), `formatToParts(0, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(-0, unit), expected("0", unit, [
+ { "type": "integer", "value": "0", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s ago` },
+ ]), `formatToParts(-0, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(-1, unit), expected("-1", unit, [
+ { "type": "integer", "value": "1", "unit": unit },
+ { "type": "literal", "value": ` ${unit} ago` },
+ ]), `formatToParts(-1, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(-2, unit), [
+ { "type": "integer", "value": "2", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s ago` },
+ ], `formatToParts(-2, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(-10, unit), [
+ { "type": "integer", "value": "10", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s ago` },
+ ], `formatToParts(-10, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(-1000, unit), [
+ { "type": "integer", "value": "1", "unit": unit },
+ { "type": "group", "value": ",", "unit": unit },
+ { "type": "integer", "value": "000", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s ago` },
+ ], `formatToParts(-1000, ${unit})`);
+
+ verifyFormatParts(rtf.formatToParts(123456.78, unit), [
+ { "type": "literal", "value": "in " },
+ { "type": "integer", "value": "123", "unit": unit },
+ { "type": "group", "value": ",", "unit": unit },
+ { "type": "integer", "value": "456", "unit": unit },
+ { "type": "decimal", "value": ".", "unit": unit },
+ { "type": "fraction", "value": "78", "unit": unit },
+ { "type": "literal", "value": ` ${unit}s` },
+ ], `formatToParts(123456.78, ${unit})`);
+}
+
+reportCompare(0, 0);