/* 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";
/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });
const IMAGE =
'url("https://example.com/a11y/accessible/tests/mochitest/moz.png")';
/**
* Test CSS content replacing an element.
*/
addAccessibleTask(
`
noAlt
oneString
twoStrings
attr
attrFallback
mixed
noInitialContent
`,
async function testReplacing(browser, docAcc) {
testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
role: ROLE_HEADING,
children: [],
});
const oneString = findAccessibleChildByID(docAcc, "oneString");
testAccessibleTree(oneString, {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
const twoStrings = findAccessibleChildByID(docAcc, "twoStrings");
testAccessibleTree(twoStrings, {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
const attr = findAccessibleChildByID(docAcc, "attr");
testAccessibleTree(attr, {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
const attrFallback = findAccessibleChildByID(docAcc, "attrFallback");
testAccessibleTree(attrFallback, {
role: ROLE_HEADING,
name: "fallback",
children: [],
});
testAccessibleTree(findAccessibleChildByID(docAcc, "mixed"), {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
info("Changing oneString content style");
let changed = waitForEvent(EVENT_NAME_CHANGE, oneString);
await invokeSetStyle(
browser,
"oneString",
"content",
`${IMAGE} / "REPLACED"`
);
await changed;
testAccessibleTree(oneString, {
role: ROLE_HEADING,
name: "REPLACED",
children: [],
});
info("Changing twoStrings class to twoStrings2");
changed = waitForEvent(EVENT_NAME_CHANGE, twoStrings);
await invokeSetAttribute(browser, "twoStrings", "class", "twoStrings2");
await changed;
testAccessibleTree(twoStrings, {
role: ROLE_HEADING,
name: "REPLACED",
children: [],
});
info("Changing attr data-alt");
changed = waitForEvent(EVENT_NAME_CHANGE, attr);
await invokeSetAttribute(browser, "attr", "data-alt", "REPLACED");
await changed;
testAccessibleTree(attr, {
role: ROLE_HEADING,
name: "REPLACED",
children: [],
});
info("Changing attrFallback data-alt");
changed = waitForEvent(EVENT_NAME_CHANGE, attrFallback);
await invokeSetAttribute(browser, "attrFallback", "data-alt", "replaced");
await changed;
testAccessibleTree(attrFallback, {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
const noInitialContent = findAccessibleChildByID(
docAcc,
"noInitialContent"
);
testAccessibleTree(noInitialContent, {
role: ROLE_HEADING,
name: "noInitialContent",
children: [{ role: ROLE_TEXT_LEAF, name: "noInitialContent" }],
});
info("Add content prop to noInitialContent");
changed = waitForEvent(EVENT_NAME_CHANGE, noInitialContent);
await invokeSetStyle(
browser,
"noInitialContent",
"content",
`${IMAGE} / "replaced"`
);
await changed;
testAccessibleTree(noInitialContent, {
role: ROLE_HEADING,
name: "replaced",
children: [],
});
},
{ chrome: true, topLevel: true }
);
/**
* Test CSS image content in pseudo-elements.
*/
addAccessibleTask(
`
noAlt
inside
inside
`,
async function testImagePseudo(browser, docAcc) {
testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
role: ROLE_HEADING,
children: [{ role: ROLE_TEXT_LEAF, name: "noAlt" }],
});
const strings = findAccessibleChildByID(docAcc, "strings");
testAccessibleTree(strings, {
role: ROLE_HEADING,
name: "before inside after",
children: [
{ role: ROLE_GRAPHIC, name: "before" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
{ role: ROLE_GRAPHIC, name: "after" },
],
});
const mixed = findAccessibleChildByID(docAcc, "mixed");
testAccessibleTree(mixed, {
role: ROLE_HEADING,
name: "before inside",
children: [
{ role: ROLE_GRAPHIC, name: "before" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
info("Changing strings class to strings2");
let changed = waitForEvent(EVENT_NAME_CHANGE, strings);
await invokeSetAttribute(browser, "strings", "class", "strings2");
await changed;
testAccessibleTree(strings, {
role: ROLE_HEADING,
name: "BEFORE inside after",
children: [
{ role: ROLE_GRAPHIC, name: "BEFORE" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
{ role: ROLE_GRAPHIC, name: "after" },
],
});
info("Changing mixed data-alt");
changed = waitForEvent(EVENT_NAME_CHANGE, mixed);
await invokeSetAttribute(browser, "mixed", "data-alt", "FORE");
await changed;
testAccessibleTree(mixed, {
role: ROLE_HEADING,
name: "beFORE inside",
children: [
{ role: ROLE_GRAPHIC, name: "beFORE" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
},
{ chrome: true, topLevel: true }
);
/**
* Test CSS text content in pseudo-elements.
*/
addAccessibleTask(
`
noAlt
inside
inside
`,
async function testTextPseudo(browser, docAcc) {
testAccessibleTree(findAccessibleChildByID(docAcc, "noAlt"), {
role: ROLE_HEADING,
name: "beforenoAlt",
children: [
{ role: ROLE_STATICTEXT, name: "before" },
{ role: ROLE_TEXT_LEAF, name: "noAlt" },
],
});
const strings = findAccessibleChildByID(docAcc, "strings");
testAccessibleTree(strings, {
role: ROLE_HEADING,
name: "altinside",
children: [
{ role: ROLE_STATICTEXT, name: "alt" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
const mixed = findAccessibleChildByID(docAcc, "mixed");
testAccessibleTree(mixed, {
role: ROLE_HEADING,
name: "altinside",
children: [
{ role: ROLE_STATICTEXT, name: "alt" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
info("Changing strings class to strings2");
let changed = waitForEvent(EVENT_NAME_CHANGE, strings);
await invokeSetAttribute(browser, "strings", "class", "strings2");
await changed;
testAccessibleTree(strings, {
role: ROLE_HEADING,
name: "ALTinside",
children: [
{ role: ROLE_STATICTEXT, name: "ALT" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
info("Changing mixed data-alt");
changed = waitForEvent(EVENT_NAME_CHANGE, mixed);
await invokeSetAttribute(browser, "mixed", "data-alt", "LT");
await changed;
testAccessibleTree(mixed, {
role: ROLE_HEADING,
name: "aLTinside",
children: [
{ role: ROLE_STATICTEXT, name: "aLT" },
{ role: ROLE_TEXT_LEAF, name: "inside" },
],
});
},
{ chrome: true, topLevel: true }
);