/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Test that when right-clicking on various text boxes throughout the inspector does use
// the toolbox's context menu (copy/cut/paste/selectAll/Undo).
add_task(async function () {
await addTab(`data:text/html;charset=utf-8,
textbox context menu test
`);
const { toolbox, inspector } = await openInspector();
await selectNode("h1", inspector);
info("Testing the markup-view tagname");
const container = await focusNode("h1", inspector);
const tag = container.editor.tag;
tag.focus();
EventUtils.sendKey("return", inspector.panelWin);
await checkTextBox(inspector.markup.doc.activeElement, toolbox);
info("Testing the markup-view attribute");
EventUtils.sendKey("tab", inspector.panelWin);
await checkTextBox(inspector.markup.doc.activeElement, toolbox);
info("Testing the markup-view new attribute");
// It takes 2 tabs to focus the newAttr field, the first one just moves the cursor to
// the end of the field.
EventUtils.sendKey("tab", inspector.panelWin);
EventUtils.sendKey("tab", inspector.panelWin);
await checkTextBox(inspector.markup.doc.activeElement, toolbox);
info("Testing the markup-view textcontent");
EventUtils.sendKey("tab", inspector.panelWin);
await checkTextBox(inspector.markup.doc.activeElement, toolbox);
// Blur this last markup-view field, since we're moving on to the rule-view next.
EventUtils.sendKey("escape", inspector.panelWin);
info("Testing the rule-view selector");
const ruleView = inspector.getPanel("ruleview").view;
const cssRuleEditor = getRuleViewRuleEditor(ruleView, 1);
EventUtils.synthesizeMouseAtCenter(
cssRuleEditor.selectorText,
{},
inspector.panelWin
);
await checkTextBox(inspector.panelDoc.activeElement, toolbox);
info("Testing the rule-view property name");
EventUtils.sendKey("tab", inspector.panelWin);
await checkTextBox(inspector.panelDoc.activeElement, toolbox);
info("Testing the rule-view property value");
EventUtils.sendKey("tab", inspector.panelWin);
await checkTextBox(inspector.panelDoc.activeElement, toolbox);
info("Testing the rule-view new property");
// Tabbing out of the value field triggers a ruleview-changed event that we need to wait
// for.
const onRuleViewChanged = once(ruleView, "ruleview-changed");
EventUtils.sendKey("tab", inspector.panelWin);
await onRuleViewChanged;
await checkTextBox(inspector.panelDoc.activeElement, toolbox);
info("Switching to the layout-view");
const onBoxModelUpdated = inspector.once("boxmodel-view-updated");
selectLayoutView(inspector);
await onBoxModelUpdated;
info("Testing the box-model region");
const margin = inspector.panelDoc.querySelector(
".boxmodel-margin.boxmodel-top > span"
);
EventUtils.synthesizeMouseAtCenter(margin, {}, inspector.panelWin);
await checkTextBox(inspector.panelDoc.activeElement, toolbox);
// Move the mouse out of the box-model region to avoid triggering the box model
// highlighter.
EventUtils.synthesizeMouseAtCenter(tag, {}, inspector.panelWin);
});
async function checkTextBox(textBox, toolbox) {
let textboxContextMenu = toolbox.getTextBoxContextMenu();
ok(!textboxContextMenu, "The menu is closed");
info(
"Simulating context click on the textbox and expecting the menu to open"
);
const onContextMenu = toolbox.once("menu-open");
synthesizeContextMenuEvent(textBox);
await onContextMenu;
textboxContextMenu = toolbox.getTextBoxContextMenu();
ok(textboxContextMenu, "The menu is now visible");
info("Closing the menu");
const onContextMenuHidden = toolbox.once("menu-close");
textboxContextMenu.hidePopup();
await onContextMenuHidden;
textboxContextMenu = toolbox.getTextBoxContextMenu();
ok(!textboxContextMenu, "The menu is closed again");
}