| // Copyright 2018 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // The following test are not part of the comformance. Just some output in |
| // English to verify the format does return something reasonable for English. |
| // It may be changed when we update the CLDR data. |
| // NOTE: These are UNSPECIFIED behavior in |
| // http://tc39.github.io/proposal-intl-relative-time/ |
| |
| // From Sample code in https://github.com/tc39/proposal-intl-relative-time#intlrelativetimeformatprototypeformattopartsvalue-unit |
| // // Format relative time using the day unit. |
| // rtf.formatToParts(-1, "day"); |
| // // > [{ type: "literal", value: "yesterday"}] |
| let longAuto = new Intl.RelativeTimeFormat( |
| "en", {style: "long", localeMatcher: 'lookup', numeric: 'auto'}); |
| var parts = longAuto.formatToParts(-1, "day"); |
| assertEquals(1, parts.length); |
| assertEquals(2, Object.getOwnPropertyNames(parts[0]).length); |
| assertEquals('literal', parts[0].type); |
| assertEquals('yesterday', parts[0].value); |
| |
| // From Sample code in https://github.com/tc39/proposal-intl-relative-time#intlrelativetimeformatprototypeformattopartsvalue-unit |
| // rtf.formatToParts(100, "day"); |
| // // > [{ type: "literal", value: "in " }, { type: "integer", value: "100", unit: "day" }, { type: "literal", value: " days" }] |
| let longAlways = new Intl.RelativeTimeFormat( |
| "en", {style: "long", localeMatcher: 'lookup', numeric: 'always'}); |
| |
| parts = longAlways.formatToParts(100, "day"); |
| assertEquals(3, parts.length); |
| |
| assertEquals(2, Object.getOwnPropertyNames(parts[0]).length); |
| assertEquals('literal', parts[0].type); |
| assertEquals('in ', parts[0].value); |
| |
| assertEquals(3, Object.getOwnPropertyNames(parts[1]).length); |
| assertEquals('integer', parts[1].type); |
| assertEquals('100', parts[1].value); |
| assertEquals('day', parts[1].unit); |
| |
| assertEquals(2, Object.getOwnPropertyNames(parts[2]).length); |
| assertEquals('literal', parts[2].type); |
| assertEquals(' days', parts[2].value); |
| |
| assertThrows(() => longAlways.format(NaN, 'second'), RangeError); |
| assertThrows(() => longAuto.format(NaN, 'second'), RangeError); |
| |
| parts = longAlways.formatToParts(-10, "day"); |
| assertEquals(2, parts.length); |
| assertEquals(3, Object.getOwnPropertyNames(parts[0]).length); |
| assertEquals('integer', parts[0].type); |
| assertEquals('10', parts[0].value); |
| assertEquals('day', parts[0].unit); |
| assertEquals(2, Object.getOwnPropertyNames(parts[1]).length); |
| assertEquals('literal', parts[1].type); |
| assertEquals(' days ago', parts[1].value); |
| |
| parts = longAlways.formatToParts(-0, "day"); |
| assertEquals(2, parts.length); |
| assertEquals(3, Object.getOwnPropertyNames(parts[0]).length); |
| assertEquals('integer', parts[0].type); |
| assertEquals('0', parts[0].value); |
| assertEquals('day', parts[0].unit); |
| assertEquals(2, Object.getOwnPropertyNames(parts[1]).length); |
| assertEquals('literal', parts[1].type); |
| assertEquals(' days ago', parts[1].value); |
| |
| // Test with non integer |
| // Part Idx: 0 1 23 45 6 |
| assertEquals('in 123,456.78 seconds', longAlways.format(123456.78, 'seconds')); |
| parts = longAlways.formatToParts(123456.78, 'seconds'); |
| assertEquals(7, parts.length); |
| // 0: "in " |
| assertEquals(2, Object.getOwnPropertyNames(parts[0]).length); |
| assertEquals('literal', parts[0].type); |
| assertEquals('in ', parts[0].value); |
| assertEquals(undefined, parts[0].unit); |
| // 1: "123" |
| assertEquals(3, Object.getOwnPropertyNames(parts[1]).length); |
| assertEquals('integer', parts[1].type); |
| assertEquals('123', parts[1].value); |
| assertEquals('second', parts[1].unit); |
| // 2: "," |
| assertEquals(3, Object.getOwnPropertyNames(parts[2]).length); |
| assertEquals('group', parts[2].type); |
| assertEquals(',', parts[2].value); |
| assertEquals('second', parts[2].unit); |
| // 3: "456" |
| assertEquals(3, Object.getOwnPropertyNames(parts[3]).length); |
| assertEquals('integer', parts[3].type); |
| assertEquals('456', parts[3].value); |
| assertEquals('second', parts[3].unit); |
| // 4: "." |
| assertEquals(3, Object.getOwnPropertyNames(parts[4]).length); |
| assertEquals('decimal', parts[4].type); |
| assertEquals('.', parts[4].value); |
| assertEquals('second', parts[4].unit); |
| // 5: "78" |
| assertEquals(3, Object.getOwnPropertyNames(parts[4]).length); |
| assertEquals('fraction', parts[5].type); |
| assertEquals('78', parts[5].value); |
| assertEquals('second', parts[5].unit); |
| // 6: " seconds" |
| assertEquals(2, Object.getOwnPropertyNames(parts[6]).length); |
| assertEquals('literal', parts[6].type); |
| assertEquals(' seconds', parts[6].value); |
| assertEquals(undefined, parts[6].unit); |