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