tor-browser

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

define-own-property.js (3858B)


      1 // |reftest| module
      2 // Copyright (C) 2016 the V8 project authors. All rights reserved.
      3 // This code is governed by the BSD license found in the LICENSE file.
      4 /*---
      5 esid: sec-module-namespace-exotic-objects-defineownproperty-p-desc
      6 description: >
      7    The [[DefineOwnProperty]] internal method returns `true` if no change is
      8    requested, and `false` otherwise.
      9 flags: [module]
     10 features: [Symbol.iterator, Reflect, Symbol, Symbol.toStringTag]
     11 ---*/
     12 
     13 import * as ns from './define-own-property.js';
     14 export var local1;
     15 var local2;
     16 export { local2 as renamed };
     17 export { local1 as indirect } from './define-own-property.js';
     18 var sym = Symbol('test262');
     19 
     20 const exported = ['local1', 'renamed', 'indirect'];
     21 
     22 
     23 // Non-existant properties.
     24 
     25 for (const key of ['local2', 0, sym, Symbol.iterator]) {
     26  assert.sameValue(
     27    Reflect.defineProperty(ns, key, {}),
     28    false,
     29    'Reflect.defineProperty: ' + key.toString()
     30  );
     31  assert.throws(TypeError, function() {
     32    Object.defineProperty(ns, key, {});
     33  }, 'Object.defineProperty: ' + key.toString());
     34 }
     35 
     36 
     37 // Own properties. No change requested.
     38 
     39 for (const key of ([...exported, Symbol.toStringTag])) {
     40  assert.sameValue(
     41    Reflect.defineProperty(ns, key, {}),
     42    true,
     43    'Reflect.defineProperty: ' + key.toString()
     44  );
     45  assert.sameValue(
     46    Object.defineProperty(ns, key, {}),
     47    ns,
     48    'Object.defineProperty: ' + key.toString()
     49  );
     50 
     51 }
     52 
     53 assert.sameValue(
     54  Reflect.defineProperty(ns, 'indirect',
     55      {writable: true, enumerable: true, configurable: false}),
     56  true,
     57  'Reflect.defineProperty: indirect'
     58 );
     59 assert.sameValue(
     60  Object.defineProperty(ns, 'indirect',
     61      {writable: true, enumerable: true, configurable: false}),
     62  ns,
     63  'Object.defineProperty: indirect'
     64 );
     65 
     66 assert.sameValue(
     67  Reflect.defineProperty(ns, Symbol.toStringTag,
     68      {value: "Module", writable: false, enumerable: false,
     69       configurable: false}),
     70  true,
     71  'Reflect.defineProperty: Symbol.toStringTag'
     72 );
     73 assert.sameValue(
     74  Object.defineProperty(ns, Symbol.toStringTag,
     75      {value: "Module", writable: false, enumerable: false,
     76       configurable: false}),
     77  ns,
     78  'Object.defineProperty: Symbol.toStringTag'
     79 );
     80 
     81 
     82 // Own properties. Change requested.
     83 
     84 for (const key of ([...exported, Symbol.toStringTag])) {
     85  assert.sameValue(
     86    Reflect.defineProperty(ns, key, {value: 123}),
     87    false,
     88    'Reflect.defineProperty: ' + key.toString()
     89  );
     90  assert.throws(TypeError, function() {
     91    Object.defineProperty(ns, key, {value: 123});
     92  }, 'Object.defineProperty: ' + key.toString());
     93 }
     94 
     95 assert.sameValue(
     96  Reflect.defineProperty(ns, 'indirect',
     97      {writable: true, enumerable: true, configurable: true}),
     98  false,
     99  'Reflect.defineProperty: indirect'
    100 );
    101 assert.throws(TypeError, function() {
    102  Object.defineProperty(ns, 'indirect',
    103      {writable: true, enumerable: true, configurable: true});
    104 }, 'Object.defineProperty: indirect');
    105 
    106 assert.sameValue(
    107  Reflect.defineProperty(ns, Symbol.toStringTag,
    108      {value: "module", writable: false, enumerable: false,
    109       configurable: false}),
    110  false,
    111  'Reflect.defineProperty: Symbol.toStringTag'
    112 );
    113 assert.throws(TypeError, function() {
    114  Object.defineProperty(ns, Symbol.toStringTag,
    115      {value: "module", writable: false, enumerable: false,
    116       configurable: false});
    117 }, 'Object.defineProperty: Symbol.toStringTag');
    118 
    119 
    120 // Indirect change requested through Object.freeze
    121 
    122 // Try freezing more times than there are exported properties
    123 for (let i = 1; i < exported.length + 2; i++) {
    124  assert.throws(
    125    TypeError,
    126    function () {
    127      Object.freeze(ns);
    128    },
    129    "Object.freeze: " + String(i)
    130  );
    131 }
    132 
    133 for (const key of exported) {
    134  const desc = Object.getOwnPropertyDescriptor(ns, key);
    135  assert.sameValue(desc.writable, true, String(key) + " writable");
    136 }
    137 
    138 assert(!Object.isFrozen(ns), "namespace object not frozen");
    139 
    140 reportCompare(0, 0);