blob: 2e09f3d79b1aa907c783b6c37a634e2267631b88 [file] [log] [blame]
// Copyright 2017 Mozilla Corporation. All rights reserved.
// This code is governed by the license found in the LICENSE file.
/*---
esid: sec-Intl.DateTimeFormat.prototype.resolvedOptions
description: >
Intl.DateTimeFormat.prototype.resolvedOptions properly
reflect hourCycle settings.
info: |
12.4.5 Intl.DateTimeFormat.prototype.resolvedOptions()
includes: [propertyHelper.js]
---*/
/* Values passed via unicode extension key work */
const hcValues = ['h11', 'h12', 'h23', 'h24'];
const hour12Values = ['h11', 'h12'];
const dataPropertyDesc = { writable: true, enumerable: true, configurable: true };
for (const hcValue of hcValues) {
const resolvedOptions = new Intl.DateTimeFormat(`de-u-hc-${hcValue}`, {
hour: 'numeric'
}).resolvedOptions();
assert.sameValue(resolvedOptions.hourCycle, hcValue);
assert.sameValue(resolvedOptions.hour12, hour12Values.includes(hcValue));
verifyProperty(resolvedOptions, 'hourCycle', dataPropertyDesc);
verifyProperty(resolvedOptions, 'hour12', dataPropertyDesc);
}
/* Values passed via options work */
for (const hcValue of hcValues) {
const resolvedOptions = new Intl.DateTimeFormat(`en-US`, {
hour: 'numeric',
hourCycle: hcValue
}).resolvedOptions();
assert.sameValue(resolvedOptions.hourCycle, hcValue);
assert.sameValue(resolvedOptions.hour12, hour12Values.includes(hcValue));
verifyProperty(resolvedOptions, 'hourCycle', dataPropertyDesc);
verifyProperty(resolvedOptions, 'hour12', dataPropertyDesc);
}
/* When both extension key and option is passed, option takes precedence */
let resolvedOptions = new Intl.DateTimeFormat(`en-US-u-hc-h12`, {
hour: 'numeric',
hourCycle: 'h23'
}).resolvedOptions();
assert.sameValue(resolvedOptions.hourCycle, 'h23');
assert.sameValue(resolvedOptions.hour12, false);
verifyProperty(resolvedOptions, 'hourCycle', dataPropertyDesc);
verifyProperty(resolvedOptions, 'hour12', dataPropertyDesc);
/* When hour12 and hourCycle are set, hour12 takes precedence */
resolvedOptions = new Intl.DateTimeFormat(`fr`, {
hour: 'numeric',
hour12: true,
hourCycle: 'h23'
}).resolvedOptions();
assert(hour12Values.includes(resolvedOptions.hourCycle));
assert.sameValue(resolvedOptions.hour12, true);
verifyProperty(resolvedOptions, 'hourCycle', dataPropertyDesc);
verifyProperty(resolvedOptions, 'hour12', dataPropertyDesc);
/* When hour12 and extension key are set, hour12 takes precedence */
resolvedOptions = new Intl.DateTimeFormat(`fr-u-hc-h24`, {
hour: 'numeric',
hour12: true,
}).resolvedOptions();
assert(hour12Values.includes(resolvedOptions.hourCycle));
assert.sameValue(resolvedOptions.hour12, true);
verifyProperty(resolvedOptions, 'hourCycle', dataPropertyDesc);
verifyProperty(resolvedOptions, 'hour12', dataPropertyDesc);