Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: artifact OR headless OR os != 'win'
- Manifest: accessible/tests/browser/windows/ia2/browser.toml
/* 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";
/**
* Test that IA2_TEXT_BOUNDARY_CHAR moves by cluster.
*/
addAccessibleTask(`<p id="cluster">a🤦♂️c`, async function testChar() {
await runPython(`
doc = getDocIa2()
global cluster
cluster = findIa2ByDomId(doc, "cluster")
cluster = cluster.QueryInterface(IAccessibleText)
`);
SimpleTest.isDeeply(
await runPython(`cluster.textAtOffset(0, IA2_TEXT_BOUNDARY_CHAR)`),
[0, 1, "a"],
"textAtOffset at 0 for CHAR correct"
);
SimpleTest.isDeeply(
await runPython(`cluster.textAtOffset(1, IA2_TEXT_BOUNDARY_CHAR)`),
[1, 6, "🤦♂️"],
"textAtOffset at 1 for CHAR correct"
);
SimpleTest.isDeeply(
await runPython(`cluster.textAtOffset(5, IA2_TEXT_BOUNDARY_CHAR)`),
[1, 6, "🤦♂️"],
"textAtOffset at 5 for CHAR correct"
);
SimpleTest.isDeeply(
await runPython(`cluster.textAtOffset(6, IA2_TEXT_BOUNDARY_CHAR)`),
[6, 7, "c"],
"textAtOffset at 6 for CHAR correct"
);
});
/**
* Test that the text-model:a1 object attribute is exposed on editable text controls.
*/
addAccessibleTask(
`
<button id="button"></button>
<input id="input">
<textarea id="textarea"></textarea>
<div id="div">p</div>
<div id="editable" contenteditable>editable</div>
`,
async function testTextModel() {
await runPython(`
global doc
doc = getDocIa2()
`);
async function testTextModelFor(id, hasTextModel) {
const attrs = await runPython(`
acc = findIa2ByDomId(doc, "${id}")
return acc.attributes
`);
if (hasTextModel) {
ok(attrs.includes("text-model:a1;"), `${id} has text-model:a1`);
} else {
ok(
!attrs.includes("text-model:a1;"),
`${id} does not have text-model:a1`
);
}
}
await testTextModelFor("button", false);
await testTextModelFor("input", true);
await testTextModelFor("textarea", true);
await testTextModelFor("div", false);
await testTextModelFor("editable", true);
},
{ chrome: true, topLevel: true }
);
/**
* Test that the text-model:a1 object attribute is exposed on the address bar.
*/
addAccessibleTask(``, async function testAddressBarTextModel() {
// We don't want to search the entire Firefox UI for the address bar
// IAccessible2 object. However, we can get it easily by focusing it and
// retrieving the target of the focus event.
info("Focusing address bar");
await runPython(`
global focused
focused = WaitForWinEvent(EVENT_OBJECT_FOCUS, "urlbar-input")
`);
gURLBar.inputField.focus();
await runPython(`
global urlBar
urlBar = focused.wait().getIa2()
`);
ok(true, "Address bar got focus");
const attrs = await runPython(`urlBar.attributes`);
ok(attrs.includes("text-model:a1;"), "Address bar includes text-model:a1");
});