infinity-throws-rangeerror.js (3253B)
1 // |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally 2 // Copyright (C) 2020 Igalia, S.L. All rights reserved. 3 // This code is governed by the BSD license found in the LICENSE file. 4 5 /*--- 6 description: Temporal.PlainTime throws a RangeError if any value is Infinity 7 esid: sec-temporal.plaintime 8 includes: [compareArray.js, temporalHelpers.js] 9 features: [Temporal] 10 ---*/ 11 12 assert.throws(RangeError, () => new Temporal.PlainTime(Infinity)); 13 assert.throws(RangeError, () => new Temporal.PlainTime(0, Infinity)); 14 assert.throws(RangeError, () => new Temporal.PlainTime(0, 0, Infinity)); 15 assert.throws(RangeError, () => new Temporal.PlainTime(0, 0, 0, Infinity)); 16 assert.throws(RangeError, () => new Temporal.PlainTime(0, 0, 0, 0, Infinity)); 17 assert.throws(RangeError, () => new Temporal.PlainTime(0, 0, 0, 0, 0, Infinity)); 18 19 const O = (primitiveValue, propertyName) => (calls) => TemporalHelpers.toPrimitiveObserver(calls, primitiveValue, propertyName); 20 const tests = [ 21 [ 22 "infinite hour", 23 [O(Infinity, "hour"), O(1, "minute"), O(1, "second"), O(1, "millisecond"), O(1, "microsecond"), O(1, "nanosecond")], 24 ["get hour.valueOf", "call hour.valueOf"] 25 ], 26 [ 27 "infinite minute", 28 [O(1, "hour"), O(Infinity, "minute"), O(1, "second"), O(1, "millisecond"), O(1, "microsecond"), O(1, "nanosecond")], 29 ["get hour.valueOf", "call hour.valueOf", "get minute.valueOf", "call minute.valueOf"] 30 ], 31 [ 32 "infinite second", 33 [O(1, "hour"), O(1, "minute"), O(Infinity, "second"), O(1, "millisecond"), O(1, "microsecond"), O(1, "nanosecond")], 34 ["get hour.valueOf", "call hour.valueOf", "get minute.valueOf", "call minute.valueOf", "get second.valueOf", "call second.valueOf"] 35 ], 36 [ 37 "infinite millisecond", 38 [O(1, "hour"), O(1, "minute"), O(1, "second"), O(Infinity, "millisecond"), O(1, "microsecond"), O(1, "nanosecond")], 39 ["get hour.valueOf", "call hour.valueOf", "get minute.valueOf", "call minute.valueOf", "get second.valueOf", "call second.valueOf", "get millisecond.valueOf", "call millisecond.valueOf"] 40 ], 41 [ 42 "infinite microsecond", 43 [O(1, "hour"), O(1, "minute"), O(1, "second"), O(1, "millisecond"), O(Infinity, "microsecond"), O(1, "nanosecond")], 44 ["get hour.valueOf", "call hour.valueOf", "get minute.valueOf", "call minute.valueOf", "get second.valueOf", "call second.valueOf", "get millisecond.valueOf", "call millisecond.valueOf", "get microsecond.valueOf", "call microsecond.valueOf"] 45 ], 46 [ 47 "infinite nanosecond", 48 [O(1, "hour"), O(1, "minute"), O(1, "second"), O(1, "millisecond"), O(1, "microsecond"), O(Infinity, "nanosecond")], 49 ["get hour.valueOf", "call hour.valueOf", "get minute.valueOf", "call minute.valueOf", "get second.valueOf", "call second.valueOf", "get millisecond.valueOf", "call millisecond.valueOf", "get microsecond.valueOf", "call microsecond.valueOf", "get nanosecond.valueOf", "call nanosecond.valueOf"] 50 ], 51 ]; 52 53 for (const [description, args, expected] of tests) { 54 const actual = []; 55 const args_ = args.map((o) => o(actual)); 56 assert.throws(RangeError, () => new Temporal.PlainTime(...args_), description); 57 assert.compareArray(actual, expected, `${description} order of operations`); 58 } 59 60 reportCompare(0, 0);