define-own-prop-length-overflow-order.js (1241B)
1 // Copyright (C) 2020 Alexey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-arraysetlength 6 description: > 7 [[Value]] is checked for overflow before descriptor validation. 8 info: | 9 ArraySetLength ( A, Desc ) 10 11 [...] 12 3. Let newLen be ? ToUint32(Desc.[[Value]]). 13 4. Let numberLen be ? ToNumber(Desc.[[Value]]). 14 5. If newLen ≠ numberLen, throw a RangeError exception. 15 ---*/ 16 17 assert.throws(RangeError, function() { 18 Object.defineProperty([], "length", {value: -1, configurable: true}); 19 }, 'Object.defineProperty([], "length", {value: -1, configurable: true}) throws a RangeError exception'); 20 21 assert.throws(RangeError, function() { 22 Object.defineProperty([], "length", {value: NaN, enumerable: true}); 23 }, 'Object.defineProperty([], "length", {value: NaN, enumerable: true}) throws a RangeError exception'); 24 25 var array = []; 26 Object.defineProperty(array, "length", {writable: false}); 27 assert.throws(RangeError, function() { 28 Object.defineProperty(array, "length", {value: Number.MAX_SAFE_INTEGER, writable: true}); 29 }, 'Object.defineProperty(array, "length", {value: Number.MAX_SAFE_INTEGER, writable: true}) throws a RangeError exception'); 30 31 reportCompare(0, 0);