/* 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 } );