summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js172
1 files changed, 172 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js b/devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js
new file mode 100644
index 0000000000..5a1b76a7bd
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-quick-open.js
@@ -0,0 +1,172 @@
+/* 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/>. */
+
+// Testing quick open
+
+"use strict";
+
+add_task(async function () {
+ const dbg = await initDebugger("doc-script-switching.html");
+
+ // Inject lots of sources to go beyond the maximum limit of displayed sources (set to 100)
+ const injectedSources = await SpecialPowers.spawn(
+ gBrowser.selectedBrowser,
+ [],
+ function () {
+ const sources = [];
+ for (let i = 1; i <= 200; i++) {
+ const value = String(i).padStart(3, "0");
+ content.eval(
+ `function evalSource() {}; //# sourceURL=eval-source-${value}.js`
+ );
+ sources.push(`eval-source-${value}.js`);
+ }
+ return sources;
+ }
+ );
+ await waitForSources(dbg, ...injectedSources);
+
+ info("Test opening and closing");
+ await quickOpen(dbg, "");
+ // Only the first 100 results are shown in the quick open menu
+ await waitForResults(dbg, injectedSources.slice(0, 100));
+ is(resultCount(dbg), 100, "100 file results");
+ pressKey(dbg, "Escape");
+ assertQuickOpenDisabled(dbg);
+
+ info("Testing the number of results for source search");
+ await quickOpen(dbg, "sw");
+ await waitForResults(dbg, [undefined, undefined]);
+ is(resultCount(dbg), 2, "two file results");
+ pressKey(dbg, "Escape");
+
+ // We ensure that sources after maxResult limit are visible
+ info("Test that first and last eval source are visible");
+ await quickOpen(dbg, "eval-source-001.js");
+ await waitForResults(dbg, ["eval-source-001.js"]);
+ is(resultCount(dbg), 1, "one file result");
+ pressKey(dbg, "Escape");
+ await quickOpen(dbg, "eval-source-200.js");
+ await waitForResults(dbg, ["eval-source-200.js"]);
+ is(resultCount(dbg), 1, "one file result");
+ pressKey(dbg, "Escape");
+
+ info("Testing source search and check to see if source is selected");
+ await waitForSource(dbg, "script-switching-01.js");
+ await quickOpen(dbg, "sw1");
+ await waitForResults(dbg, ["script-switching-01.js"]);
+ is(resultCount(dbg), 1, "one file results");
+ pressKey(dbg, "Enter");
+ await waitForSelectedSource(dbg, "script-switching-01.js");
+
+ info("Test that results show tab icons");
+ await quickOpen(dbg, "sw1");
+ await waitForResults(dbg, ["script-switching-01.js"]);
+ await assertResultIsTab(dbg, 1);
+ pressKey(dbg, "Tab");
+
+ info(
+ "Testing arrow keys in source search and check to see if source is selected"
+ );
+ await quickOpen(dbg, "sw2");
+ await waitForResults(dbg, ["script-switching-02.js"]);
+ is(resultCount(dbg), 1, "one file results");
+ pressKey(dbg, "Down");
+ pressKey(dbg, "Enter");
+ await waitForSelectedSource(dbg, "script-switching-02.js");
+
+ info("Testing tab closes the search");
+ await quickOpen(dbg, "sw");
+ await waitForResults(dbg, [undefined, undefined]);
+ pressKey(dbg, "Tab");
+ assertQuickOpenDisabled(dbg);
+
+ info("Testing function search (anonymous fuctions should not display)");
+ await quickOpen(dbg, "", "quickOpenFunc");
+ await waitForResults(dbg, ["secondCall", "foo"]);
+ is(resultCount(dbg), 2, "two function results");
+
+ type(dbg, "@x");
+ await waitForResults(dbg, []);
+ is(resultCount(dbg), 0, "no functions with 'x' in name");
+
+ pressKey(dbg, "Escape");
+ assertQuickOpenDisabled(dbg);
+
+ info("Testing goto line:column");
+ assertLine(dbg, 0);
+ assertColumn(dbg, null);
+ await quickOpen(dbg, ":7:12");
+ await waitForResults(dbg, [undefined, undefined]);
+ pressKey(dbg, "Enter");
+ await waitForSelectedSource(dbg, "script-switching-02.js");
+ assertLine(dbg, 7);
+ assertColumn(dbg, 12);
+
+ info("Testing gotoSource");
+ await quickOpen(dbg, "sw1:5");
+ await waitForResults(dbg, ["script-switching-01.js"]);
+ pressKey(dbg, "Enter");
+ await waitForSelectedSource(dbg, "script-switching-01.js");
+ assertLine(dbg, 5);
+});
+
+function assertQuickOpenEnabled(dbg) {
+ is(dbg.selectors.getQuickOpenEnabled(), true, "quickOpen enabled");
+}
+
+function assertQuickOpenDisabled(dbg) {
+ is(dbg.selectors.getQuickOpenEnabled(), false, "quickOpen disabled");
+}
+
+function assertLine(dbg, lineNumber) {
+ is(
+ dbg.selectors.getSelectedLocation().line,
+ lineNumber,
+ `goto line is ${lineNumber}`
+ );
+}
+
+function assertColumn(dbg, columnNumber) {
+ let value = dbg.selectors.getSelectedLocation().column;
+ if (value === undefined) {
+ value = null;
+ } else {
+ // column is 0-based, while we want to mention 1-based in the test.
+ value++;
+ }
+ is(value, columnNumber, `goto column is ${columnNumber}`);
+}
+
+function resultCount(dbg) {
+ return findAllElements(dbg, "resultItems").length;
+}
+
+async function quickOpen(dbg, query, shortcut = "quickOpen") {
+ pressKey(dbg, shortcut);
+ assertQuickOpenEnabled(dbg);
+ query !== "" && type(dbg, query);
+}
+
+async function waitForResults(dbg, results) {
+ await waitForAllElements(dbg, "resultItems", results.length, true);
+
+ for (let i = 0; i < results.length; ++i) {
+ if (results[i] !== undefined) {
+ await waitForElement(dbg, "resultItemName", results[i], i + 1);
+ }
+ }
+}
+
+function findResultEl(dbg, index = 1) {
+ return waitForElementWithSelector(dbg, `.result-item:nth-child(${index})`);
+}
+
+async function assertResultIsTab(dbg, index) {
+ const el = await findResultEl(dbg, index);
+ ok(
+ el && !!el.querySelector(".tab.result-item-icon"),
+ "Result should be a tab"
+ );
+}