// Copyright 2013 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.ui.CharPickerTest'); goog.setTestOnly('goog.ui.CharPickerTest'); goog.require('goog.a11y.aria'); goog.require('goog.a11y.aria.State'); goog.require('goog.dispose'); goog.require('goog.dom'); goog.require('goog.events.Event'); goog.require('goog.events.EventType'); goog.require('goog.i18n.CharPickerData'); goog.require('goog.i18n.uChar.NameFetcher'); goog.require('goog.testing.MockControl'); goog.require('goog.testing.events'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.mockmatchers'); goog.require('goog.ui.CharPicker'); goog.require('goog.ui.FlatButtonRenderer'); var charPicker, charPickerData, charPickerElement; var mockControl, charNameFetcherMock; function setUp() { mockControl = new goog.testing.MockControl(); charNameFetcherMock = mockControl.createLooseMock( goog.i18n.uChar.NameFetcher, true /* opt_ignoreUnexpectedCalls */); charPickerData = new goog.i18n.CharPickerData(); charPickerElement = goog.dom.getElement('charpicker'); charPicker = new goog.ui.CharPicker(charPickerData, charNameFetcherMock); } function tearDown() { goog.dispose(charPicker); goog.dom.removeChildren(charPickerElement); mockControl.$tearDown(); } function testAriaLabelIsUpdatedOnFocus() { var character = '←'; var characterName = 'right arrow'; charNameFetcherMock.getName(character, goog.testing.mockmatchers.isFunction) .$does(function(c, callback) { callback(characterName); }); mockControl.$replayAll(); charPicker.decorate(charPickerElement); // Get the first button elements within the grid div and override its // char attribute so the test doesn't depend on the actual grid content. var gridElement = goog.dom.getElementByClass( goog.getCssName('goog-char-picker-grid'), charPickerElement); var buttonElement = goog.dom.getElementsByClass( goog.ui.FlatButtonRenderer.CSS_CLASS, gridElement)[0]; buttonElement.setAttribute('char', character); // Trigger a focus event on the button element. goog.testing.events.fireBrowserEvent( new goog.events.Event(goog.events.EventType.FOCUS, buttonElement)); mockControl.$verifyAll(); var ariaLabel = goog.a11y.aria.getState(buttonElement, goog.a11y.aria.State.LABEL); assertEquals( 'The aria label should be updated when the button' + 'gains focus.', characterName, ariaLabel); }