Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* 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";
// Checks for the AccessibleActor
add_task(async function () {
const { target, walker, a11yWalker, parentAccessibility } =
await initAccessibilityFrontsForUrl(MAIN_DOMAIN + "doc_accessibility.html");
const modifiers =
Services.appinfo.OS === "Darwin" ? "\u2303\u2325" : "Alt+Shift+";
const buttonNode = await walker.querySelector(walker.rootNode, "#button");
const accessibleFront = await a11yWalker.getAccessibleFor(buttonNode);
checkA11yFront(accessibleFront, {
name: "Accessible Button",
role: "button",
childCount: 1,
});
await accessibleFront.hydrate();
checkA11yFront(accessibleFront, {
name: "Accessible Button",
role: "button",
value: "",
description: "Accessibility Test",
keyboardShortcut: modifiers + "b",
childCount: 1,
domNodeType: 1,
indexInParent: 1,
states: ["focusable", "opaque", "enabled", "sensitive"],
actions: ["Press"],
attributes: {
"margin-top": "0px",
display: "inline-block",
"text-align": "center",
"text-indent": "0px",
"margin-left": "0px",
tag: "button",
"margin-right": "0px",
id: "button",
"margin-bottom": "0px",
},
});
info("Children");
const children = await accessibleFront.children();
is(children.length, 1, "Accessible Front has correct number of children");
checkA11yFront(children[0], {
name: "Accessible Button",
role: "text leaf",
});
info("Relations");
const labelNode = await walker.querySelector(walker.rootNode, "#label");
const controlNode = await walker.querySelector(walker.rootNode, "#control");
const labelAccessibleFront = await a11yWalker.getAccessibleFor(labelNode);
const controlAccessibleFront = await a11yWalker.getAccessibleFor(controlNode);
const docAccessibleFront = await a11yWalker.getAccessibleFor(walker.rootNode);
const labelRelations = await labelAccessibleFront.getRelations();
is(labelRelations.length, 2, "Label has correct number of relations");
is(labelRelations[0].type, "label for", "Label has a label for relation");
is(labelRelations[0].targets.length, 1, "Label is a label for one target");
is(
labelRelations[0].targets[0],
controlAccessibleFront,
"Label is a label for control accessible front"
);
is(
labelRelations[1].type,
"containing document",
"Label has a containing document relation"
);
is(
labelRelations[1].targets.length,
1,
"Label is contained by just one document"
);
is(
labelRelations[1].targets[0],
docAccessibleFront,
"Label's containing document is a root document"
);
const controlRelations = await controlAccessibleFront.getRelations();
is(controlRelations.length, 3, "Control has correct number of relations");
is(controlRelations[2].type, "details", "Control has a details relation");
is(controlRelations[2].targets.length, 1, "Control has one details target");
const detailsNode = await walker.querySelector(walker.rootNode, "#details");
const detailsAccessibleFront = await a11yWalker.getAccessibleFor(detailsNode);
is(
controlRelations[2].targets[0],
detailsAccessibleFront,
"Control has correct details target"
);
info("Snapshot");
const snapshot = await controlAccessibleFront.snapshot();
Assert.deepEqual(snapshot, {
name: "Label",
role: "textbox",
actions: ["Activate"],
value: "",
nodeCssSelector: "#control",
nodeType: 1,
description: "",
keyboardShortcut: "",
childCount: 0,
indexInParent: 1,
states: [
"focusable",
"autocompletion",
"selectable text",
"editable",
"opaque",
"single line",
"enabled",
"sensitive",
],
children: [],
attributes: {
"margin-left": "0px",
"text-align": "start",
"text-indent": "0px",
id: "control",
tag: "input",
"margin-top": "0px",
"margin-bottom": "0px",
"margin-right": "0px",
display: "inline-block",
"explicit-name": "true",
},
});
// Check that we're using ARIA role tokens for landmarks implicit in native
// markup.
const headerNode = await walker.querySelector(walker.rootNode, "#header");
const headerAccessibleFront = await a11yWalker.getAccessibleFor(headerNode);
checkA11yFront(headerAccessibleFront, {
name: null,
role: "banner",
childCount: 1,
});
const navNode = await walker.querySelector(walker.rootNode, "#nav");
const navAccessibleFront = await a11yWalker.getAccessibleFor(navNode);
checkA11yFront(navAccessibleFront, {
name: null,
role: "navigation",
childCount: 1,
});
const footerNode = await walker.querySelector(walker.rootNode, "#footer");
const footerAccessibleFront = await a11yWalker.getAccessibleFor(footerNode);
checkA11yFront(footerAccessibleFront, {
name: null,
role: "contentinfo",
childCount: 1,
});
await waitForA11yShutdown(parentAccessibility);
await target.destroy();
gBrowser.removeCurrentTab();
});