|
Packit |
f0b94e |
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
Packit |
f0b94e |
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
Packit |
f0b94e |
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
"use strict";
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Checks for the AccessibleActor events
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
add_task(async function () {
|
|
Packit |
f0b94e |
let {client, walker, accessibility} =
|
|
Packit |
f0b94e |
await initAccessibilityFrontForUrl(MAIN_DOMAIN + "doc_accessibility.html");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
let a11yWalker = await accessibility.getWalker();
|
|
Packit |
f0b94e |
await accessibility.enable();
|
|
Packit |
f0b94e |
let rootNode = await walker.getRootNode();
|
|
Packit |
f0b94e |
let a11yDoc = await a11yWalker.getAccessibleFor(rootNode);
|
|
Packit |
f0b94e |
let buttonNode = await walker.querySelector(walker.rootNode, "#button");
|
|
Packit |
f0b94e |
let accessibleFront = await a11yWalker.getAccessibleFor(buttonNode);
|
|
Packit |
f0b94e |
let sliderNode = await walker.querySelector(walker.rootNode, "#slider");
|
|
Packit |
f0b94e |
let accessibleSliderFront = await a11yWalker.getAccessibleFor(sliderNode);
|
|
Packit |
f0b94e |
let browser = gBrowser.selectedBrowser;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
checkA11yFront(accessibleFront, {
|
|
Packit |
f0b94e |
name: "Accessible Button",
|
|
Packit |
f0b94e |
role: "pushbutton",
|
|
Packit |
f0b94e |
value: "",
|
|
Packit |
f0b94e |
description: "Accessibility Test",
|
|
Packit |
f0b94e |
help: "",
|
|
Packit |
f0b94e |
keyboardShortcut: "",
|
|
Packit |
f0b94e |
childCount: 1,
|
|
Packit |
f0b94e |
domNodeType: 1,
|
|
Packit |
f0b94e |
indexInParent: 1,
|
|
Packit |
f0b94e |
states: ["focusable", "selectable text", "opaque", "enabled", "sensitive"],
|
|
Packit |
f0b94e |
actions: [ "Press" ],
|
|
Packit |
f0b94e |
attributes: {
|
|
Packit |
f0b94e |
"margin-top": "0px",
|
|
Packit |
f0b94e |
display: "inline-block",
|
|
Packit |
f0b94e |
"text-align": "center",
|
|
Packit |
f0b94e |
"text-indent": "0px",
|
|
Packit |
f0b94e |
"margin-left": "0px",
|
|
Packit |
f0b94e |
tag: "button",
|
|
Packit |
f0b94e |
"margin-right": "0px",
|
|
Packit |
f0b94e |
id: "button",
|
|
Packit |
f0b94e |
"margin-bottom": "0px"
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("Name change event");
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleFront, "name-change",
|
|
Packit |
f0b94e |
(name, parent) => {
|
|
Packit |
f0b94e |
checkA11yFront(accessibleFront, { name: "Renamed" });
|
|
Packit |
f0b94e |
checkA11yFront(parent, { }, a11yDoc);
|
|
Packit |
f0b94e |
}, () => ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("button").setAttribute(
|
|
Packit |
f0b94e |
"aria-label", "Renamed")));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("Description change event");
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleFront, "description-change",
|
|
Packit |
f0b94e |
() => checkA11yFront(accessibleFront, { description: "" }),
|
|
Packit |
f0b94e |
() => ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("button").removeAttribute("aria-describedby")));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("State change event");
|
|
Packit |
f0b94e |
let expectedStates = ["unavailable", "selectable text", "opaque"];
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleFront, "states-change",
|
|
Packit |
f0b94e |
newStates => {
|
|
Packit |
f0b94e |
checkA11yFront(accessibleFront, { states: expectedStates });
|
|
Packit |
f0b94e |
SimpleTest.isDeeply(newStates, expectedStates, "States are updated");
|
|
Packit |
f0b94e |
}, () => ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("button").setAttribute("disabled", true)));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("Attributes change event");
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleFront, "attributes-change",
|
|
Packit |
f0b94e |
newAttrs => {
|
|
Packit |
f0b94e |
checkA11yFront(accessibleFront, { attributes: {
|
|
Packit |
f0b94e |
"container-live": "polite",
|
|
Packit |
f0b94e |
display: "inline-block",
|
|
Packit |
f0b94e |
"event-from-input": "false",
|
|
Packit |
f0b94e |
"explicit-name": "true",
|
|
Packit |
f0b94e |
id: "button",
|
|
Packit |
f0b94e |
live: "polite",
|
|
Packit |
f0b94e |
"margin-bottom": "0px",
|
|
Packit |
f0b94e |
"margin-left": "0px",
|
|
Packit |
f0b94e |
"margin-right": "0px",
|
|
Packit |
f0b94e |
"margin-top": "0px",
|
|
Packit |
f0b94e |
tag: "button",
|
|
Packit |
f0b94e |
"text-align": "center",
|
|
Packit |
f0b94e |
"text-indent": "0px"
|
|
Packit |
f0b94e |
}});
|
|
Packit |
f0b94e |
is(newAttrs.live, "polite", "Attributes are updated");
|
|
Packit |
f0b94e |
}, () => ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("button").setAttribute("aria-live", "polite")));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("Value change event");
|
|
Packit |
f0b94e |
checkA11yFront(accessibleSliderFront, { value: "5" });
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleSliderFront, "value-change",
|
|
Packit |
f0b94e |
() => checkA11yFront(accessibleSliderFront, { value: "6" }),
|
|
Packit |
f0b94e |
() => ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("slider").setAttribute("aria-valuenow", "6")));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
info("Reorder event");
|
|
Packit |
f0b94e |
is(accessibleSliderFront.childCount, 1, "Slider has only 1 child");
|
|
Packit |
f0b94e |
let [firstChild, ] = await accessibleSliderFront.children();
|
|
Packit |
f0b94e |
is(firstChild.indexInParent, 0, "Slider's first child has correct index in parent");
|
|
Packit |
f0b94e |
await emitA11yEvent(accessibleSliderFront, "reorder",
|
|
Packit |
f0b94e |
childCount => {
|
|
Packit |
f0b94e |
is(childCount, 2, "Child count is updated");
|
|
Packit |
f0b94e |
is(accessibleSliderFront.childCount, 2, "Child count is updated");
|
|
Packit |
f0b94e |
is(firstChild.indexInParent, 1,
|
|
Packit |
f0b94e |
"Slider's first child has an updated index in parent");
|
|
Packit |
f0b94e |
}, () => ContentTask.spawn(browser, null, () => {
|
|
Packit |
f0b94e |
let doc = content.document;
|
|
Packit |
f0b94e |
let slider = doc.getElementById("slider");
|
|
Packit |
f0b94e |
let button = doc.createElement("button");
|
|
Packit |
f0b94e |
button.innerText = "Slider button";
|
|
Packit |
f0b94e |
content.document.getElementById("slider").insertBefore(button, slider.firstChild);
|
|
Packit |
f0b94e |
}));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await emitA11yEvent(firstChild, "index-in-parent-change", indexInParent =>
|
|
Packit |
f0b94e |
is(indexInParent, 0, "Slider's first child has an updated index in parent"), () =>
|
|
Packit |
f0b94e |
ContentTask.spawn(browser, null, () =>
|
|
Packit |
f0b94e |
content.document.getElementById("slider").firstChild.remove()));
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
await accessibility.disable();
|
|
Packit |
f0b94e |
await waitForA11yShutdown();
|
|
Packit |
f0b94e |
await client.close();
|
|
Packit |
f0b94e |
gBrowser.removeCurrentTab();
|
|
Packit |
f0b94e |
});
|