summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-preview.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-preview.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-preview.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-preview.js b/devtools/client/debugger/test/mochitest/browser_dbg-preview.js
new file mode 100644
index 0000000000..3a5fe4ec5d
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-preview.js
@@ -0,0 +1,123 @@
+/* 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/>. */
+
+// Test hovering on an object, which will show a popup and on a
+// simple value, which will show a tooltip.
+
+"use strict";
+
+add_task(async function () {
+ const dbg = await initDebugger("doc-preview.html", "preview.js");
+
+ await testPreviews(dbg, "testInline", [
+ { line: 17, column: 16, expression: "obj?.prop", result: 2 },
+ ]);
+
+ await selectSource(dbg, "preview.js");
+ await testBucketedArray(dbg);
+
+ await testPreviews(dbg, "empties", [
+ { line: 6, column: 9, expression: "a", result: '""' },
+ { line: 7, column: 9, expression: "b", result: "false" },
+ { line: 8, column: 9, expression: "c", result: "undefined" },
+ { line: 9, column: 9, expression: "d", result: "null" },
+ ]);
+
+ await testPreviews(dbg, "objects", [
+ { line: 27, column: 10, expression: "empty", result: "No properties" },
+ { line: 28, column: 22, expression: "obj?.foo", result: 1 },
+ ]);
+
+ await testPreviews(dbg, "smalls", [
+ { line: 14, column: 9, expression: "a", result: '"..."' },
+ { line: 15, column: 9, expression: "b", result: "true" },
+ { line: 16, column: 9, expression: "c", result: "1" },
+ {
+ line: 17,
+ column: 9,
+ expression: "d",
+ fields: [["length", "0"]],
+ },
+ ]);
+
+ await testPreviews(dbg, "classPreview", [
+ { line: 50, column: 20, expression: "this.x", result: 1 },
+ { line: 50, column: 29, expression: "this.#privateVar", result: 2 },
+ {
+ line: 50,
+ column: 47,
+ expression: "Foo.#privateStatic",
+ fields: [
+ ["first", `"a"`],
+ ["second", `"b"`],
+ ],
+ },
+ {
+ line: 51,
+ column: 26,
+ expression: "this",
+ fields: [
+ ["x", "1"],
+ ["#privateVar", "2"],
+ ],
+ },
+ { line: 51, column: 39, expression: "this.#privateVar", result: 2 },
+ ]);
+
+ info(
+ "Check that closing the preview tooltip doesn't release the underlying object actor"
+ );
+ invokeInTab("classPreview");
+ await waitForPaused(dbg);
+ info("Display popup a first time and hide it");
+ await assertPreviews(dbg, [
+ {
+ line: 60,
+ column: 7,
+ expression: "y",
+ fields: [["hello", "{…}"]],
+ },
+ ]);
+ await closePreviewAtPos(dbg, 60, 7);
+
+ info("Display the popup again and try to expand a property");
+ const popupEl = await tryHovering(dbg, 60, 7, "popup");
+ const nodes = popupEl.querySelectorAll(".preview-popup .node");
+ const initialNodesLength = nodes.length;
+ nodes[0].querySelector(".arrow").click();
+ await waitFor(
+ () =>
+ popupEl.querySelectorAll(".preview-popup .node").length >
+ initialNodesLength
+ );
+ ok(true, `"hello" was expanded`);
+ await resume(dbg);
+});
+
+async function testPreviews(dbg, fnName, previews) {
+ invokeInTab(fnName);
+ await waitForPaused(dbg);
+
+ await assertPreviews(dbg, previews);
+ await resume(dbg);
+
+ info(`Ran tests for ${fnName}`);
+}
+
+async function testBucketedArray(dbg) {
+ invokeInTab("largeArray");
+ await waitForPaused(dbg);
+ await tryHovering(dbg, 34, 10, "popup");
+ const preview = dbg.selectors.getPreview();
+
+ is(
+ preview.properties.map(p => p.name).join(" "),
+ "[0…99] [100…100] length <prototype>",
+ "Popup properties are bucketed"
+ );
+
+ is(preview.properties[0].meta.endIndex, 99, "first bucket ends at 99");
+ is(preview.properties[2].contents.value, 101, "length is 101");
+ await resume(dbg);
+}