Object-defineProperties-01.js (1521B)
1 // Debug.Object.prototype.defineProperties. 2 3 var g = newGlobal({newCompartment: true}); 4 var dbg = new Debugger; 5 var gw = dbg.addDebuggee(g); 6 7 var descProps = ['configurable', 'enumerable', 'writable', 'value', 'get', 'set']; 8 function test(objexpr, descs) { 9 g.eval("obj = (" + objexpr + ");"); 10 var gobjw = gw.getOwnPropertyDescriptor("obj").value; 11 gobjw.defineProperties(descs); 12 13 var indirectEval = eval; 14 var obj = indirectEval("(" + objexpr + ");"); 15 Object.defineProperties(obj, descs); 16 17 var ids = Object.keys(descs); 18 for (var i = 0; i < ids.length; i++) { 19 var actual = gobjw.getOwnPropertyDescriptor(ids[i]); 20 var expected = Object.getOwnPropertyDescriptor(obj, ids[i]); 21 assertEq(Object.getPrototypeOf(actual), Object.prototype); 22 assertEq(actual.configurable, expected.configurable); 23 assertEq(actual.enumerable, expected.enumerable); 24 for (var j = 0; j < descProps; j++) { 25 var prop = descProps[j]; 26 assertEq(prop in actual, prop in expected); 27 assertEq(actual[prop], expected[prop]); 28 } 29 } 30 } 31 32 test("{}", {}); 33 test("/abc/", {}); 34 35 g.eval("var aglobal = newGlobal('same-compartment');"); 36 var aglobal = newGlobal('same-compartment'); 37 test("aglobal", {}); 38 39 var adescs = {a: {enumerable: true, writable: true, value: 0}}; 40 test("{}", adescs); 41 test("{a: 1}", adescs); 42 43 var arrdescs = [{value: 'a'}, {value: 'b'}, , {value: 'd'}]; 44 test("{}", arrdescs); 45 test("[]", arrdescs); 46 test("[0, 1, 2, 3]", arrdescs);