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

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-01.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,59 @@
     1.4 +// getOwnPropertyDescriptor works with simple data properties.
     1.5 +
     1.6 +var g = newGlobal();
     1.7 +var dbg = Debugger(g);
     1.8 +var hits;
     1.9 +var expected;
    1.10 +dbg.onDebuggerStatement = function (frame) {
    1.11 +    var args = frame.arguments;
    1.12 +    var obj = args[0], id = args[1];
    1.13 +    var desc = obj.getOwnPropertyDescriptor(id);
    1.14 +    if (expected === undefined) {
    1.15 +        assertEq(desc, undefined);
    1.16 +    } else {
    1.17 +        assertEq(desc instanceof Object, true);
    1.18 +        assertEq(desc.enumerable, expected.enumerable);
    1.19 +        assertEq(desc.configurable, expected.configurable);
    1.20 +        assertEq(desc.hasOwnProperty("value"), true);
    1.21 +        assertEq(desc.value, expected.value);
    1.22 +        assertEq(desc.writable, expected.writable === undefined ? true : expected.writable);
    1.23 +        assertEq("get" in desc, false);
    1.24 +        assertEq("set" in desc, false);
    1.25 +    }
    1.26 +    hits++;
    1.27 +};
    1.28 +
    1.29 +g.eval("function f(obj, id) { debugger; }");
    1.30 +
    1.31 +function test(obj, id, desc) {
    1.32 +    expected = desc;
    1.33 +    hits = 0;
    1.34 +    g.f(obj, id);
    1.35 +    assertEq(hits, 1);
    1.36 +}
    1.37 +
    1.38 +var obj = g.eval("({a: 1, ' ': undefined, '0': 0})");
    1.39 +test(obj, "a", {value: 1, enumerable: true, configurable: true});
    1.40 +test(obj, " ", {value: undefined, enumerable: true, configurable: true});
    1.41 +test(obj, "b", undefined);
    1.42 +test(obj, "0", {value: 0, enumerable: true, configurable: true});
    1.43 +test(obj, 0, {value: 0, enumerable: true, configurable: true});
    1.44 +
    1.45 +var arr = g.eval("[7,,]");
    1.46 +test(arr, 'length', {value: 2, enumerable: false, configurable: false});
    1.47 +test(arr, 0, {value: 7, enumerable: true, configurable: true});
    1.48 +test(arr, "0", {value: 7, enumerable: true, configurable: true});
    1.49 +test(arr, 1, undefined);
    1.50 +test(arr, "1", undefined);
    1.51 +test(arr, 2, undefined);
    1.52 +test(arr, "2", undefined);
    1.53 +test(arr, "argelfraster", undefined);
    1.54 +
    1.55 +var re = g.eval("/erwe/");
    1.56 +test(re, 'lastIndex', {value: 0, enumerable: false, configurable: false});
    1.57 +
    1.58 +// String objects have a well-behaved resolve hook.
    1.59 +var str = g.eval("new String('hello world')");
    1.60 +test(str, 'length', {value: 11, enumerable: false, configurable: false, writable: false});
    1.61 +test(str, 0, {value: 'h', enumerable: true, configurable: false, writable: false});
    1.62 +test(str, "0", {value: 'h', enumerable: true, configurable: false, writable: false});

mercurial