Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* import-globals-from ../../mochitest/role.js */
loadScripts({ name: "role.js", dir: MOCHITESTS_DIR });
// Check that the browser A11yUtils.announce() function works correctly.
// Note that this does not use mozilla::a11y::Accessible::Announce and a11y
// announcement events, as these aren't yet supported on desktop.
async function runTests() {
const alert = document.getElementById("a11y-announcement");
let alerted = waitForEvent(EVENT_ALERT, alert);
A11yUtils.announce({ raw: "first" });
let event = await alerted;
const alertAcc = event.accessible;
is(alertAcc.role, ROLE_ALERT);
ok(!alertAcc.name);
is(alertAcc.childCount, 1);
is(alertAcc.firstChild.name, "first");
alerted = waitForEvent(EVENT_ALERT, alertAcc);
A11yUtils.announce({ raw: "second" });
event = await alerted;
ok(!alertAcc.name);
is(alertAcc.childCount, 1);
is(alertAcc.firstChild.name, "second");
info("Testing Fluent message");
// We need a simple Fluent message here without arguments or attributes.
const fluentId = "search-one-offs-with-title";
const fluentMessage = await document.l10n.formatValue(fluentId);
alerted = waitForEvent(EVENT_ALERT, alertAcc);
A11yUtils.announce({ id: fluentId });
event = await alerted;
ok(!alertAcc.name);
is(alertAcc.childCount, 1);
is(alertAcc.firstChild.name, fluentMessage);
info("Ensuring Fluent message is cancelled if announce is re-entered");
alerted = waitForEvent(EVENT_ALERT, alertAcc);
// This call runs async.
let asyncAnnounce = A11yUtils.announce({ id: fluentId });
// Before the async call finishes, call announce again.
A11yUtils.announce({ raw: "third" });
// Wait for the async call to complete.
await asyncAnnounce;
event = await alerted;
ok(!alertAcc.name);
is(alertAcc.childCount, 1);
// The async call should have been cancelled. If it wasn't, we would get
// fluentMessage here instead of "third".
is(alertAcc.firstChild.name, "third");
}
addAccessibleTask(``, runTests);