// 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.NativeButtonRendererTest'); goog.setTestOnly('goog.ui.NativeButtonRendererTest'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); goog.require('goog.dom.classlist'); goog.require('goog.events'); goog.require('goog.testing.ExpectedFailures'); goog.require('goog.testing.events'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.ui.rendererasserts'); goog.require('goog.ui.Button'); goog.require('goog.ui.Component'); goog.require('goog.ui.NativeButtonRenderer'); goog.require('goog.userAgent'); var sandbox; var renderer; var expectedFailures; var button; function setUpPage() { sandbox = goog.dom.getElement('sandbox'); renderer = goog.ui.NativeButtonRenderer.getInstance(); expectedFailures = new goog.testing.ExpectedFailures(); } function setUp() { button = new goog.ui.Button('Hello', renderer); } function tearDown() { button.dispose(); goog.dom.removeChildren(sandbox); expectedFailures.handleTearDown(); } function testConstructor() { assertNotNull('Renderer must not be null', renderer); } function testGetAriaRole() { assertUndefined('ARIA role must be undefined', renderer.getAriaRole()); } function testCreateDom() { button.setTooltip('Hello, world!'); button.setValue('foo'); var element = renderer.createDom(button); assertNotNull('Element must not be null', element); assertEquals('Element must be a button', String(goog.dom.TagName.BUTTON), element.tagName); assertSameElements( 'Button element must have expected class name', ['goog-button'], goog.dom.classlist.get(element)); assertFalse('Button element must be enabled', element.disabled); assertEquals( 'Button element must have expected title', 'Hello, world!', element.title); // Expected to fail on IE. expectedFailures.expectFailureFor(goog.userAgent.IE); try { // See http://www.fourmilab.ch/fourmilog/archives/2007-03/000824.html // for a description of the problem. assertEquals( 'Button element must have expected value', 'foo', element.value); assertEquals( 'Button element must have expected contents', 'Hello', element.innerHTML); } catch (e) { expectedFailures.handleException(e); } assertFalse( 'Button must not handle its own mouse events', button.isHandleMouseEvents()); assertFalse( 'Button must not support the custom FOCUSED state', button.isSupportedState(goog.ui.Component.State.FOCUSED)); } function testCanDecorate() { sandbox.innerHTML = '\n' + '\n' + '\n' + '\n' + '\n' + '
Hello
'; assertTrue( 'Must be able to decorate \n' + ''; var element = renderer.decorate(button, goog.dom.getElement('foo')); assertEquals( 'Decorated element must be as expected', goog.dom.getElement('foo'), element); assertEquals( 'Decorated button title must have expected value', 'Hello!', button.getTooltip()); // Expected to fail on IE. expectedFailures.expectFailureFor(goog.userAgent.IE); try { // See http://www.fourmilab.ch/fourmilog/archives/2007-03/000824.html // for a description of the problem. assertEquals( 'Decorated button value must have expected value', 'bar', button.getValue()); } catch (e) { expectedFailures.handleException(e); } assertFalse( 'Button must not handle its own mouse events', button.isHandleMouseEvents()); assertFalse( 'Button must not support the custom FOCUSED state', button.isSupportedState(goog.ui.Component.State.FOCUSED)); element = renderer.decorate(button, goog.dom.getElement('disabledButton')); assertFalse('Decorated button must be disabled', button.isEnabled()); assertSameElements( 'Decorated button must have expected class names', ['goog-button', 'goog-button-disabled'], goog.dom.classlist.get(element)); // Expected to fail on IE. expectedFailures.expectFailureFor(goog.userAgent.IE); try { // See http://www.fourmilab.ch/fourmilog/archives/2007-03/000824.html // for a description of the problem. assertEquals( 'Decorated button value must have expected value', 'bah', button.getValue()); } catch (e) { expectedFailures.handleException(e); } assertFalse( 'Button must not handle its own mouse events', button.isHandleMouseEvents()); assertFalse( 'Button must not support the custom FOCUSED state', button.isSupportedState(goog.ui.Component.State.FOCUSED)); } function testInitializeDom() { var dispatchedActionCount = 0; var handleAction = function() { dispatchedActionCount++; }; goog.events.listen(button, goog.ui.Component.EventType.ACTION, handleAction); button.render(sandbox); goog.testing.events.fireClickSequence(button.getElement()); assertEquals( 'Button must have dispatched ACTION on click', 1, dispatchedActionCount); goog.events.unlisten( button, goog.ui.Component.EventType.ACTION, handleAction); } function testIsFocusable() { assertTrue('Enabled button must be focusable', renderer.isFocusable(button)); button.setEnabled(false); assertFalse( 'Disabled button must not be focusable', renderer.isFocusable(button)); } function testSetState() { button.render(sandbox); assertFalse( 'Button element must not be disabled', button.getElement().disabled); renderer.setState(button, goog.ui.Component.State.DISABLED, true); assertTrue('Button element must be disabled', button.getElement().disabled); } function testGetValue() { sandbox.innerHTML = ''; // Expected to fail on IE. expectedFailures.expectFailureFor(goog.userAgent.IE); try { // See http://www.fourmilab.ch/fourmilog/archives/2007-03/000824.html // for a description of the problem. assertEquals( 'Value must be as expected', 'blah', renderer.getValue(goog.dom.getElement('foo'))); } catch (e) { expectedFailures.handleException(e); } } function testSetValue() { button.render(sandbox); renderer.setValue(button.getElement(), 'What?'); assertEquals( 'Button must have expected value', 'What?', renderer.getValue(button.getElement())); } function testDoesntCallGetCssClassInConstructor() { goog.testing.ui.rendererasserts.assertNoGetCssClassCallsInConstructor( goog.ui.NativeButtonRenderer); }