// Debugger.prototype.onNewGlobalObject surfaces. load(libdir + 'asserts.js'); var dbg = new Debugger; function f() { } function g() { } assertEq(Object.getOwnPropertyDescriptor(dbg, 'onNewGlobalObject'), undefined); var d = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(dbg), 'onNewGlobalObject'); assertEq(d.enumerable, false); assertEq(d.configurable, true); assertEq(typeof d.get, "function"); assertEq(typeof d.set, "function"); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = ''; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = false; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = 0; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = Math.PI; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = null; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = {}; }, TypeError); assertEq(dbg.onNewGlobalObject, undefined); // But any function, even a useless one, is okay. How fair is that? dbg.onNewGlobalObject = f; assertEq(dbg.onNewGlobalObject, f); dbg.onNewGlobalObject = undefined; assertEq(dbg.onNewGlobalObject, undefined); var dbg2 = new Debugger; assertEq(dbg.onNewGlobalObject, undefined); assertEq(dbg2.onNewGlobalObject, undefined); dbg.onNewGlobalObject = f; assertEq(dbg.onNewGlobalObject, f); assertEq(dbg2.onNewGlobalObject, undefined); dbg2.onNewGlobalObject = g; assertEq(dbg.onNewGlobalObject, f); assertEq(dbg2.onNewGlobalObject, g); dbg.onNewGlobalObject = undefined; assertEq(dbg.onNewGlobalObject, undefined); assertEq(dbg2.onNewGlobalObject, g); // You shouldn't be able to apply the accessor to the prototype. assertThrowsInstanceOf(function () { Debugger.prototype.onNewGlobalObject = function () { }; }, TypeError);