1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/* 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);
});
|