mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 14:07:43 +00:00
LibJS: Throw a RangeError when when formatting strings in DurationFormat
This is a normative change in the Intl.DurationFormat proposal. See:
2546080
This commit is contained in:
parent
010888acec
commit
a2cf026b30
3 changed files with 19 additions and 4 deletions
|
@ -134,9 +134,16 @@ StringView DurationFormat::display_to_string(Display display)
|
||||||
// 1.1.3 ToDurationRecord ( input ), https://tc39.es/proposal-intl-duration-format/#sec-todurationrecord
|
// 1.1.3 ToDurationRecord ( input ), https://tc39.es/proposal-intl-duration-format/#sec-todurationrecord
|
||||||
ThrowCompletionOr<Temporal::DurationRecord> to_duration_record(VM& vm, Value input)
|
ThrowCompletionOr<Temporal::DurationRecord> to_duration_record(VM& vm, Value input)
|
||||||
{
|
{
|
||||||
// 1. If Type(input) is not Object, throw a TypeError exception.
|
// 1. If Type(input) is not Object, then
|
||||||
if (!input.is_object())
|
if (!input.is_object()) {
|
||||||
|
// a. If Type(input) is String, throw a RangeError exception.
|
||||||
|
if (input.is_string())
|
||||||
|
return vm.throw_completion<RangeError>(ErrorType::NotAnObject, input);
|
||||||
|
|
||||||
|
// b. Throw a TypeError exception.
|
||||||
return vm.throw_completion<TypeError>(ErrorType::NotAnObject, input);
|
return vm.throw_completion<TypeError>(ErrorType::NotAnObject, input);
|
||||||
|
}
|
||||||
|
|
||||||
auto& input_object = input.as_object();
|
auto& input_object = input.as_object();
|
||||||
|
|
||||||
// 2. Let result be a new Duration Record with each field set to 0.
|
// 2. Let result be a new Duration Record with each field set to 0.
|
||||||
|
|
|
@ -92,7 +92,11 @@ describe("correct behavior", () => {
|
||||||
|
|
||||||
describe("errors", () => {
|
describe("errors", () => {
|
||||||
test("non-object duration records", () => {
|
test("non-object duration records", () => {
|
||||||
[-100, Infinity, NaN, "hello", 152n, Symbol("foo")].forEach(value => {
|
expect(() => {
|
||||||
|
new Intl.DurationFormat().format("hello");
|
||||||
|
}).toThrowWithMessage(RangeError, "is not an object");
|
||||||
|
|
||||||
|
[-100, Infinity, NaN, 152n, Symbol("foo"), true, null, undefined].forEach(value => {
|
||||||
expect(() => {
|
expect(() => {
|
||||||
new Intl.DurationFormat().format(value);
|
new Intl.DurationFormat().format(value);
|
||||||
}).toThrowWithMessage(TypeError, "is not an object");
|
}).toThrowWithMessage(TypeError, "is not an object");
|
||||||
|
|
|
@ -266,7 +266,11 @@ describe("correct behavior", () => {
|
||||||
|
|
||||||
describe("errors", () => {
|
describe("errors", () => {
|
||||||
test("non-object duration records", () => {
|
test("non-object duration records", () => {
|
||||||
[-100, Infinity, NaN, "hello", 152n, Symbol("foo")].forEach(value => {
|
expect(() => {
|
||||||
|
new Intl.DurationFormat().formatToParts("hello");
|
||||||
|
}).toThrowWithMessage(RangeError, "is not an object");
|
||||||
|
|
||||||
|
[-100, Infinity, NaN, 152n, Symbol("foo"), true, null, undefined].forEach(value => {
|
||||||
expect(() => {
|
expect(() => {
|
||||||
new Intl.DurationFormat().formatToParts(value);
|
new Intl.DurationFormat().formatToParts(value);
|
||||||
}).toThrowWithMessage(TypeError, "is not an object");
|
}).toThrowWithMessage(TypeError, "is not an object");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue