forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrowser_dbg-sourcemaps.js
More file actions
113 lines (93 loc) · 2.93 KB
/
Copy pathbrowser_dbg-sourcemaps.js
File metadata and controls
113 lines (93 loc) · 2.93 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// Tests loading sourcemapped sources, setting breakpoints, and
// stepping in them.
requestLongerTimeout(2);
function assertBreakpointExists(dbg, source, line) {
const {
selectors: { getBreakpoint },
getState
} = dbg;
ok(
getBreakpoint({ sourceId: source.id, line }),
"Breakpoint has correct line"
);
}
async function assertEditorBreakpoint(dbg, line, shouldExist) {
const el = await getLineEl(dbg, line);
const exists = !!el.querySelector(".new-breakpoint");
ok(
exists === shouldExist,
`Breakpoint ${shouldExist ? "exists" : "does not exist"} on line ${line}`
);
}
async function getLineEl(dbg, line) {
let el = await codeMirrorGutterElement(dbg, line);
while (el && !el.matches(".CodeMirror-code > div")) {
el = el.parentElement;
}
return el;
}
async function clickGutter(dbg, line) {
const el = await codeMirrorGutterElement(dbg, line);
clickDOMElement(dbg, el);
}
async function waitForBreakpointCount(dbg, count) {
const {
selectors: { getBreakpointCount },
getState
} = dbg;
await waitForState(dbg, state => getBreakpointCount() == count);
}
add_task(async function() {
// NOTE: the CORS call makes the test run times inconsistent
const dbg = await initDebugger(
"doc-sourcemaps.html",
"entry.js",
"output.js",
"times2.js",
"opts.js"
);
const {
selectors: { getBreakpointCount },
getState
} = dbg;
ok(true, "Original sources exist");
const bundleSrc = findSource(dbg, "bundle.js");
// Check that the original sources appear in the source tree
await clickElement(dbg, "sourceDirectoryLabel", 4);
await assertSourceCount(dbg, 9);
await selectSource(dbg, bundleSrc);
await clickGutter(dbg, 70);
await waitForBreakpointCount(dbg, 1);
await assertEditorBreakpoint(dbg, 70, true);
await clickGutter(dbg, 70);
await waitForBreakpointCount(dbg, 0);
is(dbg.selectors.getBreakpointCount(), 0, "No breakpoints exists");
const entrySrc = findSource(dbg, "entry.js");
await selectSource(dbg, entrySrc);
ok(
getCM(dbg)
.getValue()
.includes("window.keepMeAlive"),
"Original source text loaded correctly"
);
// Test breaking on a breakpoint
await addBreakpoint(dbg, "entry.js", 15);
is(getBreakpointCount(), 1, "One breakpoint exists");
assertBreakpointExists(dbg, entrySrc, 15);
invokeInTab("keepMeAlive");
await waitForPaused(dbg);
assertPausedLocation(dbg);
await stepIn(dbg);
assertPausedLocation(dbg);
await dbg.actions.jumpToMappedSelectedLocation(getContext(dbg));
await stepOver(dbg);
assertPausedLocation(dbg);
assertDebugLine(dbg, 71);
await dbg.actions.jumpToMappedSelectedLocation(getContext(dbg));
await stepOut(dbg);
assertPausedLocation(dbg);
assertDebugLine(dbg, 16);
});