tor-browser

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

Object-getOwnPropertyDescriptor-01.js (2202B)


      1 // getOwnPropertyDescriptor works with simple data properties.
      2 
      3 var g = newGlobal({newCompartment: true});
      4 var dbg = Debugger(g);
      5 var hits;
      6 var expected;
      7 dbg.onDebuggerStatement = function (frame) {
      8    var args = frame.arguments;
      9    var obj = args[0], id = args[1];
     10    var desc = obj.getOwnPropertyDescriptor(id);
     11    if (expected === undefined) {
     12        assertEq(desc, undefined);
     13    } else {
     14        assertEq(desc instanceof Object, true);
     15        assertEq(desc.enumerable, expected.enumerable);
     16        assertEq(desc.configurable, expected.configurable);
     17        assertEq(desc.hasOwnProperty("value"), true);
     18        assertEq(desc.value, expected.value);
     19        assertEq(desc.writable, expected.writable === undefined ? true : expected.writable);
     20        assertEq("get" in desc, false);
     21        assertEq("set" in desc, false);
     22    }
     23    hits++;
     24 };
     25 
     26 g.eval("function f(obj, id) { debugger; }");
     27 
     28 function test(obj, id, desc) {
     29    expected = desc;
     30    hits = 0;
     31    g.f(obj, id);
     32    assertEq(hits, 1);
     33 }
     34 
     35 var obj = g.eval("({a: 1, ' ': undefined, '0': 0})");
     36 test(obj, "a", {value: 1, enumerable: true, configurable: true});
     37 test(obj, " ", {value: undefined, enumerable: true, configurable: true});
     38 test(obj, "b", undefined);
     39 test(obj, "0", {value: 0, enumerable: true, configurable: true});
     40 test(obj, 0, {value: 0, enumerable: true, configurable: true});
     41 
     42 var arr = g.eval("[7,,]");
     43 test(arr, 'length', {value: 2, enumerable: false, configurable: false});
     44 test(arr, 0, {value: 7, enumerable: true, configurable: true});
     45 test(arr, "0", {value: 7, enumerable: true, configurable: true});
     46 test(arr, 1, undefined);
     47 test(arr, "1", undefined);
     48 test(arr, 2, undefined);
     49 test(arr, "2", undefined);
     50 test(arr, "argelfraster", undefined);
     51 
     52 var re = g.eval("/erwe/");
     53 test(re, 'lastIndex', {value: 0, enumerable: false, configurable: false});
     54 
     55 // String objects have a well-behaved resolve hook.
     56 var str = g.eval("new String('hello world')");
     57 test(str, 'length', {value: 11, enumerable: false, configurable: false, writable: false});
     58 test(str, 0, {value: 'h', enumerable: true, configurable: false, writable: false});
     59 test(str, "0", {value: 'h', enumerable: true, configurable: false, writable: false});