Debugger-onNewGlobalObject-01.js (2128B)
1 // Debugger.prototype.onNewGlobalObject surfaces. 2 3 load(libdir + 'asserts.js'); 4 5 var dbg = new Debugger; 6 7 function f() { } 8 function g() { } 9 10 assertEq(Object.getOwnPropertyDescriptor(dbg, 'onNewGlobalObject'), undefined); 11 12 var d = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(dbg), 'onNewGlobalObject'); 13 assertEq(d.enumerable, false); 14 assertEq(d.configurable, true); 15 assertEq(typeof d.get, "function"); 16 assertEq(typeof d.set, "function"); 17 18 assertEq(dbg.onNewGlobalObject, undefined); 19 20 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = ''; }, TypeError); 21 assertEq(dbg.onNewGlobalObject, undefined); 22 23 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = false; }, TypeError); 24 assertEq(dbg.onNewGlobalObject, undefined); 25 26 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = 0; }, TypeError); 27 assertEq(dbg.onNewGlobalObject, undefined); 28 29 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = Math.PI; }, TypeError); 30 assertEq(dbg.onNewGlobalObject, undefined); 31 32 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = null; }, TypeError); 33 assertEq(dbg.onNewGlobalObject, undefined); 34 35 assertThrowsInstanceOf(function () { dbg.onNewGlobalObject = {}; }, TypeError); 36 assertEq(dbg.onNewGlobalObject, undefined); 37 38 // But any function, even a useless one, is okay. How fair is that? 39 dbg.onNewGlobalObject = f; 40 assertEq(dbg.onNewGlobalObject, f); 41 42 dbg.onNewGlobalObject = undefined; 43 assertEq(dbg.onNewGlobalObject, undefined); 44 45 var dbg2 = new Debugger; 46 assertEq(dbg.onNewGlobalObject, undefined); 47 assertEq(dbg2.onNewGlobalObject, undefined); 48 49 dbg.onNewGlobalObject = f; 50 assertEq(dbg.onNewGlobalObject, f); 51 assertEq(dbg2.onNewGlobalObject, undefined); 52 53 dbg2.onNewGlobalObject = g; 54 assertEq(dbg.onNewGlobalObject, f); 55 assertEq(dbg2.onNewGlobalObject, g); 56 57 dbg.onNewGlobalObject = undefined; 58 assertEq(dbg.onNewGlobalObject, undefined); 59 assertEq(dbg2.onNewGlobalObject, g); 60 61 // You shouldn't be able to apply the accessor to the prototype. 62 assertThrowsInstanceOf(function () { 63 Debugger.prototype.onNewGlobalObject = function () { }; 64 }, TypeError);