All Downloads are FREE. Search and download functionalities are using the official Maven repository.

goog.ui.menubuttonrenderer_test.js Maven / Gradle / Ivy

// 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.MenuButtonRendererTest');
goog.setTestOnly('goog.ui.MenuButtonRendererTest');

goog.require('goog.a11y.aria');
goog.require('goog.a11y.aria.State');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('goog.dom.classlist');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.ui.rendererasserts');
goog.require('goog.ui.MenuButton');
goog.require('goog.ui.MenuButtonRenderer');
goog.require('goog.userAgent');

var decoratedButton;
var renderedButton;
var savedRootTree;

function setUp() {
  savedRootTree = goog.dom.getElement('root').cloneNode(true);
  decoratedButton = null;
  renderedButton = null;
}

function tearDown() {
  if (decoratedButton) {
    decoratedButton.dispose();
  }

  if (renderedButton) {
    renderedButton.dispose();
  }

  var root = goog.dom.getElement('root');
  root.parentNode.replaceChild(savedRootTree, root);
}

function testRendererWithTextContent() {
  renderedButton = new goog.ui.MenuButton('Foo');
  renderOnParent(renderedButton);
  checkButtonCaption(renderedButton);
  checkAriaState(renderedButton);

  decoratedButton = new goog.ui.MenuButton();
  decorateDemoButton(decoratedButton);
  checkButtonCaption(decoratedButton);
  checkAriaState(decoratedButton);

  assertButtonsEqual();
}

function testRendererWithNodeContent() {
  renderedButton = new goog.ui.MenuButton(
      goog.dom.createDom(goog.dom.TagName.DIV, null, 'Foo'));
  renderOnParent(renderedButton);

  var contentEl = renderedButton.getContentElement();
  if (goog.userAgent.IE || goog.userAgent.OPERA) {
    assertHTMLEquals('
Foo
', contentEl.innerHTML); } else { assertHTMLEquals('
Foo
', contentEl.innerHTML); } assertTrue(hasInlineBlock(contentEl)); } function testSetContent() { renderedButton = new goog.ui.MenuButton(); renderOnParent(renderedButton); var contentEl = renderedButton.getContentElement(); assertHTMLEquals('', contentEl.innerHTML); renderedButton.setContent('Foo'); contentEl = renderedButton.getContentElement(); assertHTMLEquals('Foo', contentEl.innerHTML); assertTrue(hasInlineBlock(contentEl)); renderedButton.setContent( goog.dom.createDom(goog.dom.TagName.DIV, null, 'Bar')); contentEl = renderedButton.getContentElement(); assertHTMLEquals('
Bar
', contentEl.innerHTML); renderedButton.setContent('Foo'); contentEl = renderedButton.getContentElement(); assertHTMLEquals('Foo', contentEl.innerHTML); } function assertButtonsEqual() { assertHTMLEquals( 'Rendered button and decorated button produced different HTML!', renderedButton.getElement().innerHTML, decoratedButton.getElement().innerHTML); } /** * Render the given button as a child of 'parent'. * @param {goog.ui.Button} button A button with content 'Foo'. */ function renderOnParent(button) { button.render(goog.dom.getElement('parent')); } /** * Decaorate the button with id 'button'. * @param {goog.ui.Button} button A button with no content. */ function decorateDemoButton(button) { button.decorate(goog.dom.getElement('decoratedButton')); } /** * Verify that the button's caption is never the direct * child of an inline-block element. * @param {goog.ui.Button} button A button. */ function checkButtonCaption(button) { var contentElement = button.getContentElement(); assertEquals('Foo', contentElement.innerHTML); assertTrue(hasInlineBlock(contentElement)); assert(hasInlineBlock(contentElement.parentNode)); button.setContent('Bar'); contentElement = button.getContentElement(); assertEquals('Bar', contentElement.innerHTML); assertTrue(hasInlineBlock(contentElement)); assert(hasInlineBlock(contentElement.parentNode)); } /** * Verify that the menu button has the correct ARIA attributes * @param {goog.ui.Button} button A button. */ function checkAriaState(button) { assertEquals( 'menu buttons should have default aria-expanded == false', 'false', goog.a11y.aria.getState( button.getElement(), goog.a11y.aria.State.EXPANDED)); button.setOpen(true); assertEquals( 'menu buttons should not aria-expanded == true after ' + 'opening', 'true', goog.a11y.aria.getState( button.getElement(), goog.a11y.aria.State.EXPANDED)); } function hasInlineBlock(el) { return goog.dom.classlist.contains(el, 'goog-inline-block'); } function testDoesntCallGetCssClassInConstructor() { goog.testing.ui.rendererasserts.assertNoGetCssClassCallsInConstructor( goog.ui.MenuButtonRenderer); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy