// 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.ui.ButtonRendererTest'); goog.setTestOnly('goog.ui.ButtonRendererTest'); goog.require('goog.a11y.aria'); goog.require('goog.a11y.aria.Role'); goog.require('goog.a11y.aria.State'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.dom.classlist'); goog.require('goog.testing.ExpectedFailures'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.ui.rendererasserts'); goog.require('goog.ui.Button'); goog.require('goog.ui.ButtonRenderer'); goog.require('goog.ui.ButtonSide'); goog.require('goog.ui.Component'); goog.require('goog.ui.ControlRenderer'); var button, buttonRenderer, testRenderer; var sandbox; var expectedFailures; function setUpPage() { sandbox = goog.dom.getElement('sandbox'); expectedFailures = new goog.testing.ExpectedFailures(); } /** * A subclass of ButtonRenderer that overrides * {@code getStructuralCssClass} for testing purposes. * @constructor * @extends {goog.ui.ControlRenderer} */ function TestRenderer() { goog.ui.ButtonRenderer.call(this); } goog.inherits(TestRenderer, goog.ui.ButtonRenderer); goog.addSingletonGetter(TestRenderer); /** @override */ TestRenderer.prototype.getStructuralCssClass = function() { return 'goog-base'; }; function setUp() { buttonRenderer = goog.ui.ButtonRenderer.getInstance(); button = new goog.ui.Button('Hello', buttonRenderer); testRenderer = TestRenderer.getInstance(); } function tearDown() { button.dispose(); goog.dom.removeChildren(sandbox); expectedFailures.handleTearDown(); } function testConstructor() { assertNotNull( 'ButtonRenderer singleton instance must not be null', buttonRenderer); } function testGetAriaRole() { assertEquals( 'ButtonRenderer\'s ARIA role must have expected value', goog.a11y.aria.Role.BUTTON, buttonRenderer.getAriaRole()); } function testCreateDom() { var element = buttonRenderer.createDom(button); assertNotNull('Element must not be null', element); assertEquals('Element must be a DIV', String(goog.dom.TagName.DIV), element.tagName); assertHTMLEquals( 'Element must have expected structure', '
', goog.dom.getOuterHtml(element)); button.setTooltip('Hello, world!'); button.setValue('foo'); element = buttonRenderer.createDom(button); assertNotNull('Element must not be null', element); assertEquals('Element must be a DIV', 'DIV', element.tagName); assertSameElements( 'Element must have expected class name', ['goog-button'], goog.dom.classlist.get(element)); assertEquals( 'Element must have expected title', 'Hello, world!', element.title); assertUndefined('Element must have no value', element.value); assertEquals( 'Element must have expected contents', 'Hello', element.innerHTML); button.setSupportedState(goog.ui.Component.State.CHECKED, true); var element = buttonRenderer.createDom(button); assertEquals( 'button\'s aria-pressed attribute must be false', 'false', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); } function testSetTooltip() { button.createDom(); button.setTooltip('tooltip'); assertEquals('tooltip', button.getElement().title); button.setTooltip(''); assertEquals('', button.getElement().title); // IE7 doesn't support hasAttribute. if (button.getElement().hasAttribute) { assertFalse(button.getElement().hasAttribute('title')); } } function testCreateDomAriaState() { button.setSupportedState(goog.ui.Component.State.CHECKED, true); button.setChecked(true); var element = buttonRenderer.createDom(button); assertEquals( 'button\'s aria-pressed attribute must be true', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); } function testUseAriaPressedForSelected() { button.setSupportedState(goog.ui.Component.State.SELECTED, true); button.setSelected(true); button.setRenderer(buttonRenderer); button.render(); var element = button.getElement(); assertEquals( 'button\'s aria-pressed attribute must be true', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); assertEquals( 'button\'s aria-selected attribute must be empty', '', goog.a11y.aria.getState(element, goog.a11y.aria.State.SELECTED)); } function testAriaDisabled() { button.setEnabled(false); button.setRenderer(buttonRenderer); button.render(); var element = button.getElement(); assertEquals( 'button\'s aria-disabled attribute must be true', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.DISABLED)); } function testDecorate() { sandbox.innerHTML = '