Skip to content

Commit

Permalink
intl tests for proposed additional options in options bag
Browse files Browse the repository at this point in the history
This patch implements tests for the ECMA 402 PR at
tc39/ecma402#175

It is based on the test test/intl402/Collator/10.1.1_19_c.js
  • Loading branch information
littledan committed Sep 13, 2017
1 parent 290799b commit 58f29a2
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 0 deletions.
68 changes: 68 additions & 0 deletions test/intl402/DateTimeFormat/numbering-system-calendar-options.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
// Copyright 2012 Mozilla Corporation. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-initializedatetimeformat
description: >
Tests that the options numberingSystem and calendar can be set through
either the locale or the options.
author: Norbert Lindenberg, Daniel Ehrenberg
includes: [testIntl.js]
---*/

let defaultLocale = new Intl.DateTimeFormat().resolvedOptions().locale;

let supportedNumberingSystems = ["latn", "arab"].filter(nu =>
new Intl.DateTimeFormat(defaultLocale + "-u-nu-" + nu)
.resolvedOptions().numberingSystem === nu
);

let supportedCalendars = ["gregory", "chinese"].filter(ca =>
new Intl.DateTimeFormat(defaultLocale + "-u-ca-" + ca)
.resolvedOptions().calendar === ca
);

let options = [
{key: "nu", property: "numberingSystem", type: "string", values: supportedNumberingSystems},
{key: "ca", property: "calendar", type: "string", values: supportedCalendars}
];

options.forEach(function (option) {
let dateTimeFormat, opt, result;

// find out which values are supported for a property in the default locale
let supportedValues = [];
option.values.forEach(function (value) {
opt = {};
opt[option.property] = value;
dateTimeFormat = new Intl.DateTimeFormat([defaultLocale], opt);
result = dateTimeFormat.resolvedOptions()[option.property];
if (result !== undefined && supportedValues.indexOf(result) === -1) {
supportedValues.push(result);
}
});

// verify that the supported values can also be set through the locale
supportedValues.forEach(function (value) {
dateTimeFormat = new Intl.DateTimeFormat([defaultLocale + "-u-" + option.key + "-" + value]);
result = dateTimeFormat.resolvedOptions()[option.property];
assert.sameValue(result, value, "Property " + option.property + " couldn't be set through locale extension key " + option.key + ".");
});

// verify that the options setting overrides the locale setting
supportedValues.forEach(function (value) {
let otherValue;
option.values.forEach(function (possibleValue) {
if (possibleValue !== value) {
otherValue = possibleValue;
}
});
if (otherValue !== undefined) {
opt = {};
opt[option.property] = value;
dateTimeFormat = new Intl.DateTimeFormat([defaultLocale + "-u-" + option.key + "-" + otherValue], opt);
result = dateTimeFormat.resolvedOptions()[option.property];
assert.sameValue(result, value, "Options value for property " + option.property + " doesn't override locale extension key " + option.key + ".");
}
});
});
63 changes: 63 additions & 0 deletions test/intl402/NumberFormat/numbering-system-options.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2012 Mozilla Corporation. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-initializenumberformat
description: >
Tests that the options numberingSystem and calendar can be set through
either the locale or the options.
author: Norbert Lindenberg, Daniel Ehrenberg
includes: [testIntl.js]
---*/

let defaultLocale = new Intl.NumberFormat().resolvedOptions().locale;

let supportedNumberingSystems = ["latn", "arab"].filter(nu =>
new Intl.NumberFormat(defaultLocale + "-u-nu-" + nu)
.resolvedOptions().numberingSystem === nu
);

let options = [
{key: "nu", property: "numberingSystem", type: "string", values: supportedNumberingSystems},
];

options.forEach(function (option) {
let numberFormat, opt, result;

// find out which values are supported for a property in the default locale
let supportedValues = [];
option.values.forEach(function (value) {
opt = {};
opt[option.property] = value;
numberFormat = new Intl.NumberFormat([defaultLocale], opt);
result = numberFormat.resolvedOptions()[option.property];
if (result !== undefined && supportedValues.indexOf(result) === -1) {
supportedValues.push(result);
}
});

// verify that the supported values can also be set through the locale
supportedValues.forEach(function (value) {
numberFormat = new Intl.NumberFormat([defaultLocale + "-u-" + option.key + "-" + value]);
result = numberFormat.resolvedOptions()[option.property];
assert.sameValue(result, value, "Property " + option.property + " couldn't be set through locale extension key " + option.key + ".");
});

// verify that the options setting overrides the locale setting
supportedValues.forEach(function (value) {
let otherValue;
option.values.forEach(function (possibleValue) {
if (possibleValue !== value) {
otherValue = possibleValue;
}
});
if (otherValue !== undefined) {
opt = {};
opt[option.property] = value;
numberFormat = new Intl.NumberFormat([defaultLocale + "-u-" + option.key + "-" + otherValue], opt);
result = numberFormat.resolvedOptions()[option.property];
assert.sameValue(result, value, "Options value for property " + option.property + " doesn't override locale extension key " + option.key + ".");
}
});
});

0 comments on commit 58f29a2

Please sign in to comment.