js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-01.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // getOwnPropertyDescriptor works with simple data properties.
     3 var g = newGlobal();
     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 };
    26 g.eval("function f(obj, id) { debugger; }");
    28 function test(obj, id, desc) {
    29     expected = desc;
    30     hits = 0;
    31     g.f(obj, id);
    32     assertEq(hits, 1);
    33 }
    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});
    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);
    52 var re = g.eval("/erwe/");
    53 test(re, 'lastIndex', {value: 0, enumerable: false, configurable: false});
    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});

mercurial