Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
add_task(async function test_richlistbox_keyboard() {
await SpecialPowers.pushPrefEnv({ set: [["accessibility.tabfocus", 7]] });
await BrowserTestUtils.withNewTab("about:about", browser => {
let document = browser.contentDocument;
let box = document.createXULElement("richlistbox");
function checkTabIndices(selectedLine) {
for (let button of box.querySelectorAll(`.line${selectedLine} button`)) {
is(
button.tabIndex,
0,
`Should have ensured buttons inside selected line ${selectedLine} are focusable`
);
}
for (let otherButton of box.querySelectorAll(
`richlistitem:not(.line${selectedLine}) button`
)) {
is(
otherButton.tabIndex,
-1,
`Should have ensured buttons outside selected line ${selectedLine} are not focusable`
);
}
}
let poem = `I wandered lonely as a cloud
That floats on high o'er vales and hills
When all at once I saw a crowd
A host, of golden daffodils;
Beside the lake, beneath the trees,
Fluttering and dancing in the breeze.`;
let items = poem.split("\n").map((line, index) => {
let item = document.createXULElement("richlistitem");
item.className = `line${index + 1}`;
let button1 = document.createXULElement("button");
button1.textContent = "Like";
let button2 = document.createXULElement("button");
button2.textContent = "Subscribe";
item.append(line.trim(), button1, button2);
return item;
});
box.append(...items);
document.body.prepend(box);
box.focus();
box.getBoundingClientRect(); // force a flush
box.selectedItem = box.firstChild;
checkTabIndices(1);
EventUtils.synthesizeKey("VK_DOWN", {}, document.defaultView);
is(
box.selectedItem.className,
"line2",
"Should have moved selection to the next line."
);
checkTabIndices(2);
EventUtils.synthesizeKey("VK_TAB", {}, document.defaultView);
is(
document.activeElement,
box.selectedItem.querySelector("button"),
"Initial button gets focus in the selected list item."
);
EventUtils.synthesizeKey("VK_UP", {}, document.defaultView);
checkTabIndices(1);
is(
document.activeElement,
box.selectedItem.querySelector("button"),
"Initial button gets focus in the selected list item when moving up with arrow key."
);
EventUtils.synthesizeKey("VK_DOWN", {}, document.defaultView);
checkTabIndices(2);
is(
document.activeElement,
box.selectedItem.querySelector("button"),
"Initial button gets focus in the selected list item when moving down with arrow key."
);
});
});