57 lines
2.1 KiB
JavaScript
57 lines
2.1 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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);
|