Skip to content

Commit

Permalink
Add DurationFormat test for negative durations
Browse files Browse the repository at this point in the history
  • Loading branch information
anba committed Aug 23, 2023
1 parent 2e7a522 commit 89ecd6d
Show file tree
Hide file tree
Showing 10 changed files with 416 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.format
description: >
Test format method with negative duration and default style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -3,
hours: -4,
minutes: -5,
seconds: -6,
milliseconds: -7,
microseconds: -8,
nanoseconds: -9,
};

const expected = formatDurationFormatPattern(duration);

const df = new Intl.DurationFormat("en");
assert.sameValue(
df.format(duration),
expected,
`DurationFormat format output using default style option`
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.format
description: >
Test format method with negative duration and "short" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

const style = "short";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -3,
hours: -4,
minutes: -5,
seconds: -6,
milliseconds: -7,
microseconds: -8,
nanoseconds: -9,
};

const expected = formatDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", {style});
assert.sameValue(
df.format(duration),
expected,
`DurationFormat format output using ${style} style option`
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.format
description: >
Test format method with negative duration and "digital" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

const style = "digital";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -3,
hours: -4,
minutes: -5,
seconds: -6,
milliseconds: -7,
microseconds: -8,
nanoseconds: -9,
};

const expected = formatDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", {style});
assert.sameValue(
df.format(duration),
expected,
`DurationFormat format output using ${style} style option`
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.format
description: >
Test format method with negative duration and "long" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

const style = "long";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -3,
hours: -4,
minutes: -5,
seconds: -6,
milliseconds: -7,
microseconds: -8,
nanoseconds: -9,
};

const expected = formatDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", {style});
assert.sameValue(
df.format(duration),
expected,
`DurationFormat format output using ${style} style option`
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.format
description: >
Test format method with negative duration and "narrow" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

const style = "narrow";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -3,
hours: -4,
minutes: -5,
seconds: -6,
milliseconds: -7,
microseconds: -8,
nanoseconds: -9,
};

const expected = formatDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", {style});
assert.sameValue(
df.format(duration),
expected,
`DurationFormat format output using ${style} style option`
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.formatToParts
description: >
Test formatToParts method with negative duration and default style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

function compare(actual, expected, message) {
assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`);
assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`);
assert.sameValue(actual.length, expected.length, `${message}: length`);

for (let i = 0; i < expected.length; ++i) {
let actualEntry = actual[i];
let expectedEntry = expected[i];

assert.sameValue(actualEntry.type, expectedEntry.type, `type for entry ${i}`);
assert.sameValue(actualEntry.value, expectedEntry.value, `value for entry ${i}`);
assert.sameValue("unit" in actualEntry, "unit" in expectedEntry, `unit for entry ${i}`);
if ("unit" in expectedEntry) {
assert.sameValue(actualEntry.unit, expectedEntry.unit, `unit for entry ${i}`);
}
}
}

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -4,
hours: -5,
minutes: -6,
seconds: -7,
milliseconds: -123,
microseconds: -456,
nanoseconds: -789,
};

const expected = partitionDurationFormatPattern(duration);

const df = new Intl.DurationFormat("en");
compare(df.formatToParts(duration), expected, `Using style : default`);
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.formatToParts
description: >
Test formatToParts method with negative duration and "digital" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

function compare(actual, expected, message) {
assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`);
assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`);
assert.sameValue(actual.length, expected.length, `${message}: length`);

for (let i = 0; i < expected.length; ++i) {
let actualEntry = actual[i];
let expectedEntry = expected[i];

assert.sameValue(actualEntry.type, expectedEntry.type, `type for entry ${i}`);
assert.sameValue(actualEntry.value, expectedEntry.value, `value for entry ${i}`);
assert.sameValue("unit" in actualEntry, "unit" in expectedEntry, `unit for entry ${i}`);
if ("unit" in expectedEntry) {
assert.sameValue(actualEntry.unit, expectedEntry.unit, `unit for entry ${i}`);
}
}
}

const style = "digital";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -4,
hours: -5,
minutes: -6,
seconds: -7,
milliseconds: -123,
microseconds: -456,
nanoseconds: -789,
};

const expected = partitionDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", { style });
compare(df.formatToParts(duration), expected, `Using style : ${style}`);
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.formatToParts
description: >
Test formatToParts method with negative duration and "long" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

function compare(actual, expected, message) {
assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`);
assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`);
assert.sameValue(actual.length, expected.length, `${message}: length`);

for (let i = 0; i < expected.length; ++i) {
let actualEntry = actual[i];
let expectedEntry = expected[i];

assert.sameValue(actualEntry.type, expectedEntry.type, `type for entry ${i}`);
assert.sameValue(actualEntry.value, expectedEntry.value, `value for entry ${i}`);
assert.sameValue("unit" in actualEntry, "unit" in expectedEntry, `unit for entry ${i}`);
if ("unit" in expectedEntry) {
assert.sameValue(actualEntry.unit, expectedEntry.unit, `unit for entry ${i}`);
}
}
}

const style = "long";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -4,
hours: -5,
minutes: -6,
seconds: -7,
milliseconds: -123,
microseconds: -456,
nanoseconds: -789,
};

const expected = partitionDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", { style });
compare(df.formatToParts(duration), expected, `Using style : ${style}`);
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// Copyright (C) 2023 André Bargull. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-Intl.DurationFormat.prototype.formatToParts
description: >
Test formatToParts method with negative duration and "narrow" style
locale: [en-US]
includes: [testIntl.js]
features: [Intl.DurationFormat]
---*/

function compare(actual, expected, message) {
assert.sameValue(Array.isArray(expected), true, `${message}: expected is Array`);
assert.sameValue(Array.isArray(actual), true, `${message}: actual is Array`);
assert.sameValue(actual.length, expected.length, `${message}: length`);

for (let i = 0; i < expected.length; ++i) {
let actualEntry = actual[i];
let expectedEntry = expected[i];

assert.sameValue(actualEntry.type, expectedEntry.type, `type for entry ${i}`);
assert.sameValue(actualEntry.value, expectedEntry.value, `value for entry ${i}`);
assert.sameValue("unit" in actualEntry, "unit" in expectedEntry, `unit for entry ${i}`);
if ("unit" in expectedEntry) {
assert.sameValue(actualEntry.unit, expectedEntry.unit, `unit for entry ${i}`);
}
}
}

const style = "narrow";

const duration = {
years: -1,
months: -2,
weeks: -3,
days: -4,
hours: -5,
minutes: -6,
seconds: -7,
milliseconds: -123,
microseconds: -456,
nanoseconds: -789,
};

const expected = partitionDurationFormatPattern(duration, style);

const df = new Intl.DurationFormat("en", { style });
compare(df.formatToParts(duration), expected, `Using style : ${style}`);
Loading

0 comments on commit 89ecd6d

Please sign in to comment.