UNPKG

sku-pg

Version:

Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!

224 lines (195 loc) 8.83 kB
<!DOCTYPE html> <html> <!-- Copyright 2008 The Closure Library Authors. All Rights Reserved. Use of this source code is governed by the Apache License, Version 2.0. See the COPYING file for details. --> <!-- --> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Closure Unit Tests - goog.ui.ButtonRenderer</title> <script src="../base.js"></script> <script> goog.require('goog.a11y.aria'); goog.require('goog.a11y.aria.Role'); goog.require('goog.a11y.aria.State'); goog.require('goog.dom.classes'); goog.require('goog.style'); 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'); </script> </head> <body> <div id="sandbox"></div> <script> var button, buttonRenderer, testRenderer; var sandbox = goog.dom.getElement('sandbox'); var 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', 'DIV', element.tagName); assertHTMLEquals('Element must have expected structure', '<div class="goog-button">Hello</div>', 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.classes.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 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); 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)); assertEquals('button\'s aria-selected attribute must be empty', '', goog.a11y.aria.getState(element, goog.a11y.aria.State.SELECTED)); } function testAriaDisabled() { button.setEnabled(false); var element = buttonRenderer.createDom(button); assertEquals('button\'s aria-disabled attribute must be true', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.DISABLED)); } function testDecorate() { sandbox.innerHTML = '<div id="foo">Foo</div>\n' + '<div id="bar" title="Hello, world!">Bar</div>\n' + '<div id="toggle">Toggle</div>'; var foo = new goog.ui.Button(null, buttonRenderer); foo.decorate(goog.dom.getElement('foo')); assertEquals('foo\'s tooltip must be the empty string', '', foo.getTooltip()); foo.dispose(); var bar = new goog.ui.Button(null, buttonRenderer); bar.decorate(goog.dom.getElement('bar')); assertEquals('bar\'s tooltip must be initialized', 'Hello, world!', bar.getTooltip()); bar.dispose(); var toggle = new goog.ui.Button(null, buttonRenderer); toggle.setSupportedState(goog.ui.Component.State.CHECKED, true); var element = goog.dom.getElement('toggle'); assertNotNull(element); toggle.decorate(element); assertEquals('toggle\'s aria-pressed attribute must be false', 'false', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); toggle.dispose(); } function testCollapse() { buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.START); assertSameElements('Button should have class to collapse start', ['goog-button-collapse-left'], button.getExtraClassNames()); buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.END); assertSameElements('Button should have class to collapse end', ['goog-button-collapse-right'], button.getExtraClassNames()); buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.BOTH); assertSameElements('Button should have classes to collapse both', ['goog-button-collapse-left', 'goog-button-collapse-right'], button.getExtraClassNames()); } function testCollapseRtl() { button.setRightToLeft(true); buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.START); assertSameElements('Button should have class to collapse start', ['goog-button-collapse-right'], button.getExtraClassNames()); buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.END); assertSameElements('Button should have class to collapse end', ['goog-button-collapse-left'], button.getExtraClassNames()); buttonRenderer.setCollapsed(button, goog.ui.ButtonSide.BOTH); assertSameElements('Button should have classes to collapse both', ['goog-button-collapse-left', 'goog-button-collapse-right'], button.getExtraClassNames()); } function testCollapseWithStructuralClass() { testRenderer.setCollapsed(button, goog.ui.ButtonSide.BOTH); assertSameElements('Should use structural class for collapse classes', ['goog-base-collapse-left', 'goog-base-collapse-right'], button.getExtraClassNames()); } function testUpdateAriaState() { var element = buttonRenderer.createDom(button); buttonRenderer.updateAriaState(element, goog.ui.Component.State.CHECKED, true); assertEquals('Button must have pressed ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); // Test for updating a state other than CHECKED buttonRenderer.updateAriaState(element, goog.ui.Component.State.DISABLED, true); assertEquals('Button must have disabled ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.DISABLED)); buttonRenderer.updateAriaState(element, goog.ui.Component.State.CHECKED, false); assertEquals('Control must no longer have pressed ARIA state', 'false', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); buttonRenderer.updateAriaState(element, goog.ui.Component.State.SELECTED, true); assertEquals('Button must have pressed ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.PRESSED)); } function testDoesntCallGetCssClassInConstructor() { goog.testing.ui.rendererasserts. assertNoGetCssClassCallsInConstructor(goog.ui.ButtonRenderer); } </script> </body> </html>