diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/client/inspector/markup/test/browser_markup_tag_edit_12.js | |
parent | Initial commit. (diff) | |
download | firefox-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 '')
-rw-r--r-- | devtools/client/inspector/markup/test/browser_markup_tag_edit_12.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/devtools/client/inspector/markup/test/browser_markup_tag_edit_12.js b/devtools/client/inspector/markup/test/browser_markup_tag_edit_12.js new file mode 100644 index 0000000000..64f9e9d57a --- /dev/null +++ b/devtools/client/inspector/markup/test/browser_markup_tag_edit_12.js @@ -0,0 +1,103 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Tests that focus position is correct when tabbing through and editing +// attributes. + +const TEST_URL = + "data:text/html;charset=utf8," + + "<div id='attr' a='1' b='2' c='3'></div>" + + "<div id='delattr' tobeinvalid='1' last='2'></div>"; + +add_task(async function () { + const { inspector } = await openInspectorForURL(TEST_URL); + + await testAttributeEditing(inspector); + await testAttributeDeletion(inspector); +}); + +async function testAttributeEditing(inspector) { + info("Testing focus position after attribute editing"); + + info("Setting the first non-id attribute in edit mode"); + // focuses id + await activateFirstAttribute("#attr", inspector); + // focuses the first attr after id + collapseSelectionAndTab(inspector); + + const attrs = await getAttributesFromEditor("#attr", inspector); + + info( + "Editing this attribute, keeping the same name, " + + "and tabbing to the next" + ); + await editAttributeAndTab(attrs[1] + '="99"', inspector); + checkFocusedAttribute(attrs[2], true); + + info( + "Editing the new focused attribute, keeping the name, " + + "and tabbing to the previous" + ); + await editAttributeAndTab(attrs[2] + '="99"', inspector, true); + checkFocusedAttribute(attrs[1], true); + + info("Editing attribute name, changes attribute order"); + await editAttributeAndTab("d='4'", inspector); + checkFocusedAttribute("id", true); + + // Escape of the currently focused field for the next test + EventUtils.sendKey("escape", inspector.panelWin); +} + +async function testAttributeDeletion(inspector) { + info("Testing focus position after attribute deletion"); + + info("Setting the first non-id attribute in edit mode"); + // focuses id + await activateFirstAttribute("#delattr", inspector); + // focuses the first attr after id + collapseSelectionAndTab(inspector); + + const attrs = await getAttributesFromEditor("#delattr", inspector); + + info("Entering an invalid attribute to delete the attribute"); + await editAttributeAndTab('"', inspector); + checkFocusedAttribute(attrs[2], true); + + info("Deleting the last attribute"); + await editAttributeAndTab(" ", inspector); + + // Check we're on the newattr element + const focusedAttr = Services.focus.focusedElement; + ok( + focusedAttr.classList.contains("styleinspector-propertyeditor"), + "in newattr" + ); + is(focusedAttr.tagName, "textarea", "newattr is active"); +} + +async function editAttributeAndTab(newValue, inspector, goPrevious) { + const onEditMutation = inspector.markup.once("refocusedonedit"); + inspector.markup.doc.activeElement.value = newValue; + if (goPrevious) { + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, inspector.panelWin); + } else { + EventUtils.sendKey("tab", inspector.panelWin); + } + await onEditMutation; +} + +/** + * Given a markup container, focus and turn in edit mode its first attribute + * field. + */ +async function activateFirstAttribute(container, inspector) { + const { editor } = await focusNode(container, inspector); + editor.tag.focus(); + + // Go to "id" attribute and trigger edit mode. + EventUtils.sendKey("tab", inspector.panelWin); + EventUtils.sendKey("return", inspector.panelWin); +} |