diff options
author | Luke Wilde <lukew@serenityos.org> | 2022-07-22 15:07:39 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-07-22 17:10:03 +0100 |
commit | 1e829c4ea8e19ee9c1420563057846f3fff1efc6 (patch) | |
tree | db1e498ed4b76989e7e6295bef4f25c3a9aa35e3 /Userland/Libraries | |
parent | 61847b3cef76b99603467b7b540675cda0b8c9a4 (diff) | |
download | serenity-1e829c4ea8e19ee9c1420563057846f3fff1efc6.zip |
LibJS: Check PlainMonthDay is in the ISO date time limits in creation
This is a normative change in the Temporal spec.
See: https://github.com/tc39/proposal-temporal/commit/374305c
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp | 18 | ||||
-rw-r--r-- | Userland/Libraries/LibJS/Tests/builtins/Temporal/PlainMonthDay/PlainMonthDay.js | 6 |
2 files changed, 17 insertions, 7 deletions
diff --git a/Userland/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp b/Userland/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp index 85d21549e9..fbf8d44b25 100644 --- a/Userland/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp +++ b/Userland/Libraries/LibJS/Runtime/Temporal/PlainMonthDay.cpp @@ -155,18 +155,22 @@ ThrowCompletionOr<PlainMonthDay*> create_temporal_month_day(GlobalObject& global if (!is_valid_iso_date(reference_iso_year, iso_month, iso_day)) return vm.throw_completion<RangeError>(global_object, ErrorType::TemporalInvalidPlainMonthDay); - // 4. If newTarget is not present, set newTarget to %Temporal.PlainMonthDay%. + // 4. If ISODateTimeWithinLimits(referenceISOYear, isoMonth, isoDay, 12, 0, 0, 0, 0, 0) is false, throw a RangeError exception. + if (!iso_date_time_within_limits(global_object, reference_iso_year, iso_month, iso_day, 12, 0, 0, 0, 0, 0)) + return vm.throw_completion<RangeError>(global_object, ErrorType::TemporalInvalidPlainMonthDay); + + // 5. If newTarget is not present, set newTarget to %Temporal.PlainMonthDay%. if (!new_target) new_target = global_object.temporal_plain_month_day_constructor(); - // 5. Let object be ? OrdinaryCreateFromConstructor(newTarget, "%Temporal.PlainMonthDay.prototype%", « [[InitializedTemporalMonthDay]], [[ISOMonth]], [[ISODay]], [[ISOYear]], [[Calendar]] »). - // 6. Set object.[[ISOMonth]] to isoMonth. - // 7. Set object.[[ISODay]] to isoDay. - // 8. Set object.[[Calendar]] to calendar. - // 9. Set object.[[ISOYear]] to referenceISOYear. + // 6. Let object be ? OrdinaryCreateFromConstructor(newTarget, "%Temporal.PlainMonthDay.prototype%", « [[InitializedTemporalMonthDay]], [[ISOMonth]], [[ISODay]], [[ISOYear]], [[Calendar]] »). + // 7. Set object.[[ISOMonth]] to isoMonth. + // 8. Set object.[[ISODay]] to isoDay. + // 9. Set object.[[Calendar]] to calendar. + // 10. Set object.[[ISOYear]] to referenceISOYear. auto* object = TRY(ordinary_create_from_constructor<PlainMonthDay>(global_object, *new_target, &GlobalObject::temporal_plain_month_day_prototype, iso_month, iso_day, reference_iso_year, calendar)); - // 10. Return object. + // 11. Return object. return object; } diff --git a/Userland/Libraries/LibJS/Tests/builtins/Temporal/PlainMonthDay/PlainMonthDay.js b/Userland/Libraries/LibJS/Tests/builtins/Temporal/PlainMonthDay/PlainMonthDay.js index fc5b315382..109d01e28f 100644 --- a/Userland/Libraries/LibJS/Tests/builtins/Temporal/PlainMonthDay/PlainMonthDay.js +++ b/Userland/Libraries/LibJS/Tests/builtins/Temporal/PlainMonthDay/PlainMonthDay.js @@ -37,6 +37,12 @@ describe("errors", () => { new Temporal.PlainMonthDay(1, 0); }).toThrowWithMessage(RangeError, "Invalid plain month day"); }); + + test("not within iso date time limit", () => { + expect(() => { + new Temporal.PlainMonthDay(9, 30, "iso8601", 999_999_999_999_999); + }).toThrowWithMessage(RangeError, "Invalid plain month day"); + }); }); describe("normal behavior", () => { |