summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Script-startColumn.js
blob: 922f4019ada1ee7471212433268d038e37609f2d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
// 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 g2 = newGlobal({newCompartment: true, useWindowProxy: true});
const dbg2 = Debugger(g2);
const g2Wrapped = dbg2.addDebuggee(g2);
g2.evaluate(`
function f7() { }
`, {
  forceFullParse: true,
});
const f7w = g2Wrapped.makeDebuggeeValue(g2.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);