diff options
Diffstat (limited to 'js/src/jit-test/tests/debug/Script-startColumn.js')
-rw-r--r-- | js/src/jit-test/tests/debug/Script-startColumn.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Script-startColumn.js b/js/src/jit-test/tests/debug/Script-startColumn.js new file mode 100644 index 0000000000..5f8f0c5d4e --- /dev/null +++ b/js/src/jit-test/tests/debug/Script-startColumn.js @@ -0,0 +1,99 @@ +// Script.prototype.startColumn returns the correct column for all scripts. + +const g = newGlobal({newCompartment: true, useWindowProxy: true}); +const dbg = Debugger(g); +const gw = dbg.addDebuggee(g); + +function test(f, expected) { + const fw = gw.makeDebuggeeValue(f); + assertEq(fw.callable, true); + assertEq(fw.script.startColumn, expected); +} + +g.eval(` +function f1() { } +`); +test(g.f1, 11); + +g.eval(` +var f2 = function({ a, b, c }, d, e, ...more) { }; +`); +test(g.f2, 17); + +g.eval(` +var f3 = function *() { }; +`); +test(g.f3, 19); + +g.eval(` +var f4 = async function + () { }; +`); +test(g.f4, 2); + +g.eval(` +var f5 = (a, b) => a + b; +`); +test(g.f5, 9); + +g.eval(` +var f6 = a => a + 1; +`); +test(g.f6, 9); + +g.eval(` +var MyClass = class { + method() { } +}; +var myInstance = new MyClass(); +`); +test(g.myInstance.method, 10); +test(g.myInstance.constructor, 14); + +const gEager = newGlobal({newCompartment: true, useWindowProxy: true, disableLazyParsing: true}); +const eagerDbg = Debugger(gEager); +const gEagerWrapped = eagerDbg.addDebuggee(gEager); +gEager.eval(` +function f7() { } +`); +const f7w = gEagerWrapped.makeDebuggeeValue(gEager.f7); +assertEq(f7w.callable, true); +assertEq(f7w.script.startColumn, 11); + +g.eval(` +function f8() { + return function f8Inner() { } +} +`); +test(g.f8, 11); +test(g.f8(), 27); + +g.eval(` +var f9 = new Function(\"\"); +`); +test(g.f9, 0); + +let hit = 0; +let column; +dbg.onDebuggerStatement = function (frame) { + column = frame.script.startColumn; + hit += 1; +}; + +g.eval(` debugger;`); +assertEq(column, 0); +assertEq(hit, 1); + +const location = { fileName: "column.js", lineNumber: 1, columnNumber: 1 }; +hit = 0; +g.evaluate(` debugger;`, location); +assertEq(column, 1); +assertEq(hit, 1); + +g.evaluate(`var f10 = function () { };`, location); +test(g.f10, 20); + +g.evaluate(` +var f11 = function () { }; +`, location); +test(g.f11, 19); |