/* 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(`

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( `

p
editable
`, 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"); });