summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_source_map-02.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/framework/test/browser_source_map-02.js')
-rw-r--r--devtools/client/framework/test/browser_source_map-02.js113
1 files changed, 113 insertions, 0 deletions
diff --git a/devtools/client/framework/test/browser_source_map-02.js b/devtools/client/framework/test/browser_source_map-02.js
new file mode 100644
index 000000000..f31ce0175
--- /dev/null
+++ b/devtools/client/framework/test/browser_source_map-02.js
@@ -0,0 +1,113 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests the SourceMapService updates generated sources when pretty printing
+ * and un pretty printing.
+ */
+
+// Force the old debugger UI since it's directly used (see Bug 1301705)
+Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false);
+registerCleanupFunction(function* () {
+ Services.prefs.clearUserPref("devtools.debugger.new-debugger-frontend");
+});
+
+const DEBUGGER_ROOT = "http://example.com/browser/devtools/client/debugger/test/mochitest/";
+// Empty page
+const PAGE_URL = `${DEBUGGER_ROOT}doc_empty-tab-01.html`;
+const JS_URL = `${URL_ROOT}code_ugly.js`;
+const { SourceMapService } = require("devtools/client/framework/source-map-service");
+
+add_task(function* () {
+ let toolbox = yield openNewTabAndToolbox(PAGE_URL, "jsdebugger");
+
+ let service = new SourceMapService(toolbox.target);
+
+ let checkedPretty = false;
+ let checkedUnpretty = false;
+
+ function onUpdate(e, oldLoc, newLoc) {
+ if (oldLoc.line === 3) {
+ checkPrettified(oldLoc, newLoc);
+ checkedPretty = true;
+ } else if (oldLoc.line === 9) {
+ checkUnprettified(oldLoc, newLoc);
+ checkedUnpretty = true;
+ } else {
+ throw new Error(`Unexpected location update: ${JSON.stringify(oldLoc)}`);
+ }
+ }
+ const loc1 = { url: JS_URL, line: 3 };
+ service.subscribe(loc1, onUpdate);
+
+ // Inject JS script
+ let sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
+ yield createScript(JS_URL);
+ yield sourceShown;
+
+ let ppButton = toolbox.getCurrentPanel().panelWin.document.getElementById("pretty-print");
+ sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
+ ppButton.click();
+ yield sourceShown;
+ yield waitUntil(() => checkedPretty);
+
+ // TODO check unprettified change once bug 1177446 fixed
+ // info("Testing un-pretty printing.");
+ // sourceShown = waitForSourceShown(toolbox.getCurrentPanel(), "code_ugly.js");
+ // ppButton.click();
+ // yield sourceShown;
+ // yield waitUntil(() => checkedUnpretty);
+
+
+ yield toolbox.destroy();
+ gBrowser.removeCurrentTab();
+ finish();
+});
+
+function checkPrettified(oldLoc, newLoc) {
+ is(oldLoc.line, 3, "Correct line for JS:3");
+ is(oldLoc.column, null, "Correct column for JS:3");
+ is(oldLoc.url, JS_URL, "Correct url for JS:3");
+ is(newLoc.line, 9, "Correct line for JS:3 -> PRETTY");
+ is(newLoc.column, 0, "Correct column for JS:3 -> PRETTY");
+ is(newLoc.url, JS_URL, "Correct url for JS:3 -> PRETTY");
+}
+
+function checkUnprettified(oldLoc, newLoc) {
+ is(oldLoc.line, 9, "Correct line for JS:3 -> PRETTY");
+ is(oldLoc.column, 0, "Correct column for JS:3 -> PRETTY");
+ is(oldLoc.url, JS_URL, "Correct url for JS:3 -> PRETTY");
+ is(newLoc.line, 3, "Correct line for JS:3 -> UNPRETTIED");
+ is(newLoc.column, null, "Correct column for JS:3 -> UNPRETTIED");
+ is(newLoc.url, JS_URL, "Correct url for JS:3 -> UNPRETTIED");
+}
+
+function createScript(url) {
+ info(`Creating script: ${url}`);
+ let mm = getFrameScript();
+ let command = `
+ let script = document.createElement("script");
+ script.setAttribute("src", "${url}");
+ document.body.appendChild(script);
+ `;
+ return evalInDebuggee(mm, command);
+}
+
+function waitForSourceShown(debuggerPanel, url) {
+ let { panelWin } = debuggerPanel;
+ let deferred = defer();
+
+ info(`Waiting for source ${url} to be shown in the debugger...`);
+ panelWin.on(panelWin.EVENTS.SOURCE_SHOWN, function onSourceShown(_, source) {
+ let sourceUrl = source.url || source.introductionUrl;
+
+ if (sourceUrl.includes(url)) {
+ panelWin.off(panelWin.EVENTS.SOURCE_SHOWN, onSourceShown);
+ info(`Source shown for ${url}`);
+ deferred.resolve(source);
+ }
+ });
+
+ return deferred.promise;
+}