// 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.MenuItemRendererTest'); goog.setTestOnly('goog.ui.MenuItemRendererTest'); 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.classlist'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.ui.rendererasserts'); goog.require('goog.ui.Component'); goog.require('goog.ui.MenuItem'); goog.require('goog.ui.MenuItemRenderer'); var sandbox; var item, renderer; function setUp() { sandbox = goog.dom.getElement('sandbox'); item = new goog.ui.MenuItem('Hello'); renderer = goog.ui.MenuItemRenderer.getInstance(); } function tearDown() { item.dispose(); goog.dom.removeChildren(sandbox); } function testMenuItemRenderer() { assertNotNull('Instance must not be null', renderer); assertEquals( 'Singleton getter must always return same instance', renderer, goog.ui.MenuItemRenderer.getInstance()); } function testCreateDom() { var element = renderer.createDom(item); assertNotNull('Element must not be null', element); assertSameElements( 'Element must have the expected class names', ['goog-menuitem'], goog.dom.classlist.get(element)); assertEquals( 'Element must have exactly one child element', 1, element.childNodes.length); assertHTMLEquals( 'Child element must have the expected structure', '
', element.innerHTML); } function testCreateDomWithHoverState() { item.setHighlighted(true); var element = renderer.createDom(item); assertSameElements( 'Element must have the expected class names', ['goog-menuitem', 'goog-menuitem-highlight'], goog.dom.classlist.get(element)); } function testCreateDomForCheckableItem() { item.setSupportedState(goog.ui.Component.State.CHECKED, true); item.render(); var element = item.getElement(); assertNotNull(element); assertSameElements( 'Element must have the expected class names', ['goog-menuitem', 'goog-option'], goog.dom.classlist.get(element)); assertEquals( 'Element must have ARIA role menuitemcheckbox', goog.a11y.aria.Role.MENU_ITEM_CHECKBOX, goog.a11y.aria.getRole(element)); item.setChecked(true); assertTrue('Item must be checked', item.isChecked()); assertSameElements( 'Checked item must have the expected class names', ['goog-menuitem', 'goog-option', 'goog-option-selected'], goog.dom.classlist.get(element)); assertEquals( 'Item must have checked ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.CHECKED)); } function testCreateUpdateDomForCheckableItem() { // Render the item first, then update its supported states to include CHECKED. item.render(); var element = item.getElement(); item.setSupportedState(goog.ui.Component.State.CHECKED, true); assertNotNull(element); assertSameElements( 'Element must have the expected class names', ['goog-menuitem', 'goog-option'], goog.dom.classlist.get(element)); assertEquals( 'Element must have ARIA role menuitemcheckbox', goog.a11y.aria.Role.MENU_ITEM_CHECKBOX, goog.a11y.aria.getRole(element)); // Now actually check the item. item.setChecked(true); assertTrue('Item must be checked', item.isChecked()); assertSameElements( 'Checked item must have the expected class names', ['goog-menuitem', 'goog-option', 'goog-option-selected'], goog.dom.classlist.get(element)); assertEquals( 'Item must have checked ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.CHECKED)); } function testCreateDomForSelectableItem() { item.setSupportedState(goog.ui.Component.State.SELECTED, true); item.render(); var element = item.getElement(); assertNotNull(element); assertSameElements( 'Element must have the expected class names', ['goog-menuitem', 'goog-option'], goog.dom.classlist.get(element)); assertEquals( 'Element must have ARIA role menuitemradio', goog.a11y.aria.Role.MENU_ITEM_RADIO, goog.a11y.aria.getRole(element)); item.setSelected(true); assertTrue('Item must be selected', item.isSelected()); assertSameElements( 'Selected item must have the expected class names', ['goog-menuitem', 'goog-option', 'goog-option-selected'], goog.dom.classlist.get(element)); assertEquals( 'Item must have selected ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.CHECKED)); } function testCreateUpdateDomForSelectableItem() { // Render the item first, then update its supported states to include // SELECTED. item.render(); var element = item.getElement(); item.setSupportedState(goog.ui.Component.State.SELECTED, true); assertNotNull(element); assertSameElements( 'Element must have the expected class names', ['goog-menuitem', 'goog-option'], goog.dom.classlist.get(element)); assertEquals( 'Element must have ARIA role menuitemradio', goog.a11y.aria.Role.MENU_ITEM_RADIO, goog.a11y.aria.getRole(element)); // Now actually select the item. item.setSelected(true); assertTrue('Item must be selected', item.isSelected()); assertSameElements( 'Selected item must have the expected class names', ['goog-menuitem', 'goog-option', 'goog-option-selected'], goog.dom.classlist.get(element)); assertEquals( 'Item must have selected ARIA state', 'true', goog.a11y.aria.getState(element, goog.a11y.aria.State.CHECKED)); } function testGetContentElement() { assertNull( 'Content element must be the null initially', item.getContentElement()); item.createDom(); assertEquals( 'Content element must be the element\'s first child', item.getElement().firstChild, item.getContentElement()); } function testDecorate() { sandbox.innerHTML = '