1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/jsd/test/test-bug638178-execlines.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,92 @@ 1.4 + 1.5 +var jsdIScript = SpecialPowers.Ci.jsdIScript; 1.6 + 1.7 +function f1() { 1.8 + var x; 1.9 +} 1.10 + 1.11 +function f2() { 1.12 + 1.13 + 1.14 + var x; var y; x = 1; 1.15 +} 1.16 + 1.17 +function f3() { 1.18 + 1.19 + 1.20 + var x; 1.21 + 1.22 + var y; var y2; y = 1; 1.23 + var z; 1.24 + 1.25 +} 1.26 + 1.27 +var jsdIFilter = SpecialPowers.Ci.jsdIFilter; 1.28 + 1.29 +function testJSD(jsd) { 1.30 + ok(jsd.isOn, "JSD needs to be running for this test."); 1.31 + 1.32 + jsd.functionHook = ({ 1.33 + onCall: function(frame, type) { 1.34 + //console.log("Got " + type); 1.35 + console.log("Got " + frame.script.fileName); 1.36 + } 1.37 + }); 1.38 + 1.39 + console.log("Triggering functions"); 1.40 + f1(); 1.41 + f2(); 1.42 + f3(); 1.43 + console.log("Done with functions"); 1.44 + 1.45 + var linemap = {}; 1.46 + var firsts = {}; 1.47 + var rests = {}; 1.48 + var startlines = {}; 1.49 + jsd.enumerateScripts({ 1.50 + enumerateScript: function(script) { 1.51 + if (/execlines\.js$/.test(script.fileName)) { 1.52 + console.log("script: " + script.fileName + " " + script.functionName); 1.53 + var execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, 0, 10000); 1.54 + console.log(execLines.toSource()); 1.55 + linemap[script.functionName] = execLines; 1.56 + startlines[script.functionName] = script.baseLineNumber; 1.57 + 1.58 + execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, 0, 1); 1.59 + firsts[script.functionName] = execLines; 1.60 + execLines = script.getExecutableLines(jsdIScript.PCMAP_SOURCETEXT, execLines[0]+1, 10000); 1.61 + rests[script.functionName] = execLines; 1.62 + } 1.63 + } 1.64 + }); 1.65 + 1.66 + var checklines = function (funcname, linemap, rellines) { 1.67 + var base = startlines[funcname]; 1.68 + var b = []; 1.69 + for (var i = 0; i < rellines.length; ++i) { 1.70 + b[i] = rellines[i] + base; 1.71 + } 1.72 + is(linemap[funcname].toSource(), b.toSource(), funcname + " lines"); 1.73 + }; 1.74 + 1.75 + checklines('f1', linemap, [ 1 ]); 1.76 + checklines('f2', linemap, [ 3 ]); 1.77 + checklines('f3', linemap, [ 3, 5, 6 ]); 1.78 + 1.79 + checklines('f1', firsts, [ 1 ]); 1.80 + checklines('f1', rests, []); 1.81 + checklines('f3', firsts, [ 3 ]); 1.82 + checklines('f3', rests, [ 5, 6 ]); 1.83 + 1.84 + jsd.functionHook = null; 1.85 + 1.86 + if (!jsdOnAtStart) { 1.87 + // turn JSD off if it wasn't on when this test started 1.88 + jsd.off(); 1.89 + ok(!jsd.isOn, "JSD shouldn't be running at the end of this test."); 1.90 + } 1.91 + 1.92 + SimpleTest.finish(); 1.93 +} 1.94 + 1.95 +testJSD(jsd);