sku-pg
Version:
Skulpt is a Javascript implementation of Python 2.x. Python that runs in your browser!
229 lines (196 loc) • 8.55 kB
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.
-->
<!--
Author: attila@google.com (Attila Bodis)
-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Closure Unit Tests - goog.ui.ContainerRenderer</title>
<script src="../base.js"></script>
<script>
goog.require('goog.dom');
goog.require('goog.testing.ExpectedFailures');
goog.require('goog.testing.PropertyReplacer');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.ui.rendererasserts');
goog.require('goog.ui.Container');
goog.require('goog.ui.ContainerRenderer');
goog.require('goog.ui.Control');
goog.require('goog.ui.ControlRenderer');
</script>
</head>
<body>
<div id="sandbox"></div>
<script>
var renderer;
var expectedFailures = new goog.testing.ExpectedFailures();
var stubs = new goog.testing.PropertyReplacer();
function setUp() {
var sandbox = goog.dom.getElement('sandbox');
sandbox.appendChild(goog.dom.createDom('span', {
id: 'noTabIndex'
}, 'Test'));
sandbox.appendChild(goog.dom.createDom('div', {
id: 'container',
'class': 'goog-container-horizontal'
}, goog.dom.createDom('div', {
id: 'control',
'class': 'goog-control'
}, 'Hello, world!')));
renderer = goog.ui.ContainerRenderer.getInstance();
}
function tearDown() {
goog.dom.getElement('sandbox').innerHTML = '';
stubs.reset();
expectedFailures.handleTearDown();
}
function testGetInstance() {
assertTrue('getInstance() must return a ContainerRenderer',
renderer instanceof goog.ui.ContainerRenderer);
assertEquals('getInstance() must return the same object each time',
renderer, goog.ui.ContainerRenderer.getInstance());
}
function testGetCustomRenderer() {
var cssClass = 'special-css-class';
var containerRenderer = goog.ui.ContainerRenderer.getCustomRenderer(
goog.ui.ContainerRenderer, cssClass);
assertEquals(
'Renderer should have returned the custom CSS class.',
cssClass,
containerRenderer.getCssClass());
}
function testGetAriaRole() {
assertUndefined('ARIA role must be undefined', renderer.getAriaRole());
}
function testEnableTabIndex() {
var container = goog.dom.getElement('container');
assertFalse('Container must not have any tab index',
goog.dom.isFocusableTabIndex(container));
// WebKit on Mac doesn't support tabIndex for arbitrary DOM elements
// until version 527 or later.
expectedFailures.expectFailureFor(goog.userAgent.WEBKIT &&
goog.userAgent.MAC && !goog.userAgent.isVersionOrHigher('527'));
try {
renderer.enableTabIndex(container, true);
assertTrue('Container must have a tab index',
goog.dom.isFocusableTabIndex(container));
assertEquals('Container\'s tab index must be 0', 0, container.tabIndex);
renderer.enableTabIndex(container, false);
assertFalse('Container must not have a tab index',
goog.dom.isFocusableTabIndex(container));
assertEquals('Container\'s tab index must be -1', -1,
container.tabIndex);
} catch (e) {
expectedFailures.handleException(e);
}
}
function testCreateDom() {
var horizontal = new goog.ui.Container(
goog.ui.Container.Orientation.HORIZONTAL);
var element1 = renderer.createDom(horizontal);
assertEquals('Element must be a DIV', 'DIV', element1.tagName);
assertEquals('Element must have the expected class name',
'goog-container goog-container-horizontal',
element1.className);
var vertical = new goog.ui.Container(
goog.ui.Container.Orientation.VERTICAL);
var element2 = renderer.createDom(vertical);
assertEquals('Element must be a DIV', 'DIV', element2.tagName);
assertEquals('Element must have the expected class name',
'goog-container goog-container-vertical',
element2.className);
}
function testGetContentElement() {
assertNull('getContentElement() must return null if element is null',
renderer.getContentElement(null));
var element = goog.dom.getElement('container');
assertEquals('getContentElement() must return its argument',
element, renderer.getContentElement(element));
}
function testCanDecorate() {
assertFalse('canDecorate() must return false for a SPAN',
renderer.canDecorate(goog.dom.getElement('noTabIndex')));
assertTrue('canDecorate() must return true for a DIV',
renderer.canDecorate(goog.dom.getElement('container')));
}
function testDecorate() {
var container = new goog.ui.Container();
var element = goog.dom.getElement('container');
assertFalse('Container must not be in the document',
container.isInDocument());
container.decorate(element);
assertTrue('Container must be in the document',
container.isInDocument());
assertEquals('Container\'s ID must match the decorated element\'s ID',
element.id, container.getId());
assertEquals('Element must have the expected class name',
'goog-container-horizontal goog-container', element.className);
assertEquals('Container must have one child', 1,
container.getChildCount());
assertEquals('Child component\'s ID must be as expected', 'control',
container.getChildAt(0).getId());
assertThrows('Redecorating must throw error', function() {
container.decorate(element);
});
}
function testDecorateWithCustomContainerElement() {
var element = goog.dom.getElement('container');
var alternateContainerElement = goog.dom.createElement('div');
element.appendChild(alternateContainerElement);
var container = new goog.ui.Container();
stubs.set(renderer, 'getContentElement', function() {
return alternateContainerElement;
});
assertFalse('Container must not be in the document',
container.isInDocument());
container.decorate(element);
assertTrue('Container must be in the document',
container.isInDocument());
assertEquals('Container\'s ID must match the decorated element\'s ID',
element.id, container.getId());
assertEquals('Element must have the expected class name',
'goog-container-horizontal goog-container', element.className);
assertEquals('Container must have 0 children', 0,
container.getChildCount());
assertThrows('Redecorating must throw error', function() {
container.decorate(element);
});
}
function testSetStateFromClassName() {
var container = new goog.ui.Container();
assertEquals('Container must be vertical',
goog.ui.Container.Orientation.VERTICAL, container.getOrientation());
renderer.setStateFromClassName(container, 'goog-container-horizontal',
'goog-container');
assertEquals('Container must be horizontal',
goog.ui.Container.Orientation.HORIZONTAL, container.getOrientation());
renderer.setStateFromClassName(container, 'goog-container-vertical',
'goog-container');
assertEquals('Container must be vertical',
goog.ui.Container.Orientation.VERTICAL, container.getOrientation());
assertTrue('Container must be enabled', container.isEnabled());
renderer.setStateFromClassName(container, 'goog-container-disabled',
'goog-container');
assertFalse('Container must be disabled', container.isEnabled());
}
function testInitializeDom() {
var container = new goog.ui.Container();
var element = goog.dom.getElement('container');
container.decorate(element);
assertTrue('Container\'s root element must be unselectable',
goog.style.isUnselectable(container.getElement()));
assertEquals('On IE, container\'s root element must have hideFocus=true',
goog.userAgent.IE, !!container.getElement().hideFocus);
}
function testDoesntCallGetCssClassInConstructor() {
goog.testing.ui.rendererasserts.
assertNoGetCssClassCallsInConstructor(goog.ui.ContainerRenderer);
}
</script>
</body>
</html>