Test conversion of object to string in Temporal.Instant context

An object may be given in any context where a Temporal.Instant is expected
(see ToTemporalInstant). There is no conversion from a property bag to an
Instant, unlike with other Temporal types. Instead the object is converted
to a string, and if its toString() method yields a valid ISO string, the
conversion succeeds. (An object with the default Object.prototype.toString
will not.)
This commit is contained in:
Philip Chimento 2022-04-15 11:27:44 -07:00 committed by Philip Chimento
parent d28ca991cb
commit 15ed94c891
6 changed files with 118 additions and 0 deletions

View File

@ -0,0 +1,22 @@
// Copyright (C) 2022 Igalia, S.L. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
esid: sec-temporal.instant.compare
description: Object is converted to a string, then to Temporal.Instant
features: [Temporal]
---*/
const epoch = new Temporal.Instant(0n);
const arg = {};
assert.throws(RangeError, () => Temporal.Instant.compare(arg, epoch), "[object Object] is not a valid ISO string (first argument)");
assert.throws(RangeError, () => Temporal.Instant.compare(epoch, arg), "[object Object] is not a valid ISO string (second argument)");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result1 = Temporal.Instant.compare(arg, epoch);
assert.sameValue(result1, 0, "result of toString is interpreted as ISO string (first argument)");
const result2 = Temporal.Instant.compare(epoch, arg);
assert.sameValue(result2, 0, "result of toString is interpreted as ISO string (second argument)");

View File

@ -0,0 +1,17 @@
// 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.instant.from
description: Object is converted to a string, then to Temporal.Instant
features: [Temporal]
---*/
const arg = {};
assert.throws(RangeError, () => Temporal.Instant.from(arg), "[object Object] is not a valid ISO string");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result = Temporal.Instant.from(arg);
assert.sameValue(result.epochNanoseconds, 0n, "result of toString is interpreted as ISO string");

View File

@ -0,0 +1,19 @@
// 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.instant.prototype.equals
description: Object is converted to a string, then to Temporal.Instant
features: [Temporal]
---*/
const instance = new Temporal.Instant(0n);
const arg = {};
assert.throws(RangeError, () => instance.equals(arg), "[object Object] is not a valid ISO string");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result = instance.equals(arg);
assert.sameValue(result, true, "result of toString is interpreted as ISO string");

View File

@ -0,0 +1,20 @@
// 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.instant.prototype.since
description: Object is converted to a string, then to Temporal.Instant
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const instance = new Temporal.Instant(0n);
const arg = {};
assert.throws(RangeError, () => instance.since(arg), "[object Object] is not a valid ISO string");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result = instance.since(arg);
TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string");

View File

@ -0,0 +1,20 @@
// 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.instant.prototype.until
description: Object is converted to a string, then to Temporal.Instant
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const instance = new Temporal.Instant(0n);
const arg = {};
assert.throws(RangeError, () => instance.until(arg), "[object Object] is not a valid ISO string");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result = instance.until(arg);
TemporalHelpers.assertDuration(result, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string");

View File

@ -0,0 +1,20 @@
// 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.timezone.prototype.getplaindatetimefor
description: Object is converted to a string, then to Temporal.Instant
includes: [temporalHelpers.js]
features: [Temporal]
---*/
const instance = new Temporal.TimeZone("UTC");
const arg = {};
assert.throws(RangeError, () => instance.getPlainDateTimeFor(arg), "[object Object] is not a valid ISO string");
arg.toString = function() {
return "1970-01-01T00:00Z";
};
const result = instance.getPlainDateTimeFor(arg);
TemporalHelpers.assertPlainDateTime(result, 1970, 1, "M01", 1, 0, 0, 0, 0, 0, 0, "result of toString is interpreted as ISO string");