// onPop surfaces. load(libdir + "asserts.js"); var g = newGlobal(); var dbg = new Debugger(g); // Assigning a bogus value to Debugger.Frame.prototype.onPop raises a TypeError. function test(badValue) { print("store " + uneval(badValue) + " in Debugger.Frame.prototype.onPop"); var log; dbg.onDebuggerStatement = function handleDebugger(frame) { log += "d"; assertThrowsInstanceOf(function () { frame.onPop = badValue; }, TypeError); }; log = ""; g.eval("debugger"); assertEq(log, "d"); } test(null); test(false); test(1); test("stringy"); test(Symbol("symbolic")); test({}); test([]); // Getting and setting the prototype's onPop is an error. assertThrowsInstanceOf(function () { Debugger.Frame.prototype.onPop; }, TypeError); assertThrowsInstanceOf( function () { Debugger.Frame.prototype.onPop = function () {}; }, TypeError); // The getters and setters correctly check the type of their 'this' argument. var descriptor = Object.getOwnPropertyDescriptor(Debugger.Frame.prototype, 'onPop'); assertEq(descriptor.configurable, true); assertEq(descriptor.enumerable, false); assertThrowsInstanceOf(function () { descriptor.get.call({}); }, TypeError); assertThrowsInstanceOf(function () { descriptor.set.call({}, function() {}); }, TypeError);