/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* 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 different ways to initialize the inspector. const DOCUMENT_HTML = '
\n' + '

Some header text

\n' + '

hi.

\n' + '

I am a test-case. This text exists ' + 'solely to provide some things to test the inspector initialization.

\n' + 'If you are reading this, you should go do something else instead. Maybe ' + 'read a book. Or better yet, write some test-cases for another bit of code. ' + 'Inspector\'s!

\n' + '

end transmission

\n' + '
'; const TEST_URI = "data:text/html;charset=utf-8,test page"; add_task(function* () { let tab = yield addTab(TEST_URI); content.document.body.innerHTML = DOCUMENT_HTML; content.document.title = "Inspector Initialization Test"; yield testToolboxInitialization(tab); yield testContextMenuInitialization(); yield testContextMenuInspectorAlreadyOpen(); }); function* testToolboxInitialization(tab) { let target = TargetFactory.forTab(tab); info("Opening inspector with gDevTools."); let toolbox = yield gDevTools.showToolbox(target, "inspector"); let inspector = toolbox.getCurrentPanel(); ok(true, "Inspector started, and notification received."); ok(inspector, "Inspector instance is accessible."); ok(inspector.isReady, "Inspector instance is ready."); is(inspector.target.tab, tab, "Valid target."); yield selectNode("p", inspector); yield testMarkupView("p", inspector); yield testBreadcrumbs("p", inspector); let span = getNode("span"); span.scrollIntoView(); yield selectNode("span", inspector); yield testMarkupView("span", inspector); yield testBreadcrumbs("span", inspector); info("Destroying toolbox"); let destroyed = toolbox.once("destroyed"); toolbox.destroy(); yield destroyed; ok("true", "'destroyed' notification received."); ok(!gDevTools.getToolbox(target), "Toolbox destroyed."); } function* testContextMenuInitialization() { info("Opening inspector by clicking on 'Inspect Element' context menu item"); let salutation = getNode("#salutation"); yield clickOnInspectMenuItem(salutation); info("Checking inspector state."); yield testMarkupView("#salutation"); yield testBreadcrumbs("#salutation"); } function* testContextMenuInspectorAlreadyOpen() { info("Changing node by clicking on 'Inspect Element' context menu item"); let inspector = getActiveInspector(); ok(inspector, "Inspector is active"); let closing = getNode("#closing"); yield clickOnInspectMenuItem(closing); ok(true, "Inspector was updated when 'Inspect Element' was clicked."); yield testMarkupView("#closing", inspector); yield testBreadcrumbs("#closing", inspector); } function* testMarkupView(selector, inspector) { inspector = inspector || getActiveInspector(); let nodeFront = yield getNodeFront(selector, inspector); try { is(inspector.selection.nodeFront, nodeFront, "Right node is selected in the markup view"); } catch(ex) { ok(false, "Got exception while resolving selected node of markup view."); console.error(ex); } } function* testBreadcrumbs(selector, inspector) { inspector = inspector || getActiveInspector(); let nodeFront = yield getNodeFront(selector, inspector); let b = inspector.breadcrumbs; let expectedText = b.prettyPrintNodeAsText(nodeFront); let button = b.container.querySelector("button[checked=true]"); ok(button, "A crumbs is checked=true"); is(button.getAttribute("tooltiptext"), expectedText, "Crumb refers to the right node"); } function* clickOnInspectMenuItem(node) { info("Showing the contextual menu on node " + node); yield executeInContent("Test:SynthesizeMouse", { center: true, options: {type: "contextmenu", button: 2} }, {node}); // nsContextMenu also requires the popupNode to be set, but we can't set it to // node under e10s as it's a CPOW, not a DOM node. But under e10s, // nsContextMenu won't use the property anyway, so just try/catching is ok. try { document.popupNode = node; } catch (e) {} let contentAreaContextMenu = document.querySelector("#contentAreaContextMenu"); let contextMenu = new nsContextMenu(contentAreaContextMenu); info("Triggering inspect action and hiding the menu."); yield contextMenu.inspectNode(); contentAreaContextMenu.hidden = true; contentAreaContextMenu.hidePopup(); contextMenu.hiding(); info("Waiting for inspector to update."); yield getActiveInspector().once("inspector-updated"); }