blob: ab0851fb988433b3b9dc31bda348ed7f90813cd5 [file] [log] [blame]
// Copyright 2009 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.SplitPaneTest');
goog.setTestOnly('goog.ui.SplitPaneTest');
goog.require('goog.dom');
goog.require('goog.dom.classlist');
goog.require('goog.events');
goog.require('goog.math.Size');
goog.require('goog.style');
goog.require('goog.testing.events');
goog.require('goog.testing.jsunit');
goog.require('goog.testing.recordFunction');
goog.require('goog.ui.Component');
goog.require('goog.ui.SplitPane');
var splitpane;
var leftComponent;
var rightComponent;
function setUp() {
leftComponent = new goog.ui.Component();
rightComponent = new goog.ui.Component();
splitpane = new goog.ui.SplitPane(leftComponent, rightComponent,
goog.ui.SplitPane.Orientation.HORIZONTAL);
}
function tearDown() {
splitpane.dispose();
leftComponent.dispose();
rightComponent.dispose();
goog.dom.getElement('sandbox').innerHTML = '';
}
function testRender() {
splitpane.render(goog.dom.getElement('sandbox'));
assertEquals(1, goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane').length);
assertEquals(1, goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-first-container').length);
assertEquals(1, goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-second-container').length);
assertEquals(1, goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-handle').length);
}
function testDecorate() {
var mainDiv = goog.dom.createDom('div', 'goog-splitpane',
goog.dom.createDom('div', 'goog-splitpane-first-container'),
goog.dom.createDom('div', 'goog-splitpane-second-container'),
goog.dom.createDom('div', 'goog-splitpane-handle'));
var sandbox = goog.dom.getElement('sandbox');
goog.dom.appendChild(sandbox, mainDiv);
splitpane.decorate(mainDiv);
}
function testDecorateWithNestedSplitPane() {
// Create a standard split pane to be nested within another split pane.
var innerSplitPaneDiv = goog.dom.createDom('div', 'goog-splitpane',
goog.dom.createDom('div', 'goog-splitpane-first-container e1'),
goog.dom.createDom('div', 'goog-splitpane-second-container e2'),
goog.dom.createDom('div', 'goog-splitpane-handle e3'));
// Create a split pane containing a split pane instance.
var outerSplitPaneDiv = goog.dom.createDom('div', 'goog-splitpane',
goog.dom.createDom('div', 'goog-splitpane-first-container e4',
innerSplitPaneDiv),
goog.dom.createDom('div', 'goog-splitpane-second-container e5'),
goog.dom.createDom('div', 'goog-splitpane-handle e6'));
var sandbox = goog.dom.getElement('sandbox');
goog.dom.appendChild(sandbox, outerSplitPaneDiv);
// Decorate and check that the correct containers and handle are used.
splitpane.decorate(outerSplitPaneDiv);
assertTrue(goog.dom.classlist.contains(
splitpane.firstComponentContainer_, 'e4'));
assertTrue(goog.dom.classlist.contains(
splitpane.secondComponentContainer_, 'e5'));
assertTrue(goog.dom.classlist.contains(splitpane.splitpaneHandle_, 'e6'));
}
function testSetSize() {
splitpane.setInitialSize(200);
splitpane.setHandleSize(10);
splitpane.render(goog.dom.getElement('sandbox'));
splitpane.setSize(new goog.math.Size(500, 300));
assertEquals(200, splitpane.getFirstComponentSize());
var splitpaneSize = goog.style.getBorderBoxSize(splitpane.getElement());
assertEquals(500, splitpaneSize.width);
assertEquals(300, splitpaneSize.height);
}
function testOrientationChange() {
splitpane.setInitialSize(200);
splitpane.setHandleSize(10);
splitpane.render(goog.dom.getElement('sandbox'));
splitpane.setSize(new goog.math.Size(500, 300));
var first = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-first-container')[0];
var second = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-second-container')[0];
var handle = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-handle')[0];
var handleSize = goog.style.getBorderBoxSize(handle);
assertEquals(10, handleSize.width);
assertEquals(300, handleSize.height);
var firstSize = goog.style.getBorderBoxSize(first);
assertEquals(200, firstSize.width);
assertEquals(300, firstSize.height);
var secondSize = goog.style.getBorderBoxSize(second);
assertEquals(290, secondSize.width); // 500 - 200 - 10 = 290
assertEquals(300, secondSize.height);
splitpane.setOrientation(goog.ui.SplitPane.Orientation.VERTICAL);
handleSize = goog.style.getBorderBoxSize(handle);
assertEquals(10, handleSize.height);
assertEquals(500, handleSize.width);
firstSize = goog.style.getBorderBoxSize(first);
assertEquals(120, firstSize.height); // 200 * 300/500 = 120
assertEquals(500, firstSize.width);
secondSize = goog.style.getBorderBoxSize(second);
assertEquals(170, secondSize.height); // 300 - 120 - 10 = 170
assertEquals(500, secondSize.width);
splitpane.setOrientation(goog.ui.SplitPane.Orientation.HORIZONTAL);
handleSize = goog.style.getBorderBoxSize(handle);
assertEquals(10, handleSize.width);
assertEquals(300, handleSize.height);
firstSize = goog.style.getBorderBoxSize(first);
assertEquals(200, firstSize.width);
assertEquals(300, firstSize.height);
secondSize = goog.style.getBorderBoxSize(second);
assertEquals(290, secondSize.width);
assertEquals(300, secondSize.height);
}
function testDragEvent() {
splitpane.setInitialSize(200);
splitpane.setHandleSize(10);
splitpane.render(goog.dom.getElement('sandbox'));
var handler = goog.testing.recordFunction();
goog.events.listen(splitpane, goog.ui.SplitPane.EventType.HANDLE_DRAG,
handler);
var handle = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-handle')[0];
goog.testing.events.fireMouseDownEvent(handle);
goog.testing.events.fireMouseMoveEvent(handle);
goog.testing.events.fireMouseUpEvent(handle);
assertEquals('HANDLE_DRAG event expected', 1, handler.getCallCount());
splitpane.setContinuousResize(false);
handler.reset();
goog.testing.events.fireMouseDownEvent(handle);
goog.testing.events.fireMouseMoveEvent(handle);
goog.testing.events.fireMouseUpEvent(handle);
assertEquals('HANDLE_DRAG event not expected', 0, handler.getCallCount());
}
function testDragEndEvent() {
splitpane.setInitialSize(200);
splitpane.setHandleSize(10);
splitpane.render(goog.dom.getElement('sandbox'));
var handler = goog.testing.recordFunction();
goog.events.listen(splitpane, goog.ui.SplitPane.EventType.HANDLE_DRAG_END,
handler);
var handle = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-handle')[0];
goog.testing.events.fireMouseDownEvent(handle);
goog.testing.events.fireMouseMoveEvent(handle);
goog.testing.events.fireMouseUpEvent(handle);
assertEquals('HANDLE_DRAG_END event expected', 1, handler.getCallCount());
splitpane.setContinuousResize(false);
handler.reset();
goog.testing.events.fireMouseDownEvent(handle);
goog.testing.events.fireMouseMoveEvent(handle);
goog.testing.events.fireMouseUpEvent(handle);
assertEquals('HANDLE_DRAG_END event expected', 1, handler.getCallCount());
}
function testSnapEvent() {
splitpane.setInitialSize(200);
splitpane.setHandleSize(10);
splitpane.render(goog.dom.getElement('sandbox'));
var handler = goog.testing.recordFunction();
goog.events.listen(splitpane, goog.ui.SplitPane.EventType.HANDLE_SNAP,
handler);
var handle = goog.dom.getElementsByTagNameAndClass('div',
'goog-splitpane-handle')[0];
goog.testing.events.fireDoubleClickSequence(handle);
assertEquals('HANDLE_SNAP event expected', 1, handler.getCallCount());
}