michael@0: // Debug.Object.prototype.defineProperties. michael@0: michael@0: var g = newGlobal(); michael@0: var dbg = new Debugger; michael@0: var gw = dbg.addDebuggee(g); michael@0: michael@0: var descProps = ['configurable', 'enumerable', 'writable', 'value', 'get', 'set']; michael@0: function test(objexpr, descs) { michael@0: g.eval("obj = (" + objexpr + ");"); michael@0: var gobjw = gw.getOwnPropertyDescriptor("obj").value; michael@0: gobjw.defineProperties(descs); michael@0: michael@0: var indirectEval = eval; michael@0: var obj = indirectEval("(" + objexpr + ");"); michael@0: Object.defineProperties(obj, descs); michael@0: michael@0: var ids = Object.keys(descs); michael@0: for (var i = 0; i < ids.length; i++) { michael@0: var actual = gobjw.getOwnPropertyDescriptor(ids[i]); michael@0: var expected = Object.getOwnPropertyDescriptor(obj, ids[i]); michael@0: assertEq(Object.getPrototypeOf(actual), Object.prototype); michael@0: assertEq(actual.configurable, expected.configurable); michael@0: assertEq(actual.enumerable, expected.enumerable); michael@0: for (var j = 0; j < descProps; j++) { michael@0: var prop = descProps[j]; michael@0: assertEq(prop in actual, prop in expected); michael@0: assertEq(actual[prop], expected[prop]); michael@0: } michael@0: } michael@0: } michael@0: michael@0: test("{}", {}); michael@0: test("/abc/", {}); michael@0: michael@0: g.eval("var aglobal = newGlobal('same-compartment');"); michael@0: var aglobal = newGlobal('same-compartment'); michael@0: test("aglobal", {}); michael@0: michael@0: var adescs = {a: {enumerable: true, writable: true, value: 0}}; michael@0: test("{}", adescs); michael@0: test("{a: 1}", adescs); michael@0: michael@0: var arrdescs = [{value: 'a'}, {value: 'b'}, , {value: 'd'}]; michael@0: test("{}", arrdescs); michael@0: test("[]", arrdescs); michael@0: test("[0, 1, 2, 3]", arrdescs);