forked from mirrors/gecko-dev
74 lines
2.4 KiB
JavaScript
74 lines
2.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
async function waitForFocusAfterKey(ariaFocus, element, key, accel = false) {
|
|
let event = ariaFocus ? "AriaFocus" : "focus";
|
|
let friendlyKey = key;
|
|
if (accel) {
|
|
friendlyKey = "Accel+" + key;
|
|
}
|
|
key = "KEY_" + key;
|
|
let focused = BrowserTestUtils.waitForEvent(element, event);
|
|
EventUtils.synthesizeKey(key, { accelKey: accel });
|
|
await focused;
|
|
ok(true, element.label + " got " + event + " after " + friendlyKey);
|
|
}
|
|
|
|
function getA11yDescription(element) {
|
|
let descId = element.getAttribute("aria-describedby");
|
|
if (!descId) {
|
|
return null;
|
|
}
|
|
let descElem = document.getElementById(descId);
|
|
if (!descElem) {
|
|
return null;
|
|
}
|
|
return descElem.textContent;
|
|
}
|
|
|
|
add_task(async function testTabA11yDescription() {
|
|
const tab1 = await addTab("http://mochi.test:8888/1", { userContextId: 1 });
|
|
tab1.label = "tab1";
|
|
const context1 = ContextualIdentityService.getUserContextLabel(1);
|
|
const tab2 = await addTab("http://mochi.test:8888/2", { userContextId: 2 });
|
|
tab2.label = "tab2";
|
|
const context2 = ContextualIdentityService.getUserContextLabel(2);
|
|
|
|
await BrowserTestUtils.switchTab(gBrowser, tab1);
|
|
let focused = BrowserTestUtils.waitForEvent(tab1, "focus");
|
|
tab1.focus();
|
|
await focused;
|
|
ok(true, "tab1 initially focused");
|
|
ok(
|
|
getA11yDescription(tab1).endsWith(context1),
|
|
"tab1 has correct a11y description"
|
|
);
|
|
ok(!getA11yDescription(tab2), "tab2 has no a11y description");
|
|
|
|
info("Moving DOM focus to tab2");
|
|
await waitForFocusAfterKey(false, tab2, "ArrowRight");
|
|
ok(
|
|
getA11yDescription(tab2).endsWith(context2),
|
|
"tab2 has correct a11y description"
|
|
);
|
|
ok(!getA11yDescription(tab1), "tab1 has no a11y description");
|
|
|
|
info("Moving ARIA focus to tab1");
|
|
await waitForFocusAfterKey(true, tab1, "ArrowLeft", true);
|
|
ok(
|
|
getA11yDescription(tab1).endsWith(context1),
|
|
"tab1 has correct a11y description"
|
|
);
|
|
ok(!getA11yDescription(tab2), "tab2 has no a11y description");
|
|
|
|
info("Removing ARIA focus (reverting to DOM focus)");
|
|
await waitForFocusAfterKey(true, tab2, "ArrowRight");
|
|
ok(
|
|
getA11yDescription(tab2).endsWith(context2),
|
|
"tab2 has correct a11y description"
|
|
);
|
|
ok(!getA11yDescription(tab1), "tab1 has no a11y description");
|
|
|
|
BrowserTestUtils.removeTab(tab1);
|
|
BrowserTestUtils.removeTab(tab2);
|
|
});
|