/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Test that inspector links in webconsole outputs for DOM Nodes highlight // the actual DOM Nodes on hover "use strict"; const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "test/test-console-output-dom-elements.html"; function test() { Task.spawn(function* () { let {tab} = yield loadTab(TEST_URI); let hud = yield openConsole(tab); let toolbox = gDevTools.getToolbox(hud.target); // Loading the inspector panel at first, to make it possible to listen for // new node selections yield toolbox.loadTool("inspector"); toolbox.getPanel("inspector"); info("Executing 'testNode()' in the web console to output a DOM Node"); let [result] = yield jsEval("testNode()", hud, { text: '

' }); let elementNodeWidget = yield getWidget(result); let nodeFront = yield hoverOverWidget(elementNodeWidget, toolbox); let attrs = nodeFront.attributes; is(nodeFront.tagName, "P", "The correct node was highlighted"); is(attrs[0].name, "some-attribute", "The correct node was highlighted"); is(attrs[0].value, "some-value", "The correct node was highlighted"); }).then(finishTest); } function jsEval(input, hud, message) { hud.jsterm.execute(input); return waitForMessages({ webconsole: hud, messages: [message] }); } function* getWidget(result) { info("Getting the output ElementNode widget"); let msg = [...result.matched][0]; let elementNodeWidget = [...msg._messageObject.widgets][0]; ok(elementNodeWidget, "ElementNode widget found in the output"); info("Waiting for the ElementNode widget to be linked to the inspector"); yield elementNodeWidget.linkToInspector(); return elementNodeWidget; } function* hoverOverWidget(widget, toolbox) { info("Hovering over the output to highlight the node"); let onHighlight = toolbox.once("node-highlight"); EventUtils.sendMouseEvent({type: "mouseover"}, widget.element, widget.element.ownerDocument.defaultView); let nodeFront = yield onHighlight; ok(true, "The highlighter was shown on a node"); return nodeFront; }