tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);