/* 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"; // Test that inspector markup view has all expected ARIA properties set and // updated. const TOP_CONTAINER_LEVEL = 3; add_task(function* () { let {inspector} = yield openInspectorForURL(` data:text/html;charset=utf-8,

foo

bar `); let markup = inspector.markup; let doc = markup.doc; let win = doc.defaultView; let rootElt = markup.getContainer(markup._rootNode).elt; let bodyContainer = yield getContainerForSelector("body", inspector); let spanContainer = yield getContainerForSelector("span", inspector); let headerContainer = yield getContainerForSelector("h1", inspector); let listContainer = yield getContainerForSelector("ul", inspector); // Focus on the tree element. rootElt.focus(); // Test tree related semantics is(rootElt.getAttribute("role"), "tree", "Root container should have tree semantics"); is(rootElt.getAttribute("aria-dropeffect"), "none", "By default root container's drop effect should be set to none"); is(rootElt.getAttribute("aria-activedescendant"), bodyContainer.tagLine.getAttribute("id"), "Default active descendant should be set to body"); is(bodyContainer.tagLine.getAttribute("aria-level"), TOP_CONTAINER_LEVEL - 1, "Body container tagLine should have nested level up to date"); [spanContainer, headerContainer, listContainer].forEach(container => { let treeitem = container.tagLine; is(treeitem.getAttribute("role"), "treeitem", "Child container tagLine elements should have tree item semantics"); is(treeitem.getAttribute("aria-level"), TOP_CONTAINER_LEVEL, "Child container tagLine should have nested level up to date"); is(treeitem.getAttribute("aria-grabbed"), "false", "Child container should be draggable but not grabbed by default"); is(container.children.getAttribute("role"), "group", "Container with children should have its children element have group " + "semantics"); ok(treeitem.id, "Tree item should have id assigned"); if (container.closeTagLine) { is(container.closeTagLine.getAttribute("role"), "presentation", "Ignore closing tag"); } if (container.expander) { is(container.expander.getAttribute("role"), "presentation", "Ignore expander"); } }); // Test expanding/expandable semantics ok(!spanContainer.tagLine.hasAttribute("aria-expanded"), "Non expandable tree items should not have aria-expanded attribute"); ok(!headerContainer.tagLine.hasAttribute("aria-expanded"), "Non expandable tree items should not have aria-expanded attribute"); is(listContainer.tagLine.getAttribute("aria-expanded"), "false", "Closed tree item should have aria-expanded unset"); info("Selecting and expanding list container"); let updated = waitForMultipleChildrenUpdates(inspector); yield selectNode("ul", inspector); EventUtils.synthesizeKey("VK_RIGHT", {}, win); yield updated; is(rootElt.getAttribute("aria-activedescendant"), listContainer.tagLine.getAttribute("id"), "Active descendant should not be set to list container tagLine"); is(listContainer.tagLine.getAttribute("aria-expanded"), "true", "Open tree item should have aria-expanded set"); let listItemContainer = yield getContainerForSelector("li", inspector); is(listItemContainer.tagLine.getAttribute("aria-level"), TOP_CONTAINER_LEVEL + 1, "Grand child container tagLine should have nested level up to date"); is(listItemContainer.children.getAttribute("role"), "presentation", "Container with no children should have its children element ignored by " + "accessibility"); info("Collapsing list container"); updated = waitForMultipleChildrenUpdates(inspector); EventUtils.synthesizeKey("VK_LEFT", {}, win); yield updated; is(listContainer.tagLine.getAttribute("aria-expanded"), "false", "Closed tree item should have aria-expanded unset"); });