mirror of
https://github.com/tc39/test262.git
synced 2025-07-29 00:44:32 +02:00
Add Temporal tests
This copies over the tests that previously existed in the tc39/proposal-temporal repository. For context, see thread starting at: https://github.com/tc39/test262/issues/3002#issuecomment-926234480 In service of https://github.com/tc39/test262/issues/3002
This commit is contained in:
parent
b3158bce51
commit
77a34cf93f
File diff suppressed because it is too large
Load Diff
27
test/built-ins/Temporal/Calendar/builtin.js
Normal file
27
test/built-ins/Temporal/Calendar/builtin.js
Normal file
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: Tests that Temporal.Calendar meets the requirements for built-in objects
|
||||
info: |
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(typeof Temporal.Calendar.prototype,
|
||||
"object", "prototype property");
|
12
test/built-ins/Temporal/Calendar/constructor.js
Normal file
12
test/built-ins/Temporal/Calendar/constructor.js
Normal file
@ -0,0 +1,12 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: Temporal.Calendar constructor cannot be called as a function
|
||||
info: |
|
||||
1. If NewTarget is undefined, throw a TypeError exception.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => Temporal.Calendar());
|
30
test/built-ins/Temporal/Calendar/from/builtin.js
Normal file
30
test/built-ins/Temporal/Calendar/from/builtin.js
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Tests that Temporal.Calendar.from meets the requirements for built-in objects
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.from),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.from),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.from),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.from.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
@ -0,0 +1,11 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Converting objects to Temporal.Calendar
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(RangeError, () => Temporal.Calendar.from({ calendar: "local" }));
|
||||
assert.throws(RangeError, () => Temporal.Calendar.from({ calendar: { calendar: "iso8601" } }));
|
@ -0,0 +1,39 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Converting objects to Temporal.Calendar
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"has outer.calendar",
|
||||
"get outer.calendar",
|
||||
"has inner.calendar",
|
||||
"get inner.toString",
|
||||
"call inner.toString",
|
||||
];
|
||||
const actual = [];
|
||||
const calendar = new Proxy({}, {
|
||||
has(t, p) {
|
||||
actual.push(`has outer.${p}`);
|
||||
return true;
|
||||
},
|
||||
get(t, p) {
|
||||
actual.push(`get outer.${p}`);
|
||||
return new Proxy(TemporalHelpers.toPrimitiveObserver(actual, "iso8601", "inner"), {
|
||||
has(t, p) {
|
||||
actual.push(`has inner.${p}`);
|
||||
return true;
|
||||
},
|
||||
get(t, p) {
|
||||
return t[p];
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
const result = Temporal.Calendar.from(calendar);
|
||||
assert.sameValue(result.id, "iso8601");
|
||||
assert.compareArray(actual, expected);
|
21
test/built-ins/Temporal/Calendar/from/calendar-object.js
Normal file
21
test/built-ins/Temporal/Calendar/from/calendar-object.js
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Converting objects to Temporal.Calendar
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const cal = new Temporal.Calendar("iso8601");
|
||||
const calFromObject = Temporal.Calendar.from({ calendar: cal });
|
||||
assert(calFromObject instanceof Temporal.Calendar);
|
||||
assert.sameValue(calFromObject.id, "iso8601");
|
||||
|
||||
const calFromString = Temporal.Calendar.from({ calendar: "iso8601" });
|
||||
assert(calFromString instanceof Temporal.Calendar);
|
||||
assert.sameValue(calFromString.id, "iso8601");
|
||||
|
||||
const custom = { id: "custom-calendar" };
|
||||
assert.sameValue(Temporal.Calendar.from({ calendar: custom }), custom);
|
||||
assert.sameValue(Temporal.Calendar.from(custom), custom);
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Calendar.from should support iso8601.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const tests = [
|
||||
"iso8601",
|
||||
"1994-11-05T08:15:30-05:00",
|
||||
];
|
||||
|
||||
for (const item of tests) {
|
||||
const calendar = Temporal.Calendar.from(item);
|
||||
assert(calendar instanceof Temporal.Calendar);
|
||||
assert.sameValue(calendar.id, "iso8601");
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: from() throws if the argument is not a built-in calendar name.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const tests = [
|
||||
"local",
|
||||
"iso-8601",
|
||||
"[u-ca=iso8601]",
|
||||
"invalid-calendar",
|
||||
];
|
||||
|
||||
for (const item of tests) {
|
||||
assert.throws(RangeError, () => Temporal.Calendar.from(item));
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.from step 1:
|
||||
1. Return ? ToTemporalCalendar(_item_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject, calendar) => {
|
||||
const newCalendar = Temporal.Calendar.from(temporalObject);
|
||||
assert.sameValue(newCalendar, calendar, "calendar object retrieved from internal slot");
|
||||
});
|
25
test/built-ins/Temporal/Calendar/from/length.js
Normal file
25
test/built-ins/Temporal/Calendar/from/length.js
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Temporal.Calendar.from.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.from, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/from/name.js
Normal file
23
test/built-ins/Temporal/Calendar/from/name.js
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Temporal.Calendar.from.name is "from"
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.from, "name", {
|
||||
value: "from",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
20
test/built-ins/Temporal/Calendar/from/not-a-constructor.js
Normal file
20
test/built-ins/Temporal/Calendar/from/not-a-constructor.js
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: Temporal.Calendar.from does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.from();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.from), false,
|
||||
"isConstructor(Temporal.Calendar.from)");
|
21
test/built-ins/Temporal/Calendar/from/prop-desc.js
Normal file
21
test/built-ins/Temporal/Calendar/from/prop-desc.js
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: The "from" property of Temporal.Calendar
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.from,
|
||||
"function",
|
||||
"`typeof Calendar.from` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar, "from", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
19
test/built-ins/Temporal/Calendar/from/subclassing-ignored.js
Normal file
19
test/built-ins/Temporal/Calendar/from/subclassing-ignored.js
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.from
|
||||
description: The receiver is never called when calling from()
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkSubclassingIgnoredStatic(
|
||||
Temporal.Calendar,
|
||||
"from",
|
||||
["iso8601"],
|
||||
(result) => {
|
||||
assert.sameValue(result.id, "iso8601", "id property of result");
|
||||
assert.sameValue(result.toString(), "iso8601", "toString() of result");
|
||||
},
|
||||
);
|
25
test/built-ins/Temporal/Calendar/length.js
Normal file
25
test/built-ins/Temporal/Calendar/length.js
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: Temporal.Calendar.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
11
test/built-ins/Temporal/Calendar/missing-arguments.js
Normal file
11
test/built-ins/Temporal/Calendar/missing-arguments.js
Normal file
@ -0,0 +1,11 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: RangeError thrown when constructor invoked with no argument
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(RangeError, () => new Temporal.Calendar());
|
||||
assert.throws(RangeError, () => new Temporal.Calendar(undefined));
|
23
test/built-ins/Temporal/Calendar/name.js
Normal file
23
test/built-ins/Temporal/Calendar/name.js
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: Temporal.Calendar.name is "Calendar"
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar, "name", {
|
||||
value: "Calendar",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prop-desc.js
Normal file
21
test/built-ins/Temporal/Calendar/prop-desc.js
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar
|
||||
description: The "Calendar" property of Temporal
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar,
|
||||
"function",
|
||||
"`typeof Calendar` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal, "Calendar", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-plaindatetime.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dateAdd/argument-plaindatetime.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Fast path for converting Temporal.PlainDateTime to Temporal.PlainDate by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateadd step 4:
|
||||
4. Set _date_ to ? ToTemporalDate(_date_).
|
||||
sec-temporal-totemporaldate step 2.b:
|
||||
b. If _item_ has an [[InitializedTemporalDateTime]] internal slot, then
|
||||
i. Return ! CreateTemporalDate(_item_.[[ISOYear]], _item_.[[ISOMonth]], _item_.[[ISODay]], _item_.[[Calendar]]).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkPlainDateTimeConversionFastPath((datetime) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(0, 1);
|
||||
const result = calendar.dateAdd(datetime, duration);
|
||||
TemporalHelpers.assertPlainDate(result, 2000, 6, "M06", 2);
|
||||
assert.sameValue(result.hour, undefined, "instance of PlainDate returned, not PlainDateTime");
|
||||
});
|
@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, -Infinity, Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(1);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dateAdd(datetime, duration));
|
||||
});
|
@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(1);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dateAdd(datetime, duration));
|
||||
});
|
@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(1);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(TypeError, () => calendar.dateAdd(datetime, duration));
|
||||
});
|
22
test/built-ins/Temporal/Calendar/prototype/dateAdd/balance-smaller-units.js
vendored
Normal file
22
test/built-ins/Temporal/Calendar/prototype/dateAdd/balance-smaller-units.js
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Durations with units smaller than days are balanced before adding
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2, calendar);
|
||||
const duration = new Temporal.Duration(0, 0, 0, 1, 24, 1440, 86400, 86400_000, 86400_000_000, 86400_000_000_000);
|
||||
|
||||
const result = calendar.dateAdd(date, duration);
|
||||
TemporalHelpers.assertPlainDate(result, 2000, 5, "M05", 9, "units smaller than days are balanced");
|
||||
|
||||
const resultString = calendar.dateAdd(date, "P1DT24H1440M86400S");
|
||||
TemporalHelpers.assertPlainDate(resultString, 2000, 5, "M05", 6, "units smaller than days are balanced");
|
||||
|
||||
const resultPropBag = calendar.dateAdd(date, { days: 1, hours: 24, minutes: 1440, seconds: 86400, milliseconds: 86400_000, microseconds: 86400_000_000, nanoseconds: 86400_000_000_000 });
|
||||
TemporalHelpers.assertPlainDate(resultPropBag, 2000, 5, "M05", 9, "units smaller than days are balanced");
|
50
test/built-ins/Temporal/Calendar/prototype/dateAdd/basic.js
vendored
Normal file
50
test/built-ins/Temporal/Calendar/prototype/dateAdd/basic.js
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Basic tests for dateAdd().
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
const date = Temporal.PlainDate.from("1994-11-06");
|
||||
const positiveDuration = Temporal.Duration.from({ months: 1, weeks: 1 });
|
||||
const negativeDuration = Temporal.Duration.from({ months: -1, weeks: -1 });
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd(Temporal.PlainDateTime.from("1994-11-06T08:15:30"), positiveDuration, {}),
|
||||
1994, 12, "M12", 13, "date: PlainDateTime");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd({ year: 1994, month: 11, day: 6 }, positiveDuration, {}),
|
||||
1994, 12, "M12", 13, "date: property bag");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd("1994-11-06", positiveDuration, {}),
|
||||
1994, 12, "M12", 13, "date: string");
|
||||
|
||||
assert.throws(TypeError, () => iso.dateAdd({ month: 11 }, positiveDuration, {}), "date: missing property");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd(date, { months: 1, weeks: 1 }, {}),
|
||||
1994, 12, "M12", 13, "duration: property bag");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd(date, "P1M1W", {}),
|
||||
1994, 12, "M12", 13, "duration: string");
|
||||
|
||||
assert.throws(TypeError, () => iso.dateAdd(date, { month: 1 }, {}), "duration: missing property");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd(Temporal.PlainDateTime.from("1994-11-06T08:15:30"), negativeDuration, {}),
|
||||
1994, 9, "M09", 29, "date: PlainDateTime, negative duration");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd({ year: 1994, month: 11, day: 6 }, negativeDuration, {}),
|
||||
1994, 9, "M09", 29, "date: property bag, negative duration");
|
||||
|
||||
TemporalHelpers.assertPlainDate(
|
||||
iso.dateAdd("1994-11-06", negativeDuration, {}),
|
||||
1994, 9, "M09", 29, "date: string, negative duration");
|
33
test/built-ins/Temporal/Calendar/prototype/dateAdd/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dateAdd/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.dateAdd
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.dateAdd),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.dateAdd),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.dateAdd),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.dateAdd.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
33
test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-fields-iterable.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-fields-iterable.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Verify the result of calendar.fields() is treated correctly.
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateadd step 4:
|
||||
4. Set _date_ to ? ToTemporalDate(_date_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _fieldNames_ be ? CalendarFields(_calendar_, « *"day"*, *"month"*, *"monthCode"*, *"year"* »).
|
||||
sec-temporal-calendarfields step 4:
|
||||
4. Let _result_ be ? IterableToListOfType(_fieldsArray_, « String »).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"day",
|
||||
"month",
|
||||
"monthCode",
|
||||
"year",
|
||||
];
|
||||
|
||||
const duration = new Temporal.Duration(0, 1);
|
||||
const calendar1 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar2 = TemporalHelpers.calendarFieldsIterable();
|
||||
calendar1.dateAdd({ year: 2000, month: 5, day: 2, calendar: calendar2 }, duration);
|
||||
|
||||
assert.sameValue(calendar1.fieldsCallCount, 0, "fields() method not called");
|
||||
assert.sameValue(calendar2.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.compareArray(calendar2.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar2.iteratorExhausted[0], "iterated through the whole iterable");
|
27
test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-temporal-object.js
vendored
Normal file
27
test/built-ins/Temporal/Calendar/prototype/dateAdd/calendar-temporal-object.js
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateadd step 4:
|
||||
4. Set _date_ to ? ToTemporalDate(_date_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _calendar_ be ? GetTemporalCalendarWithISODefault(_item_).
|
||||
sec-temporal-gettemporalcalendarwithisodefault step 2:
|
||||
2. Return ? ToTemporalCalendarWithISODefault(_calendar_).
|
||||
sec-temporal-totemporalcalendarwithisodefault step 2:
|
||||
3. Return ? ToTemporalCalendar(_temporalCalendarLike_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(0, 1);
|
||||
calendar.dateAdd({ year: 2000, month: 5, day: 2, calendar: temporalObject }, duration);
|
||||
});
|
26
test/built-ins/Temporal/Calendar/prototype/dateAdd/date-infinity-throws-rangeerror.js
vendored
Normal file
26
test/built-ins/Temporal/Calendar/prototype/dateAdd/date-infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in the property bag is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const duration = new Temporal.Duration(1);
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
["constrain", "reject"].forEach((overflow) => {
|
||||
assert.throws(RangeError, () => instance.dateAdd({ ...base, [prop]: inf }, duration, { overflow }), `${prop} property cannot be ${inf} (overflow ${overflow}`);
|
||||
|
||||
const calls = [];
|
||||
const obj = TemporalHelpers.toPrimitiveObserver(calls, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dateAdd({ ...base, [prop]: obj }, duration, { overflow }));
|
||||
assert.compareArray(calls, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
||||
});
|
@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Strings with fractional duration units are treated with the correct sign
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const instance = new Temporal.PlainDate(2000, 5, 2, calendar);
|
||||
|
||||
const resultHours = calendar.dateAdd(instance, "-PT24.567890123H");
|
||||
TemporalHelpers.assertPlainDate(resultHours, 2000, 5, "M05", 1, "negative fractional hours");
|
||||
|
||||
const resultMinutes = calendar.dateAdd(instance, "-PT1440.567890123M");
|
||||
TemporalHelpers.assertPlainDate(resultMinutes, 2000, 5, "M05", 1, "negative fractional minutes");
|
25
test/built-ins/Temporal/Calendar/prototype/dateAdd/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateAdd/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Temporal.Calendar.prototype.dateAdd.length is 2
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateAdd, "length", {
|
||||
value: 2,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dateAdd/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dateAdd/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Temporal.Calendar.prototype.dateAdd.name is "dateAdd".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateAdd, "name", {
|
||||
value: "dateAdd",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/dateAdd/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateAdd/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: >
|
||||
Temporal.Calendar.prototype.dateAdd does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.dateAdd();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.dateAdd), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.dateAdd)");
|
20
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js
vendored
Normal file
20
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-invalid-string.js
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: RangeError thrown when overflow option not one of the allowed string values
|
||||
info: |
|
||||
sec-getoption step 10:
|
||||
10. If _values_ is not *undefined* and _values_ does not contain an element equal to _value_, throw a *RangeError* exception.
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal.calendar.prototype.dateadd step 7:
|
||||
7. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2, calendar);
|
||||
const duration = new Temporal.Duration(3, 3, 0, 3);
|
||||
assert.throws(RangeError, () => calendar.dateAdd(date, duration, { overflow: "other string" }));
|
25
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-undefined.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-undefined.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Fallback value for overflow option
|
||||
info: |
|
||||
sec-getoption step 3:
|
||||
3. If _value_ is *undefined*, return _fallback_.
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal.calendar.prototype.dateadd step 7:
|
||||
7. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 31, calendar);
|
||||
const duration = new Temporal.Duration(3, 1);
|
||||
|
||||
const explicit = calendar.dateAdd(date, duration, { overflow: undefined });
|
||||
TemporalHelpers.assertPlainDate(explicit, 2003, 6, "M06", 30, "default overflow is constrain");
|
||||
const implicit = calendar.dateAdd(date, duration, {});
|
||||
TemporalHelpers.assertPlainDate(implicit, 2003, 6, "M06", 30, "default overflow is constrain");
|
24
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-wrong-type.js
vendored
Normal file
24
test/built-ins/Temporal/Calendar/prototype/dateAdd/overflow-wrong-type.js
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: Type conversions for overflow option
|
||||
info: |
|
||||
sec-getoption step 9.a:
|
||||
a. Set _value_ to ? ToString(_value_).
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal.calendar.prototype.dateadd step 7:
|
||||
7. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2, calendar);
|
||||
const duration = new Temporal.Duration(3, 3, 0, 3);
|
||||
TemporalHelpers.checkStringOptionWrongType("overflow", "constrain",
|
||||
(overflow) => calendar.dateAdd(date, duration, { overflow }),
|
||||
(result, descr) => TemporalHelpers.assertPlainDate(result, 2003, 8, "M08", 5, descr),
|
||||
);
|
21
test/built-ins/Temporal/Calendar/prototype/dateAdd/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateAdd/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateadd
|
||||
description: The "dateAdd" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.dateAdd,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.dateAdd` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "dateAdd", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
33
test/built-ins/Temporal/Calendar/prototype/dateFromFields/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dateFromFields/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.dateFromFields
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.dateFromFields),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.dateFromFields),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.dateFromFields),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.dateFromFields.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
14
test/built-ins/Temporal/Calendar/prototype/dateFromFields/fields-not-object.js
vendored
Normal file
14
test/built-ins/Temporal/Calendar/prototype/dateFromFields/fields-not-object.js
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: Throw a TypeError if the fields is not an object
|
||||
features: [Symbol, Temporal]
|
||||
---*/
|
||||
|
||||
const tests = [undefined, null, false, "string", Symbol("sym"), Math.PI, 42n];
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
for (const fields of tests) {
|
||||
assert.throws(TypeError, () => iso.dateFromFields(fields, {}));
|
||||
}
|
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in the property bag is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
["constrain", "reject"].forEach((overflow) => {
|
||||
assert.throws(RangeError, () => instance.dateFromFields({ ...base, [prop]: inf }, { overflow }), `${prop} property cannot be ${inf} (overflow ${overflow}`);
|
||||
|
||||
const calls = [];
|
||||
const obj = TemporalHelpers.toPrimitiveObserver(calls, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dateFromFields({ ...base, [prop]: obj }, { overflow }));
|
||||
assert.compareArray(calls, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
||||
});
|
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: Temporal.Calendar.prototype.dateFromFields.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateFromFields, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dateFromFields/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dateFromFields/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: Temporal.Calendar.prototype.dateFromFields.name is "dateFromFields".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateFromFields, "name", {
|
||||
value: "dateFromFields",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/dateFromFields/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateFromFields/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: >
|
||||
Temporal.Calendar.prototype.dateFromFields does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.dateFromFields();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.dateFromFields), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.dateFromFields)");
|
20
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js
vendored
Normal file
20
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: RangeError thrown when overflow option not one of the allowed string values
|
||||
info: |
|
||||
sec-getoption step 10:
|
||||
10. If _values_ is not *undefined* and _values_ does not contain an element equal to _value_, throw a *RangeError* exception.
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal-isodatefromfields step 2:
|
||||
2. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
sec-temporal.calendar.prototype.datefromfields step 6:
|
||||
6. Let _result_ be ? ISODateFromFields(_fields_, _options_).
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
assert.throws(RangeError, () => calendar.dateFromFields({ year: 2000, month: 5, day: 2 }, { overflow: "other string" }));
|
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-undefined.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-undefined.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: Fallback value for overflow option
|
||||
info: |
|
||||
sec-getoption step 3:
|
||||
3. If _value_ is *undefined*, return _fallback_.
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal-isodatefromfields step 2:
|
||||
2. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
sec-temporal.calendar.prototype.datefromfields step 6:
|
||||
6. Let _result_ be ? ISODateFromFields(_fields_, _options_).
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
|
||||
const explicit = calendar.dateFromFields({ year: 2000, month: 15, day: 2 }, { overflow: undefined });
|
||||
TemporalHelpers.assertPlainDate(explicit, 2000, 12, "M12", 2, "default overflow is constrain");
|
||||
const implicit = calendar.dateFromFields({ year: 2000, month: 15, day: 2 }, {});
|
||||
TemporalHelpers.assertPlainDate(implicit, 2000, 12, "M12", 2, "default overflow is constrain");
|
24
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-wrong-type.js
vendored
Normal file
24
test/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-wrong-type.js
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: Type conversions for overflow option
|
||||
info: |
|
||||
sec-getoption step 9.a:
|
||||
a. Set _value_ to ? ToString(_value_).
|
||||
sec-temporal-totemporaloverflow step 1:
|
||||
1. Return ? GetOption(_normalizedOptions_, *"overflow"*, « String », « *"constrain"*, *"reject"* », *"constrain"*).
|
||||
sec-temporal-isodatefromfields step 2:
|
||||
2. Let _overflow_ be ? ToTemporalOverflow(_options_).
|
||||
sec-temporal.calendar.prototype.datefromfields step 6:
|
||||
6. Let _result_ be ? ISODateFromFields(_fields_, _options_).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
TemporalHelpers.checkStringOptionWrongType("overflow", "constrain",
|
||||
(overflow) => calendar.dateFromFields({ year: 2000, month: 5, day: 2 }, { overflow }),
|
||||
(result, descr) => TemporalHelpers.assertPlainDate(result, 2000, 5, "M05", 2, descr),
|
||||
);
|
21
test/built-ins/Temporal/Calendar/prototype/dateFromFields/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateFromFields/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.datefromfields
|
||||
description: The "dateFromFields" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.dateFromFields,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.dateFromFields` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "dateFromFields", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
31
test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-infinity-throws-rangeerror.js
vendored
Normal file
31
test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in a property bag for either argument is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const other = new Temporal.PlainDate(2001, 6, 3);
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
assert.throws(RangeError, () => instance.dateUntil({ ...base, [prop]: inf }, other), `${prop} property cannot be ${inf}`);
|
||||
|
||||
assert.throws(RangeError, () => instance.dateUntil(other, { ...base, [prop]: inf }), `${prop} property cannot be ${inf}`);
|
||||
|
||||
const calls1 = [];
|
||||
const obj1 = TemporalHelpers.toPrimitiveObserver(calls1, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dateUntil({ ...base, [prop]: obj1 }, other));
|
||||
assert.compareArray(calls1, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
|
||||
const calls2 = [];
|
||||
const obj2 = TemporalHelpers.toPrimitiveObserver(calls2, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dateUntil(other, { ...base, [prop]: obj2 }));
|
||||
assert.compareArray(calls2, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
30
test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-plaindatetime.js
vendored
Normal file
30
test/built-ins/Temporal/Calendar/prototype/dateUntil/argument-plaindatetime.js
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Fast path for converting Temporal.PlainDateTime to Temporal.PlainDate by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateuntil steps 4–5:
|
||||
4. Set _one_ to ? ToTemporalDate(_one_).
|
||||
5. Set _two_ to ? ToTemporalDate(_two_).
|
||||
sec-temporal-totemporaldate step 2.b:
|
||||
b. If _item_ has an [[InitializedTemporalDateTime]] internal slot, then
|
||||
i. Return ! CreateTemporalDate(_item_.[[ISOYear]], _item_.[[ISOMonth]], _item_.[[ISODay]], _item_.[[Calendar]]).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const date = new Temporal.PlainDate(2000, 5, 2);
|
||||
|
||||
TemporalHelpers.checkPlainDateTimeConversionFastPath((datetime) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const result = calendar.dateUntil(datetime, date);
|
||||
assert.sameValue(result.total({ unit: "nanoseconds" }), 0, "time part dropped");
|
||||
});
|
||||
|
||||
TemporalHelpers.checkPlainDateTimeConversionFastPath((datetime) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const result = calendar.dateUntil(date, datetime);
|
||||
assert.sameValue(result.total({ unit: "nanoseconds" }), 0, "time part dropped");
|
||||
});
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, Infinity, -Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
|
||||
assert.throws(RangeError, () => calendar.dateUntil(datetime, date));
|
||||
assert.throws(RangeError, () => calendar.dateUntil(date, datetime));
|
||||
});
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
|
||||
assert.throws(RangeError, () => calendar.dateUntil(datetime, date));
|
||||
assert.throws(RangeError, () => calendar.dateUntil(date, datetime));
|
||||
});
|
@ -0,0 +1,28 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const date = new Temporal.PlainDate(2000, 5, 2);
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
|
||||
assert.throws(TypeError, () => calendar.dateUntil(datetime, date));
|
||||
assert.throws(TypeError, () => calendar.dateUntil(date, datetime));
|
||||
});
|
45
test/built-ins/Temporal/Calendar/prototype/dateUntil/basic.js
vendored
Normal file
45
test/built-ins/Temporal/Calendar/prototype/dateUntil/basic.js
vendored
Normal file
@ -0,0 +1,45 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Basic tests for dateUntil().
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
const date1 = Temporal.PlainDate.from("1999-09-03");
|
||||
const date2 = Temporal.PlainDate.from("2000-01-01");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil(date1, date2, {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "two PlainDates");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil(Temporal.PlainDateTime.from("1999-09-03T08:15:30"), date2, {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "first argument: PlainDateTime");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil({ year: 1999, month: 9, day: 3 }, date2, {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "first argument: property bag");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil("1999-09-03", date2, {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "first argument: string");
|
||||
|
||||
assert.throws(TypeError, () => iso.dateUntil({ month: 11 }, date2, {}), "first argument: missing property");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil(date1, Temporal.PlainDateTime.from("2000-01-01T08:15:30"), {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "second argument: PlainDateTime");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil(date1, { year: 2000, month: 1, day: 1 }, {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "second argument: property bag");
|
||||
|
||||
TemporalHelpers.assertDuration(
|
||||
iso.dateUntil(date1, "2000-01-01", {}),
|
||||
0, 0, 0, 120, 0, 0, 0, 0, 0, 0, "second argument: string");
|
||||
|
||||
assert.throws(TypeError, () => iso.dateUntil(date1, { month: 11 }, {}), "second argument: missing property");
|
33
test/built-ins/Temporal/Calendar/prototype/dateUntil/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dateUntil/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.dateUntil
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.dateUntil),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.dateUntil),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.dateUntil),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.dateUntil.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
40
test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-fields-iterable.js
vendored
Normal file
40
test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-fields-iterable.js
vendored
Normal file
@ -0,0 +1,40 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Verify the result of calendar.fields() is treated correctly.
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateuntil steps 4–5:
|
||||
4. Set _one_ to ? ToTemporalDate(_one_).
|
||||
5. Set _two_ to ? ToTemporalDate(_two_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _fieldNames_ be ? CalendarFields(_calendar_, « *"day"*, *"month"*, *"monthCode"*, *"year"* »).
|
||||
sec-temporal-calendarfields step 4:
|
||||
4. Let _result_ be ? IterableToListOfType(_fieldsArray_, « String »).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"day",
|
||||
"month",
|
||||
"monthCode",
|
||||
"year",
|
||||
];
|
||||
|
||||
const calendar1 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar2 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar3 = TemporalHelpers.calendarFieldsIterable();
|
||||
calendar1.dateUntil(
|
||||
{ year: 2000, month: 5, day: 2, calendar: calendar2 },
|
||||
{ year: 2005, month: 6, day: 3, calendar: calendar3 },
|
||||
);
|
||||
|
||||
assert.sameValue(calendar1.fieldsCallCount, 0, "fields() method not called");
|
||||
assert.sameValue(calendar2.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.sameValue(calendar3.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.compareArray(calendar2.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar2.iteratorExhausted[0], "iterated through the whole iterable");
|
||||
assert.compareArray(calendar3.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar3.iteratorExhausted[0], "iterated through the whole iterable");
|
30
test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-temporal-object.js
vendored
Normal file
30
test/built-ins/Temporal/Calendar/prototype/dateUntil/calendar-temporal-object.js
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dateuntil steps 4–5:
|
||||
4. Set _one_ to ? ToTemporalDate(_one_).
|
||||
5. Set _two_ to ? ToTemporalDate(_two_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _calendar_ be ? GetTemporalCalendarWithISODefault(_item_).
|
||||
sec-temporal-gettemporalcalendarwithisodefault step 2:
|
||||
2. Return ? ToTemporalCalendarWithISODefault(_calendar_).
|
||||
sec-temporal-totemporalcalendarwithisodefault step 2:
|
||||
3. Return ? ToTemporalCalendar(_temporalCalendarLike_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
calendar.dateUntil(
|
||||
{ year: 2000, month: 5, day: 2, calendar: temporalObject },
|
||||
{ year: 2005, month: 6, day: 3, calendar: temporalObject },
|
||||
);
|
||||
});
|
20
test/built-ins/Temporal/Calendar/prototype/dateUntil/largestunit-plurals-accepted.js
vendored
Normal file
20
test/built-ins/Temporal/Calendar/prototype/dateUntil/largestunit-plurals-accepted.js
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Plural units are accepted as well for the largestUnit option
|
||||
includes: [temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const earlier = new Temporal.PlainDate(2000, 5, 2);
|
||||
const later = new Temporal.PlainDate(2001, 6, 12);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const validUnits = [
|
||||
"year",
|
||||
"month",
|
||||
"week",
|
||||
"day",
|
||||
];
|
||||
TemporalHelpers.checkPluralUnitsAccepted((largestUnit) => calendar.dateUntil(earlier, later, { largestUnit }), validUnits);
|
25
test/built-ins/Temporal/Calendar/prototype/dateUntil/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dateUntil/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Temporal.Calendar.prototype.dateUntil.length is 2
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateUntil, "length", {
|
||||
value: 2,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dateUntil/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dateUntil/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: Temporal.Calendar.prototype.dateUntil.name is "dateUntil".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dateUntil, "name", {
|
||||
value: "dateUntil",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/dateUntil/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateUntil/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: >
|
||||
Temporal.Calendar.prototype.dateUntil does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.dateUntil();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.dateUntil), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.dateUntil)");
|
21
test/built-ins/Temporal/Calendar/prototype/dateUntil/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dateUntil/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dateuntil
|
||||
description: The "dateUntil" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.dateUntil,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.dateUntil` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "dateUntil", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, -Infinity, Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.day(datetime));
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.day(datetime));
|
||||
});
|
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(TypeError, () => calendar.day(datetime));
|
||||
});
|
17
test/built-ins/Temporal/Calendar/prototype/day/basic.js
vendored
Normal file
17
test/built-ins/Temporal/Calendar/prototype/day/basic.js
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: Basic tests for day().
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
const res = 5;
|
||||
assert.sameValue(iso.day(Temporal.PlainDate.from("1994-11-05")), res, "PlainDate");
|
||||
assert.sameValue(iso.day(Temporal.PlainDateTime.from("1994-11-05T08:15:30")), res, "PlainDateTime");
|
||||
assert.sameValue(iso.day(Temporal.PlainMonthDay.from("11-05")), res, "PlainMonthDay");
|
||||
assert.sameValue(iso.day({ year: 1994, month: 11, day: 5 }), res, "property bag");
|
||||
assert.sameValue(iso.day("1994-11-05"), res, "string");
|
||||
assert.throws(TypeError, () => iso.day({ year: 2000 }), "property bag with missing properties");
|
33
test/built-ins/Temporal/Calendar/prototype/day/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/day/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.day
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.day),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.day),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.day),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.day.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
34
test/built-ins/Temporal/Calendar/prototype/day/calendar-fields-iterable.js
vendored
Normal file
34
test/built-ins/Temporal/Calendar/prototype/day/calendar-fields-iterable.js
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: Verify the result of calendar.fields() is treated correctly.
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.day step 4:
|
||||
4. Return ? ISODay(_dateOrDateTime_).
|
||||
sec-temporal-isoday step 1.a:
|
||||
a. Set _dateOrDateTime_ to ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _fieldNames_ be ? CalendarFields(calendar, « *"day"*, *"month"*, *"monthCode"*, *"year"* »).
|
||||
sec-temporal-calendarfields step 4:
|
||||
4. Let _result_ be ? IterableToListOfType(_fieldsArray_, « String »).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"day",
|
||||
"month",
|
||||
"monthCode",
|
||||
"year",
|
||||
];
|
||||
|
||||
const calendar1 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar2 = TemporalHelpers.calendarFieldsIterable();
|
||||
calendar1.day({ year: 2000, month: 5, day: 2, calendar: calendar2 });
|
||||
|
||||
assert.sameValue(calendar1.fieldsCallCount, 0, "fields() method not called");
|
||||
assert.sameValue(calendar2.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.compareArray(calendar2.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar2.iteratorExhausted[0], "iterated through the whole iterable");
|
28
test/built-ins/Temporal/Calendar/prototype/day/calendar-temporal-object.js
vendored
Normal file
28
test/built-ins/Temporal/Calendar/prototype/day/calendar-temporal-object.js
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.day step 4:
|
||||
4. Return ? ISODay(_dateOrDateTime_).
|
||||
sec-temporal-isoday step 1.a:
|
||||
a. Set _dateOrDateTime_ to ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _calendar_ be ? GetTemporalCalendarWithISODefault(_item_).
|
||||
sec-temporal-gettemporalcalendarwithisodefault step 2:
|
||||
2. Return ? ToTemporalCalendarWithISODefault(_calendar_).
|
||||
sec-temporal-totemporalcalendarwithisodefault step 2:
|
||||
3. Return ? ToTemporalCalendar(_temporalCalendarLike_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
calendar.day({ year: 2000, month: 5, day: 2, calendar: temporalObject });
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/day/infinity-throws-rangeerror.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/day/infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in the property bag is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
assert.throws(RangeError, () => instance.day({ ...base, [prop]: inf }), `${prop} property cannot be ${inf}`);
|
||||
|
||||
const calls = [];
|
||||
const obj = TemporalHelpers.toPrimitiveObserver(calls, inf, prop);
|
||||
assert.throws(RangeError, () => instance.day({ ...base, [prop]: obj }));
|
||||
assert.compareArray(calls, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
25
test/built-ins/Temporal/Calendar/prototype/day/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/day/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: Temporal.Calendar.prototype.day.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.day, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/day/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/day/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: Temporal.Calendar.prototype.day.name is "day".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.day, "name", {
|
||||
value: "day",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/day/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/day/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: >
|
||||
Temporal.Calendar.prototype.day does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.day();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.day), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.day)");
|
21
test/built-ins/Temporal/Calendar/prototype/day/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/day/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.day
|
||||
description: The "day" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.day,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.day` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "day", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, -Infinity, Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dayOfWeek(datetime));
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dayOfWeek(datetime));
|
||||
});
|
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(TypeError, () => calendar.dayOfWeek(datetime));
|
||||
});
|
16
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/basic.js
vendored
Normal file
16
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/basic.js
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: Basic tests for dayOfWeek().
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
const res = 6;
|
||||
assert.sameValue(iso.dayOfWeek(Temporal.PlainDate.from("1994-11-05")), res, "PlainDate");
|
||||
assert.sameValue(iso.dayOfWeek(Temporal.PlainDateTime.from("1994-11-05T08:15:30")), res, "PlainDateTime");
|
||||
assert.sameValue(iso.dayOfWeek({ year: 1994, month: 11, day: 5 }), res, "property bag");
|
||||
assert.sameValue(iso.dayOfWeek("1994-11-05"), res, "string");
|
||||
assert.throws(TypeError, () => iso.dayOfWeek({ year: 2000 }), "property bag with missing properties");
|
33
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.dayOfWeek
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.dayOfWeek),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.dayOfWeek),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.dayOfWeek),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.dayOfWeek.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
32
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-fields-iterable.js
vendored
Normal file
32
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-fields-iterable.js
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: Verify the result of calendar.fields() is treated correctly.
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dayofweek step 4:
|
||||
4. Let _date_ be ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _fieldNames_ be ? CalendarFields(_calendar_, « *"day"*, *"month"*, *"monthCode"*, *"year"* »).
|
||||
sec-temporal-calendarfields step 4:
|
||||
4. Let _result_ be ? IterableToListOfType(_fieldsArray_, « String »).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"day",
|
||||
"month",
|
||||
"monthCode",
|
||||
"year",
|
||||
];
|
||||
|
||||
const calendar1 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar2 = TemporalHelpers.calendarFieldsIterable();
|
||||
calendar1.dayOfWeek({ year: 2000, month: 5, day: 2, calendar: calendar2 });
|
||||
|
||||
assert.sameValue(calendar1.fieldsCallCount, 0, "fields() method not called");
|
||||
assert.sameValue(calendar2.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.compareArray(calendar2.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar2.iteratorExhausted[0], "iterated through the whole iterable");
|
26
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-temporal-object.js
vendored
Normal file
26
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/calendar-temporal-object.js
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dayofweek step 4:
|
||||
4. Let _date_ be ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _calendar_ be ? GetTemporalCalendarWithISODefault(_item_).
|
||||
sec-temporal-gettemporalcalendarwithisodefault step 2:
|
||||
2. Return ? ToTemporalCalendarWithISODefault(_calendar_).
|
||||
sec-temporal-totemporalcalendarwithisodefault step 2:
|
||||
3. Return ? ToTemporalCalendar(_temporalCalendarLike_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
calendar.dayOfWeek({ year: 2000, month: 5, day: 2, calendar: temporalObject });
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/infinity-throws-rangeerror.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in the property bag is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
assert.throws(RangeError, () => instance.dayOfWeek({ ...base, [prop]: inf }), `${prop} property cannot be ${inf}`);
|
||||
|
||||
const calls = [];
|
||||
const obj = TemporalHelpers.toPrimitiveObserver(calls, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dayOfWeek({ ...base, [prop]: obj }));
|
||||
assert.compareArray(calls, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
25
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: Temporal.Calendar.prototype.dayOfWeek.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dayOfWeek, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: Temporal.Calendar.prototype.dayOfWeek.name is "dayOfWeek".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dayOfWeek, "name", {
|
||||
value: "dayOfWeek",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: >
|
||||
Temporal.Calendar.prototype.dayOfWeek does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.dayOfWeek();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.dayOfWeek), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.dayOfWeek)");
|
21
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dayOfWeek/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofweek
|
||||
description: The "dayOfWeek" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.dayOfWeek,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.dayOfWeek` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "dayOfWeek", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, -Infinity, Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dayOfYear(datetime));
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.dayOfYear(datetime));
|
||||
});
|
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(TypeError, () => calendar.dayOfYear(datetime));
|
||||
});
|
16
test/built-ins/Temporal/Calendar/prototype/dayOfYear/basic.js
vendored
Normal file
16
test/built-ins/Temporal/Calendar/prototype/dayOfYear/basic.js
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: Basic tests for dayOfYear().
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const iso = Temporal.Calendar.from("iso8601");
|
||||
const res = 309;
|
||||
assert.sameValue(iso.dayOfYear(Temporal.PlainDate.from("1994-11-05")), res, "PlainDate");
|
||||
assert.sameValue(iso.dayOfYear(Temporal.PlainDateTime.from("1994-11-05T08:15:30")), res, "PlainDateTime");
|
||||
assert.sameValue(iso.dayOfYear({ year: 1994, month: 11, day: 5 }), res, "property bag");
|
||||
assert.sameValue(iso.dayOfYear("1994-11-05"), res, "string");
|
||||
assert.throws(TypeError, () => iso.dayOfYear({ year: 2000 }), "property bag with missing properties");
|
33
test/built-ins/Temporal/Calendar/prototype/dayOfYear/builtin.js
vendored
Normal file
33
test/built-ins/Temporal/Calendar/prototype/dayOfYear/builtin.js
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: >
|
||||
Tests that Temporal.Calendar.prototype.dayOfYear
|
||||
meets the requirements for built-in objects defined by the
|
||||
introduction of chapter 17 of the ECMAScript Language Specification.
|
||||
info: |
|
||||
Built-in functions that are not constructors do not have a "prototype" property unless
|
||||
otherwise specified in the description of a particular function.
|
||||
|
||||
Unless specified otherwise, a built-in object that is callable as a function is a built-in
|
||||
function object with the characteristics described in 10.3. Unless specified otherwise, the
|
||||
[[Extensible]] internal slot of a built-in object initially has the value true.
|
||||
|
||||
Unless otherwise specified every built-in function and every built-in constructor has the
|
||||
Function prototype object [...] as the value of its [[Prototype]] internal slot.
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(Object.isExtensible(Temporal.Calendar.prototype.dayOfYear),
|
||||
true, "Built-in objects must be extensible.");
|
||||
|
||||
assert.sameValue(Object.prototype.toString.call(Temporal.Calendar.prototype.dayOfYear),
|
||||
"[object Function]", "Object.prototype.toString");
|
||||
|
||||
assert.sameValue(Object.getPrototypeOf(Temporal.Calendar.prototype.dayOfYear),
|
||||
Function.prototype, "prototype");
|
||||
|
||||
assert.sameValue(Temporal.Calendar.prototype.dayOfYear.hasOwnProperty("prototype"),
|
||||
false, "prototype property");
|
32
test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-fields-iterable.js
vendored
Normal file
32
test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-fields-iterable.js
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: Verify the result of calendar.fields() is treated correctly.
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dayofyear step 4:
|
||||
4. Let _date_ be ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _fieldNames_ be ? CalendarFields(_calendar_, « *"day"*, *"month"*, *"monthCode"*, *"year"* »).
|
||||
sec-temporal-calendarfields step 4:
|
||||
4. Let _result_ be ? IterableToListOfType(_fieldsArray_, « String »).
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const expected = [
|
||||
"day",
|
||||
"month",
|
||||
"monthCode",
|
||||
"year",
|
||||
];
|
||||
|
||||
const calendar1 = TemporalHelpers.calendarFieldsIterable();
|
||||
const calendar2 = TemporalHelpers.calendarFieldsIterable();
|
||||
calendar1.dayOfYear({ year: 2000, month: 5, day: 2, calendar: calendar2 });
|
||||
|
||||
assert.sameValue(calendar1.fieldsCallCount, 0, "fields() method not called");
|
||||
assert.sameValue(calendar2.fieldsCallCount, 1, "fields() method called once");
|
||||
assert.compareArray(calendar2.fieldsCalledWith[0], expected, "fields() method called with correct args");
|
||||
assert(calendar2.iteratorExhausted[0], "iterated through the whole iterable");
|
26
test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-temporal-object.js
vendored
Normal file
26
test/built-ins/Temporal/Calendar/prototype/dayOfYear/calendar-temporal-object.js
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: Fast path for converting other Temporal objects to Temporal.Calendar by reading internal slots
|
||||
info: |
|
||||
sec-temporal.calendar.prototype.dayofyear step 4:
|
||||
4. Let _date_ be ? ToTemporalDate(_dateOrDateTime_).
|
||||
sec-temporal-totemporaldate step 2.c:
|
||||
c. Let _calendar_ be ? GetTemporalCalendarWithISODefault(_item_).
|
||||
sec-temporal-gettemporalcalendarwithisodefault step 2:
|
||||
2. Return ? ToTemporalCalendarWithISODefault(_calendar_).
|
||||
sec-temporal-totemporalcalendarwithisodefault step 2:
|
||||
3. Return ? ToTemporalCalendar(_temporalCalendarLike_).
|
||||
sec-temporal-totemporalcalendar step 1.a:
|
||||
a. If _temporalCalendarLike_ has an [[InitializedTemporalDate]], [[InitializedTemporalDateTime]], [[InitializedTemporalMonthDay]], [[InitializedTemporalYearMonth]], or [[InitializedTemporalZonedDateTime]] internal slot, then
|
||||
i. Return _temporalCalendarLike_.[[Calendar]].
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
TemporalHelpers.checkToTemporalCalendarFastPath((temporalObject) => {
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
calendar.dayOfYear({ year: 2000, month: 5, day: 2, calendar: temporalObject });
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dayOfYear/infinity-throws-rangeerror.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dayOfYear/infinity-throws-rangeerror.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
description: Throws if any value in the property bag is Infinity or -Infinity
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
includes: [compareArray.js, temporalHelpers.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
const instance = new Temporal.Calendar("iso8601");
|
||||
const base = { year: 2000, month: 5, day: 2 };
|
||||
|
||||
[Infinity, -Infinity].forEach((inf) => {
|
||||
["year", "month", "day"].forEach((prop) => {
|
||||
assert.throws(RangeError, () => instance.dayOfYear({ ...base, [prop]: inf }), `${prop} property cannot be ${inf}`);
|
||||
|
||||
const calls = [];
|
||||
const obj = TemporalHelpers.toPrimitiveObserver(calls, inf, prop);
|
||||
assert.throws(RangeError, () => instance.dayOfYear({ ...base, [prop]: obj }));
|
||||
assert.compareArray(calls, [`get ${prop}.valueOf`, `call ${prop}.valueOf`], "it fails after fetching the primitive value");
|
||||
});
|
||||
});
|
25
test/built-ins/Temporal/Calendar/prototype/dayOfYear/length.js
vendored
Normal file
25
test/built-ins/Temporal/Calendar/prototype/dayOfYear/length.js
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2020 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: Temporal.Calendar.prototype.dayOfYear.length is 1
|
||||
info: |
|
||||
Every built-in function object, including constructors, has a "length" property whose value is
|
||||
an integer. Unless otherwise specified, this value is equal to the largest number of named
|
||||
arguments shown in the subclause headings for the function description. Optional parameters
|
||||
(which are indicated with brackets: [ ]) or rest parameters (which are shown using the form
|
||||
«...name») are not included in the default argument count.
|
||||
|
||||
Unless otherwise specified, the "length" property of a built-in function object has the
|
||||
attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dayOfYear, "length", {
|
||||
value: 1,
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
23
test/built-ins/Temporal/Calendar/prototype/dayOfYear/name.js
vendored
Normal file
23
test/built-ins/Temporal/Calendar/prototype/dayOfYear/name.js
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: Temporal.Calendar.prototype.dayOfYear.name is "dayOfYear".
|
||||
info: |
|
||||
Every built-in function object, including constructors, that is not identified as an anonymous
|
||||
function has a "name" property whose value is a String. Unless otherwise specified, this value
|
||||
is the name that is given to the function in this specification.
|
||||
|
||||
Unless otherwise specified, the "name" property of a built-in function object, if it exists,
|
||||
has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype.dayOfYear, "name", {
|
||||
value: "dayOfYear",
|
||||
writable: false,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
21
test/built-ins/Temporal/Calendar/prototype/dayOfYear/not-a-constructor.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dayOfYear/not-a-constructor.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: >
|
||||
Temporal.Calendar.prototype.dayOfYear does not implement [[Construct]], is not new-able
|
||||
info: |
|
||||
Built-in function objects that are not identified as constructors do not implement the
|
||||
[[Construct]] internal method unless otherwise specified in the description of a particular
|
||||
function.
|
||||
includes: [isConstructor.js]
|
||||
features: [Reflect.construct, Temporal]
|
||||
---*/
|
||||
|
||||
assert.throws(TypeError, () => {
|
||||
new Temporal.Calendar.prototype.dayOfYear();
|
||||
}, "Calling as constructor");
|
||||
|
||||
assert.sameValue(isConstructor(Temporal.Calendar.prototype.dayOfYear), false,
|
||||
"isConstructor(Temporal.Calendar.prototype.dayOfYear)");
|
21
test/built-ins/Temporal/Calendar/prototype/dayOfYear/prop-desc.js
vendored
Normal file
21
test/built-ins/Temporal/Calendar/prototype/dayOfYear/prop-desc.js
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.dayofyear
|
||||
description: The "dayOfYear" property of Temporal.Calendar.prototype
|
||||
includes: [propertyHelper.js]
|
||||
features: [Temporal]
|
||||
---*/
|
||||
|
||||
assert.sameValue(
|
||||
typeof Temporal.Calendar.prototype.dayOfYear,
|
||||
"function",
|
||||
"`typeof Calendar.prototype.dayOfYear` is `function`"
|
||||
);
|
||||
|
||||
verifyProperty(Temporal.Calendar.prototype, "dayOfYear", {
|
||||
writable: true,
|
||||
enumerable: false,
|
||||
configurable: true,
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.daysinmonth
|
||||
description: RangeError thrown if time zone reports an offset that is not an integer number of nanoseconds
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[3600_000_000_000.5, NaN, -Infinity, Infinity].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.daysInMonth(datetime));
|
||||
});
|
@ -0,0 +1,16 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.daysinmonth
|
||||
description: RangeError thrown if time zone reports an offset that is out of range
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[-86400_000_000_001, 86400_000_000_001].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(RangeError, () => calendar.daysInMonth(datetime));
|
||||
});
|
@ -0,0 +1,25 @@
|
||||
// Copyright (C) 2021 Igalia, S.L. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
esid: sec-temporal.calendar.prototype.daysinmonth
|
||||
description: TypeError thrown if time zone reports an offset that is not a Number
|
||||
features: [Temporal]
|
||||
includes: [temporalHelpers.js]
|
||||
---*/
|
||||
|
||||
[
|
||||
undefined,
|
||||
null,
|
||||
true,
|
||||
"+01:00",
|
||||
Symbol(),
|
||||
3600_000_000_000n,
|
||||
{},
|
||||
{ valueOf() { return 3600_000_000_000; } },
|
||||
].forEach((wrongOffset) => {
|
||||
const timeZone = TemporalHelpers.specificOffsetTimeZone(wrongOffset);
|
||||
const calendar = new Temporal.Calendar("iso8601");
|
||||
const datetime = new Temporal.ZonedDateTime(1_000_000_000_987_654_321n, timeZone);
|
||||
assert.throws(TypeError, () => calendar.daysInMonth(datetime));
|
||||
});
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user