diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields')
25 files changed, 927 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/branding.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/branding.js new file mode 100644 index 0000000000..6758e0cdd1 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/branding.js @@ -0,0 +1,27 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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 receiver is invalid +features: [Symbol, Temporal] +---*/ + +const dateFromFields = Temporal.Calendar.prototype.dateFromFields; + +assert.sameValue(typeof dateFromFields, "function"); + +const args = [{ year: 2000, month: 1, day: 1 }]; + +assert.throws(TypeError, () => dateFromFields.apply(undefined, args), "undefined"); +assert.throws(TypeError, () => dateFromFields.apply(null, args), "null"); +assert.throws(TypeError, () => dateFromFields.apply(true, args), "true"); +assert.throws(TypeError, () => dateFromFields.apply("", args), "empty string"); +assert.throws(TypeError, () => dateFromFields.apply(Symbol(), args), "symbol"); +assert.throws(TypeError, () => dateFromFields.apply(1, args), "1"); +assert.throws(TypeError, () => dateFromFields.apply({}, args), "plain object"); +assert.throws(TypeError, () => dateFromFields.apply(Temporal.Calendar, args), "Temporal.Calendar"); +assert.throws(TypeError, () => dateFromFields.apply(Temporal.Calendar.prototype, args), "Temporal.Calendar.prototype"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/browser.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/browser.js new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/browser.js diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/builtin.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/builtin.js new file mode 100644 index 0000000000..f039b1d2cd --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/builtin.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/fields-not-object.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/fields-not-object.js new file mode 100644 index 0000000000..38475bb330 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/fields-not-object.js @@ -0,0 +1,23 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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 +info: | + 4. If Type(_fields_) is not Object, throw a *TypeError* exception. +features: [BigInt, Symbol, Temporal, arrow-function] +---*/ + +const tests = [undefined, null, true, false, "string", Symbol("sym"), Infinity, NaN, Math.PI, 42n]; +const iso = Temporal.Calendar.from("iso8601"); +for (const fields of tests) { + assert.throws( + TypeError, + () => iso.dateFromFields(fields, {}) + `dateFromFields(${typeof fields}) throws a TypeError exception` + ); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror.js new file mode 100644 index 0000000000..3024c6466b --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/infinity-throws-rangeerror.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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"); + }); + }); +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/length.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/length.js new file mode 100644 index 0000000000..3c7ec630d9 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/length.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/missing-properties.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/missing-properties.js new file mode 100644 index 0000000000..6a9ffd5dfc --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/missing-properties.js @@ -0,0 +1,48 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.calendar.prototype.datefromfields +description: Errors due to missing properties on fields object are thrown in the correct order +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const instance = new Temporal.Calendar("iso8601"); + +const missingDay = { + get year() { + TemporalHelpers.assertUnreachable("day should be checked first"); + }, + get month() { + TemporalHelpers.assertUnreachable("day should be checked first"); + }, + get monthCode() { + TemporalHelpers.assertUnreachable("day should be checked first"); + }, +}; +assert.throws(TypeError, () => instance.dateFromFields(missingDay), "day should be checked before year and month"); + +let getMonth = false; +let getMonthCode = false; +const missingYearAndMonth = { + day: 1, + get month() { + getMonth = true; + }, + get monthCode() { + getMonthCode = true; + }, +}; +assert.throws(TypeError, () => instance.dateFromFields(missingYearAndMonth), "year should be checked after fetching but before resolving the month"); +assert(getMonth, "year is fetched after month"); +assert(getMonthCode, "year is fetched after monthCode"); + +const missingMonth = { + day: 1, + year: 2000, +}; +assert.throws(TypeError, () => instance.dateFromFields(missingMonth), "month should be resolved last"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/name.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/name.js new file mode 100644 index 0000000000..f88fb05139 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/name.js @@ -0,0 +1,26 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/not-a-constructor.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/not-a-constructor.js new file mode 100644 index 0000000000..bc9a9a78c2 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/not-a-constructor.js @@ -0,0 +1,24 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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)"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/one-of-era-erayear-undefined.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/one-of-era-erayear-undefined.js new file mode 100644 index 0000000000..67d4befdce --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/one-of-era-erayear-undefined.js @@ -0,0 +1,19 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2023 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: Does not throw a RangeError if only one of era/eraYear fields is present +features: [Temporal] +includes: [temporalHelpers.js] +---*/ + +const base = { year: 2000, month: 5, day: 2, era: 'ce' }; +const instance = new Temporal.Calendar('iso8601'); +TemporalHelpers.assertPlainDate(instance.dateFromFields({ ...base }), 2000, 5, 'M05', 2); + +const base2 = { year: 2000, month: 5, day: 2, eraYear: 1 }; +TemporalHelpers.assertPlainDate(instance.dateFromFields({ ...base }), 2000, 5, 'M05', 2); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-object.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-object.js new file mode 100644 index 0000000000..2905c8ea94 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-object.js @@ -0,0 +1,26 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.calendar.prototype.datefromfields +description: Empty or a function object may be used as options +includes: [temporalHelpers.js] +features: [Temporal] +---*/ + +const instance = new Temporal.Calendar("iso8601"); + +const result1 = instance.dateFromFields({ year: 1976, month: 11, day: 18 }, {}); +TemporalHelpers.assertPlainDate( + result1, 1976, 11, "M11", 18, + "options may be an empty plain object" +); + +const result2 = instance.dateFromFields({ year: 1976, month: 11, day: 18 }, () => {}); +TemporalHelpers.assertPlainDate( + result2, 1976, 11, "M11", 18, + "options may be a function object" +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js new file mode 100644 index 0000000000..9193330fdd --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/options-wrong-type.js @@ -0,0 +1,26 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.calendar.prototype.datefromfields +description: TypeError thrown when options argument is a primitive +features: [BigInt, Symbol, Temporal] +---*/ + +const badOptions = [ + null, + true, + "some string", + Symbol(), + 1, + 2n, +]; + +const instance = new Temporal.Calendar("iso8601"); +for (const value of badOptions) { + assert.throws(TypeError, () => instance.dateFromFields({ year: 1976, month: 11, day: 18 }, value), + `TypeError on wrong options type ${typeof value}`); +}; + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/order-of-operations.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/order-of-operations.js new file mode 100644 index 0000000000..aff7bbdde3 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/order-of-operations.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2022 Igalia, S.L. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-temporal.calendar.prototype.datefromfields +description: Properties on objects passed to dateFromFields() are accessed in the correct order +includes: [compareArray.js, temporalHelpers.js] +features: [Temporal] +---*/ + +const expected = [ + "get fields.day", + "get fields.day.valueOf", + "call fields.day.valueOf", + "get fields.month", + "get fields.month.valueOf", + "call fields.month.valueOf", + "get fields.monthCode", + "get fields.monthCode.toString", + "call fields.monthCode.toString", + "get fields.year", + "get fields.year.valueOf", + "call fields.year.valueOf", + "get options.overflow", + "get options.overflow.toString", + "call options.overflow.toString", +]; +const actual = []; + +const instance = new Temporal.Calendar("iso8601"); + +const fields = TemporalHelpers.propertyBagObserver(actual, { + year: 1.7, + month: 1.7, + monthCode: "M01", + day: 1.7, +}, "fields"); + +const options = TemporalHelpers.propertyBagObserver(actual, { + overflow: "reject", +}, "options"); + +const result = instance.dateFromFields(fields, options); +TemporalHelpers.assertPlainDate(result, 1, 1, "M01", 1, "date result"); +assert.sameValue(result.getISOFields().calendar, "iso8601", "calendar slot should store a string"); +assert.compareArray(actual, expected, "order of operations"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js new file mode 100644 index 0000000000..153e0361c2 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-invalid-string.js @@ -0,0 +1,31 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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, arrow-function] +---*/ + +const calendar = new Temporal.Calendar("iso8601"); +const badOverflows = ["", "CONSTRAIN", "balance", "other string", "constra\u0131n", "reject\0"]; +for (const overflow of badOverflows) { + assert.throws( + RangeError, + () => calendar.dateFromFields({ year: 2000, month: 5, day: 2 }, + { overflow }), + `invalid overflow ("${overflow}")` + ); +} + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-undefined.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-undefined.js new file mode 100644 index 0000000000..3e4b9bb1d9 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-undefined.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-wrong-type.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-wrong-type.js new file mode 100644 index 0000000000..b75d4beb59 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/overflow-wrong-type.js @@ -0,0 +1,27 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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), +); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/prop-desc.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/prop-desc.js new file mode 100644 index 0000000000..50871e8d91 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/prop-desc.js @@ -0,0 +1,24 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// 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, +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/shell.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/shell.js new file mode 100644 index 0000000000..eda1477282 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/shell.js @@ -0,0 +1,24 @@ +// GENERATED, DO NOT EDIT +// file: isConstructor.js +// Copyright (C) 2017 André Bargull. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +description: | + Test if a given function is a constructor function. +defines: [isConstructor] +features: [Reflect.construct] +---*/ + +function isConstructor(f) { + if (typeof f !== "function") { + throw new Test262Error("isConstructor invoked with a non-function value"); + } + + try { + Reflect.construct(function(){}, [], f); + } catch (e) { + return false; + } + return true; +} diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throw-type-error-from-GetOptionsObject.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throw-type-error-from-GetOptionsObject.js new file mode 100644 index 0000000000..53393dae1e --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throw-type-error-from-GetOptionsObject.js @@ -0,0 +1,29 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 should throw TypeError from GetOptionsObject. +info: | + 4. If Type(fields) is not Object, throw a TypeError exception. +features: [BigInt, Symbol, Temporal, arrow-function] +---*/ +let cal = new Temporal.Calendar('iso8601'); + +let fields = { + year: 2021, + month: 7, + day: 20 +}; + +let notObjectList = [null, 'string', Symbol('efg'), true, false, Infinity, NaN, 123, 456n]; + +notObjectList.forEach(function(options) { + assert.throws( + TypeError, + () => cal.dateFromFields(fields, options), + 'cal.dateFromFields(fields, options) throws a TypeError exception' + ); +}); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-range-error.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-range-error.js new file mode 100644 index 0000000000..3b11f18888 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-range-error.js @@ -0,0 +1,126 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 should throw RangeError for + input not in valid range. +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [Temporal, arrow-function] +---*/ +let cal = new Temporal.Calendar("iso8601") + +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "m1", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "m1", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "M1", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "M1", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "m01", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "m01", day: 17}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 12, monthCode: "M11", day: 17}), + 'cal.dateFromFields({year: 2021, month: 12, monthCode: "M11", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "M00", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "M00", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "M19", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "M19", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "M99", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "M99", day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, monthCode: "M13", day: 17}), + 'cal.dateFromFields({year: 2021, monthCode: "M13", day: 17}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: -1, day: 17}), + 'cal.dateFromFields({year: 2021, month: -1, day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: -Infinity, day: 17}), + 'cal.dateFromFields({year: 2021, month: -Infinity, day: 17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 7, day: -17}), + 'cal.dateFromFields({year: 2021, month: 7, day: -17}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 7, day: -Infinity}), + 'cal.dateFromFields({year: 2021, month: 7, day: -Infinity}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 12, day: 0}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 12, day: 0}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 12, day: 32}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 12, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 1, day: 32}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 1, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 2, day: 29}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 2, day: 29}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 6, day: 31}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 6, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 9, day: 31}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 9, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 0, day: 5}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 0, day: 5}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields({year: 2021, month: 13, day: 5}, {overflow: "reject"}), + 'cal.dateFromFields({year: 2021, month: 13, day: 5}, {overflow: "reject"}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M12", day: 0}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M12", day: 0}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M12", day: 32}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M12", day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M01", day: 32}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M01", day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M02", day: 29}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M02", day: 29}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M06", day: 31}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M06", day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M09", day: 31}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M09", day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M00", day: 5}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M00", day: 5}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, monthCode: "M13", day: 5}, {overflow: "reject"}), + 'cal.dateFromFields( {year: 2021, monthCode: "M13", day: 5}, {overflow: "reject"}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 12, day: 0}), 'cal.dateFromFields( {year: 2021, month: 12, day: 0}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 0, day: 3}), 'cal.dateFromFields( {year: 2021, month: 0, day: 3}) throws a RangeError exception'); + +// Check throw for the second arg +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 7, day: 13}, {overflow: "invalid"}), 'cal.dateFromFields( {year: 2021, month: 7, day: 13}, {overflow: "invalid"}) throws a RangeError exception'); + +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 1, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 1, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 2, day: 29}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 2, day: 29}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 3, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 3, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 4, day: 31}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 4, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 5, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 5, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 6, day: 31}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 6, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 7, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 7, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 8, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 8, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 9, day: 31}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 9, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 10, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 10, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 11, day: 31}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 11, day: 31}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 12, day: 32}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 12, day: 32}, {overflow: "reject"}) throws a RangeError exception'); +assert.throws(RangeError, () => cal.dateFromFields( + {year: 2021, month: 13, day: 5}, {overflow: "reject"}), 'cal.dateFromFields( {year: 2021, month: 13, day: 5}, {overflow: "reject"}) throws a RangeError exception'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-type-error.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-type-error.js new file mode 100644 index 0000000000..83b69f4d9f --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/throws-type-error.js @@ -0,0 +1,58 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 should throw TypeError with wrong type. +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [BigInt, Symbol, Temporal, arrow-function] +---*/ +// Check throw for first arg +let cal = new Temporal.Calendar('iso8601'); +assert.throws(TypeError, () => cal.dateFromFields(), 'cal.dateFromFields() throws a TypeError exception'); + +[undefined, true, false, 123, 456n, Symbol(), 'string'].forEach(function(fields) { + assert.throws( + TypeError, + () => cal.dateFromFields(fields), + 'cal.dateFromFields(fields) throws a TypeError exception' + ); + + assert.throws( + TypeError, + () => cal.dateFromFields(fields, undefined), + 'cal.dateFromFields(fields, undefined) throws a TypeError exception' + ); + + assert.throws(TypeError, () => cal.dateFromFields(fields, { + overflow: 'constrain' + }), 'cal.dateFromFields(fields, {overflow: "constrain"}) throws a TypeError exception'); + + assert.throws(TypeError, () => cal.dateFromFields(fields, { + overflow: 'reject' + }), 'cal.dateFromFields(fields, {overflow: "reject"}) throws a TypeError exception'); +}); + +assert.throws(TypeError, () => cal.dateFromFields({ + month: 1, + day: 17 +}), 'cal.dateFromFields({month: 1, day: 17}) throws a TypeError exception'); + +assert.throws(TypeError, () => cal.dateFromFields({ + year: 2021, + day: 17 +}), 'cal.dateFromFields({year: 2021, day: 17}) throws a TypeError exception'); + +assert.throws(TypeError, () => cal.dateFromFields({ + year: 2021, + month: 12 +}), 'cal.dateFromFields({year: 2021, month: 12}) throws a TypeError exception'); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day-need-constrain.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day-need-constrain.js new file mode 100644 index 0000000000..d2e766146e --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day-need-constrain.js @@ -0,0 +1,90 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 with year/month/day and need constrain +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [Temporal] +includes: [temporalHelpers.js] +---*/ +let cal = new Temporal.Calendar("iso8601") + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 1, day: 133}), + 2021, 1, "M01", 31, + "year/month/day with day need to be constrained in Jan"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 2, day: 133}), + 2021, 2, "M02", 28, + "year/month/day with day need to be constrained in Feb"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 3, day: 133}), + 2021, 3, "M03", 31, + "year/month/day with day need to be constrained in March"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 4, day: 133}), + 2021, 4, "M04", 30, + "year/month/day with day need to be constrained in April"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 5, day: 133}), + 2021, 5, "M05", 31, + "year/month/day with day need to be constrained in May"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 6, day: 133}), + 2021, 6, "M06", 30, + "year/month/day with day need to be constrained in Jun"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 7, day: 133}), + 2021, 7, "M07", 31, + "year/month/day with day need to be constrained in July"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 8, day: 133}), + 2021, 8, "M08", 31, + "year/month/day with day need to be constrained in Aug"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 9, day: 133}), + 2021, 9, "M09", 30, + "year/month/day with day need to be constrained in Sept."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 10, day: 133}), + 2021, 10, "M10", 31, + "year/month/day with day need to be constrained in Oct."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 11, day: 133}), + 2021, 11, "M11", 30, + "year/month/day with day need to be constrained in Nov."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 12, day: 133}), + 2021, 12, "M12", 31, + "year/month/day with day need to be constrained in Dec."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 13, day: 500}), + 2021, 12, "M12", 31, + "year/month/day with month and day need to be constrained"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 999999, day: 500}), + 2021, 12, "M12", 31, + "year/month/day with month and day need to be constrained"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day.js new file mode 100644 index 0000000000..e24b574004 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-month-day.js @@ -0,0 +1,25 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 with year/month/day +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [Temporal] +includes: [temporalHelpers.js] +---*/ +let cal = new Temporal.Calendar("iso8601") + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, month: 7, day: 15}), + 2021, 7, "M07", 15, + "year/month/day"); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day-need-constrain.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day-need-constrain.js new file mode 100644 index 0000000000..175c34a601 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day-need-constrain.js @@ -0,0 +1,80 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 with year, monthCode and day and need constrain +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [Temporal] +includes: [temporalHelpers.js] +---*/ +let cal = new Temporal.Calendar("iso8601") + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M01", day: 133}), + 2021, 1, "M01", 31, + "year/monthCode/day with day need to be constrained in Jan"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M02", day: 133}), + 2021, 2, "M02", 28, + "year/monthCode/day with day need to be constrained in Feb"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M03", day: 133}), + 2021, 3, "M03", 31, + "year/monthCode/day with day need to be constrained in March"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M04", day: 133}), + 2021, 4, "M04", 30, + "year/monthCode/day with day need to be constrained in April"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M05", day: 133}), + 2021, 5, "M05", 31, + "year/monthCode/day with day need to be constrained in May"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M06", day: 133}), + 2021, 6, "M06", 30, + "year/monthCode/day with day need to be constrained in Jun"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M07", day: 133}), + 2021, 7, "M07", 31, + "year/monthCode/day with day need to be constrained in July"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M08", day: 133}), + 2021, 8, "M08", 31, + "year/monthCode/day with day need to be constrained in Aug"); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M09", day: 133}), + 2021, 9, "M09", 30, + "year/monthCode/day with day need to be constrained in Sept."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M10", day: 133}), + 2021, 10, "M10", 31, + "year/monthCode/day with day need to be constrained in Oct."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M11", day: 133}), + 2021, 11, "M11", 30, + "year/monthCode/day with day need to be constrained in Nov."); + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M12", day: 133}), + 2021, 12, "M12", 31, + "year/monthCode/day with day need to be constrained in Dec."); + +reportCompare(0, 0); diff --git a/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day.js b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day.js new file mode 100644 index 0000000000..ff07ed1935 --- /dev/null +++ b/js/src/tests/test262/built-ins/Temporal/Calendar/prototype/dateFromFields/with-year-monthCode-day.js @@ -0,0 +1,25 @@ +// |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally +// Copyright (C) 2021 the V8 project authors. 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 with year, monthCode and day. +info: | + 1. Let calendar be the this value. + 2. Perform ? RequireInternalSlot(calendar, [[InitializedTemporalCalendar]]). + 3. Assert: calendar.[[Identifier]] is "iso8601". + 4. If Type(fields) is not Object, throw a TypeError exception. + 5. Set options to ? GetOptionsObject(options). + 6. Let result be ? ISODateFromFields(fields, options). + 7. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], calendar). +features: [Temporal] +includes: [temporalHelpers.js] +---*/ +let cal = new Temporal.Calendar("iso8601") + +TemporalHelpers.assertPlainDate( + cal.dateFromFields({year: 2021, monthCode: "M07", day: 15}), + 2021, 7, "M07", 15, + "year/monthCode/day"); + +reportCompare(0, 0); |