Skip to content

Commit

Permalink
Temporal: Some more tests for PlainDateTime#with. (tc39#3481)
Browse files Browse the repository at this point in the history
  • Loading branch information
Ms2ger authored and catamorphism committed May 30, 2022
1 parent 61cfb53 commit fd17b26
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindatetime.prototype.with
description: Non-object arguments throw.
features: [Temporal]
---*/

const instance = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321);
const args = [
undefined,
null,
true,
"2020-01-12T10:20:30",
Symbol(),
2020,
2020n,
];
for (const argument of args) {
assert.throws(TypeError, () => instance.with(argument), `Does not support ${typeof argument}`);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-temporal.plaindatetime.prototype.with
description: The options argument is passed through to Calendar#dateFromFields as-is.
includes: [temporalHelpers.js]
features: [Temporal]
---*/

const options = {};
let calledDateFromFields = 0;
class Calendar extends Temporal.Calendar {
constructor() {
super("iso8601");
}
dateFromFields(fields, optionsArg) {
++calledDateFromFields;
assert.sameValue(optionsArg, options, "should pass options object through");
return super.dateFromFields(fields, optionsArg);
}
};
const calendar = new Calendar();
const plaindatetime = new Temporal.PlainDateTime(2000, 5, 2, 12, 34, 56, 987, 654, 321, calendar);
const result = plaindatetime.with({ year: 2005 }, options);
TemporalHelpers.assertPlainDateTime(result, 2005, 5, "M05", 2, 12, 34, 56, 987, 654, 321);
assert.sameValue(calledDateFromFields, 1, "should have called overridden dateFromFields once");
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
description: Throws if a Temporal object with a calendar is supplied
esid: sec-temporal.plaindatetime.prototype.with
features: [Temporal]
---*/

const datetime = new Temporal.PlainDateTime(1976, 11, 18, 15, 23, 30, 123, 456, 789);

const values = [
Temporal.PlainDate.from("2022-04-12"),
Temporal.PlainDateTime.from("2022-04-12T15:19:45"),
Temporal.PlainMonthDay.from("04-12"),
Temporal.PlainTime.from("15:19:45"),
Temporal.PlainYearMonth.from("2022-04"),
Temporal.ZonedDateTime.from("2022-04-12T15:19:45[UTC]"),
];

for (const value of values) {
Object.defineProperty(value, "calendar", {
get() { throw new Test262Error("should not get calendar property") }
});
Object.defineProperty(value, "timeZone", {
get() { throw new Test262Error("should not get timeZone property") }
});
assert.throws(
TypeError,
() => datetime.with(value),
"throws with temporal object"
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ const expected = [
"get year",
"get year.valueOf",
"call year.valueOf",
"get options.overflow",
"get options.overflow.toString",
"call options.overflow.toString",
"get options.overflow",
"get options.overflow.toString",
"call options.overflow.toString",
];
const actual = [];
const fields = {
Expand Down Expand Up @@ -70,7 +76,13 @@ const argument = new Proxy(fields, {
return key in target;
},
});
const result = instance.with(argument);
const options = {
get overflow() {
actual.push("get options.overflow");
return TemporalHelpers.toPrimitiveObserver(actual, "constrain", "options.overflow");
}
};
const result = instance.with(argument, options);
TemporalHelpers.assertPlainDateTime(result, 1, 1, "M01", 1, 1, 1, 1, 1, 1, 1);
assert.sameValue(result.calendar.id, "iso8601", "calendar result");
assert.compareArray(actual, expected, "order of operations");

0 comments on commit fd17b26

Please sign in to comment.