123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- // Copyright 2008 The Closure Library Authors. All Rights Reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS-IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- goog.provide('goog.a11y.aria.AnnouncerTest');
- goog.setTestOnly('goog.a11y.aria.AnnouncerTest');
- goog.require('goog.a11y.aria');
- goog.require('goog.a11y.aria.Announcer');
- goog.require('goog.a11y.aria.LivePriority');
- goog.require('goog.a11y.aria.State');
- goog.require('goog.array');
- goog.require('goog.dom');
- goog.require('goog.dom.TagName');
- goog.require('goog.dom.iframe');
- goog.require('goog.testing.MockClock');
- goog.require('goog.testing.jsunit');
- var sandbox;
- var someDiv;
- var someSpan;
- var mockClock;
- function setUp() {
- sandbox = goog.dom.getElement('sandbox');
- someDiv = goog.dom.createDom(goog.dom.TagName.DIV, {id: 'someDiv'}, 'DIV');
- someSpan =
- goog.dom.createDom(goog.dom.TagName.SPAN, {id: 'someSpan'}, 'SPAN');
- sandbox.appendChild(someDiv);
- someDiv.appendChild(someSpan);
- mockClock = new goog.testing.MockClock(true);
- }
- function tearDown() {
- goog.dom.removeChildren(sandbox);
- someDiv = null;
- someSpan = null;
- goog.dispose(mockClock);
- }
- function testAnnouncerAndDispose() {
- var text = 'test content';
- var announcer = new goog.a11y.aria.Announcer(goog.dom.getDomHelper());
- announcer.say(text);
- checkLiveRegionContains(text, 'polite');
- goog.dispose(announcer);
- }
- function testAnnouncerTwice() {
- var text = 'test content1';
- var text2 = 'test content2';
- var announcer = new goog.a11y.aria.Announcer(goog.dom.getDomHelper());
- announcer.say(text);
- announcer.say(text2);
- checkLiveRegionContains(text2, 'polite');
- goog.dispose(announcer);
- }
- function testAnnouncerTwiceSameMessage() {
- var text = 'test content';
- var announcer = new goog.a11y.aria.Announcer(goog.dom.getDomHelper());
- announcer.say(text);
- var firstLiveRegion = getLiveRegion('polite');
- announcer.say(text, undefined);
- var secondLiveRegion = getLiveRegion('polite');
- assertEquals(firstLiveRegion, secondLiveRegion);
- checkLiveRegionContains(text, 'polite');
- goog.dispose(announcer);
- }
- function testAnnouncerAssertive() {
- var text = 'test content';
- var announcer = new goog.a11y.aria.Announcer(goog.dom.getDomHelper());
- announcer.say(text, goog.a11y.aria.LivePriority.ASSERTIVE);
- checkLiveRegionContains(text, 'assertive');
- goog.dispose(announcer);
- }
- function testAnnouncerInIframe() {
- var text = 'test content';
- var frame = goog.dom.iframe.createWithContent(sandbox);
- var helper =
- goog.dom.getDomHelper(goog.dom.getFrameContentDocument(frame).body);
- var announcer = new goog.a11y.aria.Announcer(helper);
- announcer.say(text, 'polite', helper);
- checkLiveRegionContains(text, 'polite', helper);
- goog.dispose(announcer);
- }
- function testAnnouncerWithAriaHidden() {
- var text = 'test content1';
- var text2 = 'test content2';
- var announcer = new goog.a11y.aria.Announcer(goog.dom.getDomHelper());
- announcer.say(text);
- // Set aria-hidden attribute on the live region (simulates a modal dialog
- // being opened).
- var liveRegion = getLiveRegion('polite');
- goog.a11y.aria.setState(liveRegion, goog.a11y.aria.State.HIDDEN, true);
- // Announce a new message and make sure that the aria-hidden was removed.
- announcer.say(text2);
- checkLiveRegionContains(text2, 'polite');
- assertEquals(
- '', goog.a11y.aria.getState(liveRegion, goog.a11y.aria.State.HIDDEN));
- goog.dispose(announcer);
- }
- function getLiveRegion(priority, opt_domHelper) {
- var dom = opt_domHelper || goog.dom.getDomHelper();
- var divs = dom.getElementsByTagNameAndClass(goog.dom.TagName.DIV, null);
- var liveRegions = [];
- goog.array.forEach(divs, function(div) {
- if (goog.a11y.aria.getState(div, 'live') == priority) {
- liveRegions.push(div);
- }
- });
- assertEquals(1, liveRegions.length);
- return liveRegions[0];
- }
- function checkLiveRegionContains(text, priority, opt_domHelper) {
- var liveRegion = getLiveRegion(priority, opt_domHelper);
- mockClock.tick(1);
- assertEquals(text, goog.dom.getTextContent(liveRegion));
- }
|