blob: d33456e14a29716baa6f51c88c2795bf4c276f30 [file] [log] [blame]
// Copyright 2019 Googe Inc. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-initializedatetimeformat
description: Checks the order of getting options of 'fractionalSecondDigits' for the DateTimeFormat constructor.
info: |
ToDateTimeOptions ( options, required, defaults )
5. If required is "time" or "any", then
a. For each of the property names "hour", "minute", "second", "fractionalSecondDigits", do
InitializeDateTimeFormat ( dateTimeFormat, locales, options )
2. Let options be ? ToDateTimeOptions(options, "any", "date").
4. Let matcher be ? GetOption(options, "localeMatcher", "string", « "lookup", "best fit" », "best fit").
22. For each row of Table 5, except the header row, do
a. Let value be ? GetOption(options, prop, "string", « the strings given in the Values column of the row », undefined).
23. Let _opt_.[[FractionalSecondDigits]] be ? GetNumberOption(_options_, `"fractionalSecondDigits"`, 0, 3, 0).
26. Let matcher be ? GetOption(options, "formatMatcher", "string", « "basic", "best fit" », "best fit").
includes: [compareArray.js]
features: [Intl.DateTimeFormat-fractionalSecondDigits]
---*/
// Just need to ensure fractionalSecondDigits are get
// between second and localeMatcher the first time and
// between timeZoneName and formatMatcher the second time.
const expected = [
// InitializeDateTimeFormat step 2.
// ToDateTimeOptions step 5.
"second", "fractionalSecondDigits",
// InitializeDateTimeFormat step 4.
"localeMatcher",
// InitializeDateTimeFormat step 22.
"second",
"timeZoneName",
// InitializeDateTimeFormat step 23.
"fractionalSecondDigits",
// InitializeDateTimeFormat step 26.
"formatMatcher",
];
const actual = [];
const options = {
get second() {
actual.push("second");
return "numeric";
},
get fractionalSecondDigits() {
actual.push("fractionalSecondDigits");
return undefined;
},
get localeMatcher() {
actual.push("localeMatcher");
return undefined;
},
get timeZoneName() {
actual.push("timeZoneName");
return undefined;
},
get formatMatcher() {
actual.push("formatMatcher");
return undefined;
},
};
new Intl.DateTimeFormat("en", options);
assert.compareArray(actual, expected);