Source code

Revision control

Copy as Markdown

Other Tools

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