|
Packit |
f0b94e |
/* Any copyright is dedicated to the Public Domain.
|
|
Packit |
f0b94e |
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// This test can be really slow on debug platforms and should be split
|
|
Packit |
f0b94e |
requestLongerTimeout(4);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Tests loading sourcemapped sources for Babel's compile output.
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
async function breakpointScopes(dbg, fixture, { line, column }, scopes) {
|
|
Packit |
f0b94e |
const { selectors: { getBreakpoint, getBreakpoints }, getState } = dbg;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
const filename = `fixtures/${fixture}/input.js`;
|
|
Packit |
f0b94e |
await waitForSources(dbg, filename);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ok(true, "Original sources exist");
|
|
Packit |
f0b94e |
const source = findSource(dbg, filename);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await selectSource(dbg, source);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Test that breakpoint is not off by a line.
|
|
Packit |
f0b94e |
await addBreakpoint(dbg, source, line);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
is(getBreakpoints(getState()).size, 1, "One breakpoint exists");
|
|
Packit |
f0b94e |
ok(
|
|
Packit |
f0b94e |
getBreakpoint(getState(), { sourceId: source.id, line, column }),
|
|
Packit |
f0b94e |
"Breakpoint has correct line"
|
|
Packit |
f0b94e |
);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
const fnName = fixture.replace(/-([a-z])/g, (s, c) => c.toUpperCase());
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
const invokeResult = invokeInTab(fnName);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let invokeFailed = await Promise.race([
|
|
Packit |
f0b94e |
waitForPaused(dbg),
|
|
Packit |
f0b94e |
invokeResult.then(() => new Promise(() => {}), () => true)
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
if (invokeFailed) {
|
|
Packit |
f0b94e |
return invokeResult;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
assertPausedLocation(dbg);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await assertScopes(dbg, scopes);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await removeBreakpoint(dbg, source.id, line, column);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
is(getBreakpoints(getState()).size, 0, "Breakpoint reverted");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await resume(dbg);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// If the invoke errored later somehow, capture here so the error is reported nicely.
|
|
Packit |
f0b94e |
await invokeResult;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
async function expandAllScopes(dbg) {
|
|
Packit |
f0b94e |
const scopes = await waitForElement(dbg, "scopes");
|
|
Packit |
f0b94e |
const scopeElements = scopes.querySelectorAll(
|
|
Packit |
f0b94e |
`.tree-node[aria-level="0"][data-expandable="true"]:not([aria-expanded="true"])`
|
|
Packit |
f0b94e |
);
|
|
Packit |
f0b94e |
const indices = Array.from(scopeElements, el => {
|
|
Packit |
f0b94e |
return Array.prototype.indexOf.call(el.parentNode.childNodes, el);
|
|
Packit |
f0b94e |
}).reverse();
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
for (const index of indices) {
|
|
Packit |
f0b94e |
await toggleScopeNode(dbg, index + 1);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
async function assertScopes(dbg, items) {
|
|
Packit |
f0b94e |
await expandAllScopes(dbg);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
for (const [i, val] of items.entries()) {
|
|
Packit |
f0b94e |
if (Array.isArray(val)) {
|
|
Packit |
f0b94e |
is(getScopeLabel(dbg, i + 1), val[0]);
|
|
Packit |
f0b94e |
is(
|
|
Packit |
f0b94e |
getScopeValue(dbg, i + 1),
|
|
Packit |
f0b94e |
val[1],
|
|
Packit |
f0b94e |
`"${val[0]}" has the expected "${val[1]}" value`
|
|
Packit |
f0b94e |
);
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
is(getScopeLabel(dbg, i + 1), val);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
is(getScopeLabel(dbg, items.length + 1), "Window");
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
add_task(async function() {
|
|
Packit |
f0b94e |
await pushPref("devtools.debugger.features.map-scopes", true);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
const dbg = await initDebugger("doc-babel.html");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "for-of", { line: 5, column: 4 }, [
|
|
Packit |
f0b94e |
"For",
|
|
Packit |
f0b94e |
["x", "1"],
|
|
Packit |
f0b94e |
"forOf",
|
|
Packit |
f0b94e |
"doThing()",
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"forOf",
|
|
Packit |
f0b94e |
"mod"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "shadowed-vars", { line: 18, column: 6 }, [
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["aConst", '"const3"'],
|
|
Packit |
f0b94e |
["aLet", '"let3"'],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["aConst", '"const2"'],
|
|
Packit |
f0b94e |
["aLet", '"let2"'],
|
|
Packit |
f0b94e |
"Outer:_Outer()",
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["aConst", '"const1"'],
|
|
Packit |
f0b94e |
["aLet", '"let1"'],
|
|
Packit |
f0b94e |
"Outer()",
|
|
Packit |
f0b94e |
"default",
|
|
Packit |
f0b94e |
["aVar", '"var3"']
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(
|
|
Packit |
f0b94e |
dbg,
|
|
Packit |
f0b94e |
"this-arguments-bindings",
|
|
Packit |
f0b94e |
{ line: 4, column: 4 },
|
|
Packit |
f0b94e |
[
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["<this>", '"this-value"'],
|
|
Packit |
f0b94e |
["arrow", "undefined"],
|
|
Packit |
f0b94e |
"fn",
|
|
Packit |
f0b94e |
["arg", '"arg-value"'],
|
|
Packit |
f0b94e |
["arguments", "Arguments"],
|
|
Packit |
f0b94e |
"root",
|
|
Packit |
f0b94e |
"fn()",
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]
|
|
Packit |
f0b94e |
);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// No '<this>' binding here because Babel does not currently general
|
|
Packit |
f0b94e |
// the current mappings for 'this' bindings.
|
|
Packit |
f0b94e |
await breakpointScopes(
|
|
Packit |
f0b94e |
dbg,
|
|
Packit |
f0b94e |
"this-arguments-bindings",
|
|
Packit |
f0b94e |
{ line: 8, column: 6 },
|
|
Packit |
f0b94e |
[
|
|
Packit |
f0b94e |
"arrow",
|
|
Packit |
f0b94e |
["argArrow", "(unmapped)"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
"arrow()",
|
|
Packit |
f0b94e |
"fn",
|
|
Packit |
f0b94e |
["arg", '"arg-value"'],
|
|
Packit |
f0b94e |
["arguments", "Arguments"],
|
|
Packit |
f0b94e |
"root",
|
|
Packit |
f0b94e |
"fn()",
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]
|
|
Packit |
f0b94e |
);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Babel 6's imports aren't fully mapped, so they show as unavailable.
|
|
Packit |
f0b94e |
// The call-based ones work, but the single-identifier ones do not.
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "imported-bindings", { line: 17, column: 2 }, [
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
["aDefault", "(unmapped)"],
|
|
Packit |
f0b94e |
["aDefault2", '"a-default2"'],
|
|
Packit |
f0b94e |
["aDefault3", "(unmapped)"],
|
|
Packit |
f0b94e |
["anAliased", "(unmapped)"],
|
|
Packit |
f0b94e |
["anAliased2", '"an-original2"'],
|
|
Packit |
f0b94e |
["anAliased3", "(unmapped)"],
|
|
Packit |
f0b94e |
["aNamed", "(unmapped)"],
|
|
Packit |
f0b94e |
["aNamed2", '"a-named2"'],
|
|
Packit |
f0b94e |
["aNamed3", "(unmapped)"],
|
|
Packit |
f0b94e |
["aNamespace", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace2", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace3", "{\u2026}"],
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "classes", { line: 12, column: 6 }, [
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["three", "3"],
|
|
Packit |
f0b94e |
["two", "2"],
|
|
Packit |
f0b94e |
"Class",
|
|
Packit |
f0b94e |
"Another()",
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
"Another()",
|
|
Packit |
f0b94e |
["one", "1"],
|
|
Packit |
f0b94e |
"Thing()",
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "for-loops", { line: 5, column: 4 }, [
|
|
Packit |
f0b94e |
"For",
|
|
Packit |
f0b94e |
["i", "1"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["i", "0"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "for-loops", { line: 9, column: 4 }, [
|
|
Packit |
f0b94e |
"For",
|
|
Packit |
f0b94e |
["i", '"2"'],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["i", "0"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "for-loops", { line: 13, column: 4 }, [
|
|
Packit |
f0b94e |
"For",
|
|
Packit |
f0b94e |
["i", "3"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["i", "0"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "functions", { line: 6, column: 8 }, [
|
|
Packit |
f0b94e |
"arrow",
|
|
Packit |
f0b94e |
["p3", "undefined"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
"arrow()",
|
|
Packit |
f0b94e |
"inner",
|
|
Packit |
f0b94e |
["p2", "undefined"],
|
|
Packit |
f0b94e |
"Function Expression",
|
|
Packit |
f0b94e |
"inner()",
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
"inner()",
|
|
Packit |
f0b94e |
"decl",
|
|
Packit |
f0b94e |
["p1", "undefined"],
|
|
Packit |
f0b94e |
"root",
|
|
Packit |
f0b94e |
"decl()",
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "modules", { line: 7, column: 2 }, [
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
["alsoModuleScoped", "2"],
|
|
Packit |
f0b94e |
["moduleScoped", "1"],
|
|
Packit |
f0b94e |
"thirdModuleScoped()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "commonjs", { line: 7, column: 2 }, [
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
["alsoModuleScoped", "2"],
|
|
Packit |
f0b94e |
["moduleScoped", "1"],
|
|
Packit |
f0b94e |
"thirdModuleScoped()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "non-modules", { line: 7, column: 2 }, []);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "switches", { line: 7, column: 6 }, [
|
|
Packit |
f0b94e |
"Switch",
|
|
Packit |
f0b94e |
["val", "2"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["val", "1"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "switches", { line: 10, column: 6 }, [
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["val", "3"],
|
|
Packit |
f0b94e |
"Switch",
|
|
Packit |
f0b94e |
["val", "2"],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["val", "1"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "try-catches", { line: 8, column: 4 }, [
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["two", "2"],
|
|
Packit |
f0b94e |
"Catch",
|
|
Packit |
f0b94e |
["err", '"AnError"'],
|
|
Packit |
f0b94e |
"Block",
|
|
Packit |
f0b94e |
["one", "1"],
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "webpack-modules", { line: 17, column: 2 }, [
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
["aDefault", '"a-default"'],
|
|
Packit |
f0b94e |
["aDefault2", '"a-default2"'],
|
|
Packit |
f0b94e |
["aDefault3", '"a-default3"'],
|
|
Packit |
f0b94e |
["anAliased", "Getter"],
|
|
Packit |
f0b94e |
["anAliased2", "Getter"],
|
|
Packit |
f0b94e |
["anAliased3", "Getter"],
|
|
Packit |
f0b94e |
["aNamed", "Getter"],
|
|
Packit |
f0b94e |
["aNamed2", "Getter"],
|
|
Packit |
f0b94e |
["aNamed3", "Getter"],
|
|
Packit |
f0b94e |
["aNamespace", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace2", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace3", "{\u2026}"],
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await breakpointScopes(dbg, "webpack-modules-es6", { line: 17, column: 2 }, [
|
|
Packit |
f0b94e |
"Module",
|
|
Packit |
f0b94e |
["aDefault", '"a-default"'],
|
|
Packit |
f0b94e |
["aDefault2", '"a-default2"'],
|
|
Packit |
f0b94e |
["aDefault3", '"a-default3"'],
|
|
Packit |
f0b94e |
["anAliased", '"an-original"'],
|
|
Packit |
f0b94e |
["anAliased2", '"an-original2"'],
|
|
Packit |
f0b94e |
["anAliased3", '"an-original3"'],
|
|
Packit |
f0b94e |
["aNamed", '"a-named"'],
|
|
Packit |
f0b94e |
["aNamed2", '"a-named2"'],
|
|
Packit |
f0b94e |
["aNamed3", '"a-named3"'],
|
|
Packit |
f0b94e |
["aNamespace", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace2", "{\u2026}"],
|
|
Packit |
f0b94e |
["aNamespace3", "{\u2026}"],
|
|
Packit |
f0b94e |
"root()"
|
|
Packit |
f0b94e |
]);
|
|
Packit |
f0b94e |
});
|