text: // 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);
  }
  