tor-browser

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

define-own-prop-length-no-value-order.js (2465B)


      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  Ordinary descriptor validation if [[Value]] is absent.
      8 info: |
      9  ArraySetLength ( A, Desc )
     10 
     11  1. If Desc.[[Value]] is absent, then
     12    a. Return OrdinaryDefineOwnProperty(A, "length", Desc).
     13 
     14  OrdinaryDefineOwnProperty ( O, P, Desc )
     15 
     16  [...]
     17  3. Return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc, current).
     18 
     19  ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
     20 
     21  [...]
     22  4. If current.[[Configurable]] is false, then
     23    a. If Desc.[[Configurable]] is present and its value is true, return false.
     24    b. If Desc.[[Enumerable]] is present and
     25      ! SameValue(Desc.[[Enumerable]], current.[[Enumerable]]) is false, return false.
     26  [...]
     27  6. Else if ! SameValue(! IsDataDescriptor(current), ! IsDataDescriptor(Desc)) is false, then
     28    a. If current.[[Configurable]] is false, return false.
     29  [...]
     30  7. Else if IsDataDescriptor(current) and IsDataDescriptor(Desc) are both true, then
     31    a. If current.[[Configurable]] is false and current.[[Writable]] is false, then
     32      i. If Desc.[[Writable]] is present and Desc.[[Writable]] is true, return false.
     33 features: [Reflect]
     34 ---*/
     35 
     36 assert.throws(TypeError, function() {
     37  Object.defineProperty([], "length", {configurable: true});
     38 }, 'Object.defineProperty([], "length", {configurable: true}) throws a TypeError exception');
     39 
     40 assert(
     41  !Reflect.defineProperty([], "length", {enumerable: true}),
     42  'The value of !Reflect.defineProperty([], "length", {enumerable: true}) is expected to be true'
     43 );
     44 
     45 assert.throws(TypeError, function() {
     46  Object.defineProperty([], "length", {
     47    get: function() {
     48      throw new Test262Error("[[Get]] shouldn't be called");
     49    },
     50  });
     51 }, 'Object.defineProperty([], "length", {get: function() {throw new Test262Error("[[Get]] shouldn"t be called");},}) throws a TypeError exception');
     52 
     53 assert(
     54  !Reflect.defineProperty([], "length", {set: function(_value) {}}),
     55  'The value of !Reflect.defineProperty([], "length", {set: function(_value) {}}) is expected to be true'
     56 );
     57 
     58 var array = [];
     59 Object.defineProperty(array, "length", {writable: false});
     60 assert.throws(TypeError, function() {
     61  Object.defineProperty(array, "length", {writable: true});
     62 }, 'Object.defineProperty(array, "length", {writable: true}) throws a TypeError exception');
     63 
     64 reportCompare(0, 0);