summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js206
1 files changed, 206 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js b/devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js
new file mode 100644
index 0000000000..5034761549
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-sourcemapped-preview.js
@@ -0,0 +1,206 @@
+/* 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/>. */
+
+"use strict";
+
+// Tests for preview through Babel's compile output.
+requestLongerTimeout(3);
+
+add_task(async function () {
+ const dbg = await initDebugger("doc-sourcemapped.html");
+ dbg.actions.toggleMapScopes();
+
+ await testForOf(dbg);
+ await testShadowing(dbg);
+ await testImportedBindings(dbg);
+});
+
+async function breakpointPreviews(
+ dbg,
+ target,
+ fixture,
+ { line, column },
+ previews
+) {
+ const url = `${target}://./${fixture}/input.js`;
+ const fnName = `${target}-${fixture}`.replace(/-([a-z])/g, (s, c) =>
+ c.toUpperCase()
+ );
+
+ info(`Starting ${fixture} tests`);
+
+ await invokeWithBreakpoint(dbg, fnName, url, { line, column }, async () => {
+ await assertPreviews(dbg, previews);
+ });
+
+ ok(true, `Ran tests for ${fixture} at line ${line} column ${column}`);
+}
+
+function testForOf(dbg) {
+ return breakpointPreviews(
+ dbg,
+ "webpack3-babel6",
+ "for-of",
+ { line: 5, column: 4 },
+ [
+ {
+ line: 5,
+ column: 7,
+ expression: "doThing",
+ result: "doThing(arg)",
+ },
+ {
+ line: 5,
+ column: 13,
+ expression: "x",
+ result: "1",
+ },
+ {
+ line: 8,
+ column: 16,
+ expression: "doThing",
+ result: "doThing(arg)",
+ },
+ ]
+ );
+}
+
+function testShadowing(dbg) {
+ return breakpointPreviews(
+ dbg,
+ "webpack3-babel6",
+ "shadowed-vars",
+ { line: 18, column: 6 },
+ [
+ // These aren't what the user would expect, but we test them anyway since
+ // they reflect what this actually returns. These shadowed bindings read
+ // the binding closest to the current frame's scope even though their
+ // actual value is different.
+ {
+ line: 2,
+ column: 9,
+ expression: "aVar",
+ result: '"var3"',
+ },
+ {
+ line: 3,
+ column: 9,
+ expression: "_aLet2;",
+ result: '"let3"',
+ },
+ {
+ line: 4,
+ column: 11,
+ expression: "_aConst2;",
+ result: '"const3"',
+ },
+ {
+ line: 10,
+ column: 11,
+ expression: "aVar",
+ result: '"var3"',
+ },
+ {
+ line: 11,
+ column: 11,
+ expression: "_aLet2;",
+ result: '"let3"',
+ },
+ {
+ line: 12,
+ column: 13,
+ expression: "_aConst2;",
+ result: '"const3"',
+ },
+
+ // These actually result in the values the user would expect.
+ {
+ line: 14,
+ column: 13,
+ expression: "aVar",
+ result: '"var3"',
+ },
+ {
+ line: 15,
+ column: 13,
+ expression: "_aLet2;",
+ result: '"let3"',
+ },
+ {
+ line: 16,
+ column: 13,
+ expression: "_aConst2;",
+ result: '"const3"',
+ },
+ ]
+ );
+}
+
+function testImportedBindings(dbg) {
+ return breakpointPreviews(
+ dbg,
+ "webpack3-babel6",
+ "esmodules-cjs",
+ { line: 20, column: 2 },
+ [
+ {
+ line: 20,
+ column: 16,
+ expression: "_mod2.default;",
+ result: '"a-default"',
+ },
+ {
+ line: 21,
+ column: 16,
+ expression: "_mod4.original;",
+ result: '"an-original"',
+ },
+ {
+ line: 22,
+ column: 16,
+ expression: "_mod3.aNamed;",
+ result: '"a-named"',
+ },
+ {
+ line: 23,
+ column: 16,
+ expression: "_mod3.aNamed;",
+ result: '"a-named"',
+ },
+ {
+ line: 24,
+ column: 16,
+ expression: "aNamespace",
+ fields: [
+ ["aNamed", '"a-named"'],
+ ["default", '"a-default"'],
+ ],
+ },
+ {
+ line: 29,
+ column: 20,
+ expression: "_mod7.default;",
+ result: '"a-default2"',
+ },
+ {
+ line: 30,
+ column: 20,
+ expression: "_mod9.original;",
+ result: '"an-original2"',
+ },
+ {
+ line: 31,
+ column: 20,
+ expression: "_mod8.aNamed2;",
+ result: '"a-named2"',
+ },
+ {
+ line: 32,
+ column: 20,
+ expression: "_mod8.aNamed2;",
+ result: '"a-named2"',
+ },
+ ]
+ );
+}