value-array-abrupt.js (1454B)
1 // Copyright (C) 2019 Aleksey Shvayka. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 esid: sec-serializejsonarray 5 description: > 6 Abrupt completion from Get. 7 info: | 8 JSON.stringify ( value [ , replacer [ , space ] ] ) 9 10 [...] 11 12. Return ? SerializeJSONProperty(the empty String, wrapper). 12 13 SerializeJSONProperty ( key, holder ) 14 15 [...] 16 10. If Type(value) is Object and IsCallable(value) is false, then 17 a. Let isArray be ? IsArray(value). 18 b. If isArray is true, return ? SerializeJSONArray(value). 19 20 SerializeJSONArray ( value ) 21 22 [...] 23 6. Let len be ? LengthOfArrayLike(value). 24 features: [Proxy] 25 ---*/ 26 27 var abruptLength = new Proxy([], { 28 get: function(_target, key) { 29 if (key === 'length') { 30 throw new Test262Error(); 31 } 32 }, 33 }); 34 35 assert.throws(Test262Error, function() { 36 JSON.stringify(abruptLength); 37 }); 38 39 var abruptToPrimitive = { 40 valueOf: function() { 41 throw new Test262Error(); 42 }, 43 }; 44 45 var abruptToLength = new Proxy([], { 46 get: function(_target, key) { 47 if (key === 'length') { 48 return abruptToPrimitive; 49 } 50 }, 51 }); 52 53 assert.throws(Test262Error, function() { 54 JSON.stringify([abruptToLength]); 55 }); 56 57 var abruptIndex = new Array(1); 58 Object.defineProperty(abruptIndex, '0', { 59 get: function() { 60 throw new Test262Error(); 61 }, 62 }); 63 64 assert.throws(Test262Error, function() { 65 JSON.stringify({key: abruptIndex}); 66 }); 67 68 reportCompare(0, 0);