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

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:2d2b654f377f
1 // getOwnPropertyDescriptor works with simple data properties.
2
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 };
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});

mercurial