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.

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

mercurial