166 lines
5.1 KiB
JavaScript
166 lines
5.1 KiB
JavaScript
/* 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();
|
|
});
|