surfaces-offsets.js (1910B)
1 // Invalid offsets result in exceptions, not bogus results. 2 3 load(libdir + "asserts.js"); 4 5 var g = newGlobal({newCompartment: true}); 6 var dbg = Debugger(g); 7 var hits; 8 dbg.onDebuggerStatement = function (frame) { 9 assertEq(frame.script.getOffsetLocation(frame.offset).lineNumber, g.line); 10 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(String(frame.offset)).lineNumber; }, Error); 11 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(Object(frame.offset)).lineNumber; }, Error); 12 13 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(-1).lineNumber; }, Error); 14 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(1000000).lineNumber; }, Error); 15 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(0.25).lineNumber; }, Error); 16 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(+Infinity).lineNumber; }, Error); 17 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(-Infinity).lineNumber; }, Error); 18 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(NaN).lineNumber; }, Error); 19 20 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(false).lineNumber; }, Error); 21 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(true).lineNumber; }, Error); 22 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation(undefined).lineNumber; }, Error); 23 assertThrowsInstanceOf(function () { frame.script.getOffsetLocation().lineNumber; }, Error); 24 25 // We assume that at least one whole number between 0 and frame.offset is invalid. 26 assertThrowsInstanceOf( 27 function () { 28 for (var i = 0; i < frame.offset; i++) 29 frame.script.getOffsetLocation(i).lineNumber; 30 }, 31 Error); 32 33 hits++; 34 }; 35 36 hits = 0; 37 g.eval("var line = new Error().lineNumber; debugger;");