155 lines
4.4 KiB
JavaScript
155 lines
4.4 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";
|
|
|
|
const {
|
|
accessibility: { AUDIT_TYPE, ISSUE_TYPE, SCORES },
|
|
} = require("resource://devtools/shared/constants.js");
|
|
|
|
// Checks for the AccessibleWalkerActor audit.
|
|
add_task(async function () {
|
|
const { target, a11yWalker, parentAccessibility } =
|
|
await initAccessibilityFrontsForUrl(
|
|
MAIN_DOMAIN + "doc_accessibility_audit.html"
|
|
);
|
|
|
|
const accessibles = [
|
|
{
|
|
name: "",
|
|
role: "document",
|
|
childCount: 2,
|
|
checks: {
|
|
[AUDIT_TYPE.CONTRAST]: null,
|
|
[AUDIT_TYPE.KEYBOARD]: null,
|
|
[AUDIT_TYPE.TEXT_LABEL]: {
|
|
score: SCORES.FAIL,
|
|
issue: ISSUE_TYPE.DOCUMENT_NO_TITLE,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name:
|
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " +
|
|
"eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
|
role: "paragraph",
|
|
childCount: 1,
|
|
checks: {
|
|
[AUDIT_TYPE.CONTRAST]: null,
|
|
[AUDIT_TYPE.KEYBOARD]: null,
|
|
[AUDIT_TYPE.TEXT_LABEL]: null,
|
|
},
|
|
},
|
|
{
|
|
name:
|
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do " +
|
|
"eiusmod tempor incididunt ut labore et dolore magna aliqua.",
|
|
role: "text leaf",
|
|
childCount: 0,
|
|
checks: {
|
|
[AUDIT_TYPE.CONTRAST]: {
|
|
value: 4.0,
|
|
color: [255, 0, 0, 1],
|
|
backgroundColor: [255, 255, 255, 1],
|
|
isLargeText: false,
|
|
score: SCORES.FAIL,
|
|
},
|
|
[AUDIT_TYPE.KEYBOARD]: null,
|
|
[AUDIT_TYPE.TEXT_LABEL]: null,
|
|
},
|
|
},
|
|
{
|
|
name: "",
|
|
role: "paragraph",
|
|
childCount: 1,
|
|
checks: {
|
|
[AUDIT_TYPE.CONTRAST]: null,
|
|
[AUDIT_TYPE.KEYBOARD]: null,
|
|
[AUDIT_TYPE.TEXT_LABEL]: null,
|
|
},
|
|
},
|
|
{
|
|
name: "Accessible Paragraph",
|
|
role: "text leaf",
|
|
childCount: 0,
|
|
checks: {
|
|
[AUDIT_TYPE.CONTRAST]: {
|
|
value: 4.0,
|
|
color: [255, 0, 0, 1],
|
|
backgroundColor: [255, 255, 255, 1],
|
|
isLargeText: false,
|
|
score: SCORES.FAIL,
|
|
},
|
|
[AUDIT_TYPE.KEYBOARD]: null,
|
|
[AUDIT_TYPE.TEXT_LABEL]: null,
|
|
},
|
|
},
|
|
];
|
|
const total = accessibles.length;
|
|
const auditProgress = [
|
|
{ total, percentage: 20, completed: 1 },
|
|
{ total, percentage: 40, completed: 2 },
|
|
{ total, percentage: 60, completed: 3 },
|
|
{ total, percentage: 80, completed: 4 },
|
|
{ total, percentage: 100, completed: 5 },
|
|
];
|
|
|
|
function findAccessible(name, role) {
|
|
return accessibles.find(
|
|
accessible => accessible.name === name && accessible.role === role
|
|
);
|
|
}
|
|
|
|
async function checkWalkerAudit(walker, expectedSize, options) {
|
|
info("Checking AccessibleWalker audit functionality");
|
|
const expectedProgress = Array.from(auditProgress);
|
|
const ancestries = await new Promise((resolve, reject) => {
|
|
const auditEventHandler = ({ type, ancestries: response, progress }) => {
|
|
switch (type) {
|
|
case "error":
|
|
walker.off("audit-event", auditEventHandler);
|
|
reject();
|
|
break;
|
|
case "completed":
|
|
walker.off("audit-event", auditEventHandler);
|
|
resolve(response);
|
|
is(expectedProgress.length, 0, "All progress events fired");
|
|
break;
|
|
case "progress":
|
|
SimpleTest.isDeeply(
|
|
progress,
|
|
expectedProgress.shift(),
|
|
"Progress data is correct"
|
|
);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
};
|
|
|
|
walker.on("audit-event", auditEventHandler);
|
|
walker.startAudit(options);
|
|
});
|
|
|
|
is(ancestries.length, expectedSize, "The size of ancestries is correct");
|
|
for (const ancestry of ancestries) {
|
|
for (const { accessible, children } of ancestry) {
|
|
checkA11yFront(
|
|
accessible,
|
|
findAccessible(accessibles.name, accessibles.role)
|
|
);
|
|
for (const child of children) {
|
|
checkA11yFront(child, findAccessible(child.name, child.role));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
await checkWalkerAudit(a11yWalker, 3);
|
|
await checkWalkerAudit(a11yWalker, 2, { types: [AUDIT_TYPE.CONTRAST] });
|
|
|
|
await waitForA11yShutdown(parentAccessibility);
|
|
await target.destroy();
|
|
gBrowser.removeCurrentTab();
|
|
});
|