diff -r 000000000000 -r 6474c204b198 js/jsd/test/test-bug638178-execlines.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/jsd/test/test-bug638178-execlines.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,92 @@ + +var jsdIScript = SpecialPowers.Ci.jsdIScript; + +function f1() { + var x; +} + +function f2() { + + + var x; var y; x = 1; +} + +function f3() { + + + var x; + + var y; var y2; y = 1; + var z; + +} + +var jsdIFilter = SpecialPowers.Ci.jsdIFilter; + +function testJSD(jsd) { + ok(jsd.isOn, "JSD needs to be running for this test."); + + jsd.functionHook = ({ + onCall: function(frame, type) { + //console.log("Got " + type); + console.log("Got " + frame.script.fileName); + } + }); + + console.log("Triggering functions"); + f1(); + f2(); + f3(); + console.log("Done with functions"); + + var linemap = {}; + var firsts = {}; + var rests = {}; + var startlines = {}; + jsd.enumerateScripts({ + enumerateScript: function(script) { + if (/execlines\.js$/.test(script.fileName)) { + console.log("script: " + script.fileName + " " + script.functionName); + var execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, 0, 10000); + console.log(execLines.toSource()); + linemap[script.functionName] = execLines; + startlines[script.functionName] = script.baseLineNumber; + + execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, 0, 1); + firsts[script.functionName] = execLines; + execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, execLines[0]+1, 10000); + rests[script.functionName] = execLines; + } + } + }); + + var checklines = function (funcname, linemap, rellines) { + var base = startlines[funcname]; + var b = []; + for (var i = 0; i < rellines.length; ++i) { + b[i] = rellines[i] + base; + } + is(linemap[funcname].toSource(), b.toSource(), funcname + " lines"); + }; + + checklines('f1', linemap, [ 1 ]); + checklines('f2', linemap, [ 3 ]); + checklines('f3', linemap, [ 3, 5, 6 ]); + + checklines('f1', firsts, [ 1 ]); + checklines('f1', rests, []); + checklines('f3', firsts, [ 3 ]); + checklines('f3', rests, [ 5, 6 ]); + + jsd.functionHook = null; + + if (!jsdOnAtStart) { + // turn JSD off if it wasn't on when this test started + jsd.off(); + ok(!jsd.isOn, "JSD shouldn't be running at the end of this test."); + } + + SimpleTest.finish(); +} + +testJSD(jsd);