blob: d8aa967db093f33dfc852f8a8236068f7733c68c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2012 EclipseSource and others. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
qx.Class.define( "org.eclipse.rwt.test.tests.GridUtilTest", {
extend : qx.core.Object,
members : {
testCreateDisposeSplitContainer : function() {
var container = this._createSplitContainer();
container.destroy();
},
testGetSubContainer : function() {
var container = this._createSplitContainer();
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertTrue( sub1 instanceof rwt.widgets.base.GridRowContainer );
assertTrue( sub2 instanceof rwt.widgets.base.GridRowContainer );
container.destroy();
},
testAddToParent : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var container = this._createSplitContainer();
var parent = TestUtil.getDocument();
parent.add( container );
assertIdentical( parent, container.getSubContainer( 0 ).getParent() );
assertIdentical( parent, container.getSubContainer( 1 ).getParent() );
container.destroy();
},
testDestroy : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var container = this._createSplitContainer();
TestUtil.getDocument().add( container );
container.destroy();
TestUtil.flush();
assertTrue( container.getSubContainer( 0 ).isDisposed() );
assertTrue( container.getSubContainer( 1 ).isDisposed() );
},
testCopySimpleRenderConfigFields : function() {
var container = this._createSplitContainer();
var config = container.getRenderConfig();
var config1 = container.getSubContainer( 0 ).getRenderConfig();
var config2 = container.getSubContainer( 1 ).getRenderConfig();
var params = {
"textColor" : "blue",
"font" : "arial",
"enabled" : false,
"focused" : false,
"linesVisible" : true,
"fullSelection" : true,
"hideSelection" : true,
"variant" : "rwt_foo",
"selectionPadding" : [ 2, 3 ],
"indentionWidth" : 10,
//"hasCheckBoxes" : true,
"checkBoxLeft" : 4,
"checkBoxWidth" : 13,
"columnCount" : 5,
"treeColumn" : 2,
"itemImageWidth" : [ 4, 5, 6, 7, 8 ],
"itemTextWidth" : [ 3, 4, 5, 6, 7 ],
"alignment" : [ "left", "left", "right", "right", "left" ]
};
for( var key in params ) {
config[ key ] = params[ key ];
}
container.renderAll();
for( var key in params ) {
assertEquals( params[ key ], config1[ key ] );
assertEquals( params[ key ], config2[ key ] );
}
container.destroy();
},
testFixItemWidths : function() {
var container = this._createSplitContainer();
container.renderAll();
var config1 = container.getSubContainer( 0 ).getRenderConfig();
var config2 = container.getSubContainer( 1 ).getRenderConfig();
assertEquals( [ 20, 0, 22, 0, 0 ], config1.itemWidth );
assertEquals( [ 0, 21, 0, 23, 24 ], config2.itemWidth );
container.destroy();
},
testHasCheckBoxes : function() {
var container = this._createSplitContainer();
container.getRenderConfig().hasCheckBoxes = true;
container.renderAll();
var config1 = container.getSubContainer( 0 ).getRenderConfig();
var config2 = container.getSubContainer( 1 ).getRenderConfig();
assertTrue( config1.hasCheckBoxes );
assertFalse( config2.hasCheckBoxes );
container.destroy();
},
testFixItemOffsets : function() {
var container = this._createSplitContainer();
container.renderAll();
var config1 = container.getSubContainer( 0 ).getRenderConfig();
var config2 = container.getSubContainer( 1 ).getRenderConfig();
assertEquals( [ 30, 60, 0, 90, 120 ], config1.itemLeft );
assertEquals( [ 32, 63, 4, 95, 126 ], config1.itemImageLeft );
assertEquals( [ 33, 64, 5, 96, 127 ], config1.itemTextLeft );
assertEquals( [ 30, 0, 0, 30, 60 ], config2.itemLeft );
assertEquals( [ 32, 3, 4, 35, 66 ], config2.itemImageLeft );
assertEquals( [ 33, 4, 5, 36, 67 ], config2.itemTextLeft );
container.destroy();
},
testGetTopHeight : function() {
var container = this._createSplitContainer();
container.setTop( 30 );
container.setHeight( 300 );
assertEquals( 30, container.getTop() );
assertEquals( 300, container.getHeight() );
container.destroy();
},
testSetWidth : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var container = this._createSplitContainer();
container.setWidth( 100 );
container.renderAll();
TestUtil.flush();
TestUtil.flush();
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 60, sub1.getWidth() );
assertEquals( 60, sub1.getChildren()[ 0 ].getWidth() );
assertEquals( 60, sub2.getLeft() );
assertEquals( 40, sub2.getWidth() );
assertEquals( 100, container.getWidth() );
container.destroy();
},
testChangeWidth : function() {
var container = this._createSplitContainer();
container.setWidth( 100 );
container.renderAll();
container.setWidth( 200 );
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 60, sub1.getWidth() );
assertEquals( 60, sub2.getLeft() );
assertEquals( 140, sub2.getWidth() );
container.destroy();
},
testWidthSmallerSplit : function() {
var container = this._createSplitContainer();
container.setWidth( 50 );
container.renderAll();
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 50, sub1.getWidth() );
assertEquals( 50, sub2.getLeft() );
assertEquals( 0, sub2.getWidth() );
container.destroy();
},
testSetRowWidth : function() {
var container = this._createSplitContainer();
container.setRowWidth( 150 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 90, sub2.getChildren()[ 0 ].getWidth() );
container.destroy();
},
testFixedColumnsEqualsTotalColumns : function() {
var container = this._createSplitContainer();
container.setFixedColumns( 5 );
container.renderAll();
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 100, container.getWidth() );
assertEquals( 100, sub1.getWidth() );
assertEquals( 100, sub2.getLeft() );
assertEquals( 0, sub2.getWidth() );
container.destroy();
},
testSetRowWidthSmallerWidth : function() {
var container = this._createSplitContainer();
container.setRowWidth( 60 );
container.renderAll();
var sub2 = container.getSubContainer( 1 );
assertEquals( 0, sub2.getChildren()[ 0 ].getWidth() );
container.destroy();
},
testScrollLeftRightContainer : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var container = this._createSplitContainer();
container.setRowWidth( 200 );
container.renderAll();
TestUtil.flush();
container.setScrollLeft( 20 );
var sub1 = container.getSubContainer( 0 );
var sub2 = container.getSubContainer( 1 );
assertEquals( 0, sub1.getScrollLeft() );
assertEquals( 20, sub2.getScrollLeft() );
container.destroy();
},
////////////////////////
// Tests with "real" Tree
testCreateMinimalTreeWithFixedColumns : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = new rwt.widgets.Grid( {
"appearance": "table",
"splitContainer" : true
} );
org.eclipse.rwt.GridUtil.setFixedColumns( tree, 3 );
// first 3 columns fixed -> one extra contianer for first 3
assertIdentical( tree, tree._rowContainer.getSubContainer( 0 ).getParent() );
assertIdentical( tree, tree._rowContainer.getSubContainer( 1 ).getParent() );
assertNull( tree, tree._rowContainer.getSubContainer( 2 ) );
tree.addToDocument();
TestUtil.flush();
tree.destroy();
},
testIgnoreFixedColumnsWithoutSplitContainer : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = new rwt.widgets.Grid( {
"appearance": "table"
} );
org.eclipse.rwt.GridUtil.setFixedColumns( tree, 3 );
tree.addToDocument();
TestUtil.flush();
assertTrue( tree._rowContainer instanceof rwt.widgets.base.GridRowContainer );
tree.destroy();
},
testCreateNormalTreeWithFixedColumns : function() {
var tree = this._createSplitTree();
assertIdentical( tree, tree._rowContainer.getSubContainer( 0 ).getParent() );
assertIdentical( tree, tree._rowContainer.getSubContainer( 1 ).getParent() );
assertNull( tree, tree._rowContainer.getSubContainer( 2 ) );
tree.destroy();
},
testChangeFixedColumns : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
assertEquals( 2, tree.getRowContainer().getFixedColumns() );
var containerEl = tree.getRowContainer().getSubContainer( 0 ).getElement();
var orgWidth = parseInt( containerEl.style.width, 10 );
org.eclipse.rwt.GridUtil.setFixedColumns( tree, 3 );
assertEquals( 3, tree.getRowContainer().getFixedColumns() );
TestUtil.flush();
var newWidth = parseInt( containerEl.style.width, 10 );
assertTrue( newWidth > orgWidth );
tree.destroy();
},
testRenderSplitItem : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
item.setTexts( [ "c0", "c1", "c2", "c3", "c4" ] );
TestUtil.flush();
var rowLeft = tree._rowContainer.getSubContainer( 0 ).getChildren()[ 0 ];
var rowRight = tree._rowContainer.getSubContainer( 1 ).getChildren()[ 0 ];
assertEquals( 2, rowLeft._getTargetNode().childNodes.length );
assertEquals( 3, rowRight._getTargetNode().childNodes.length );
assertEquals( "c0", rowLeft._getTargetNode().firstChild.innerHTML );
assertEquals( "c1", rowRight._getTargetNode().firstChild.innerHTML );
tree.destroy();
},
testSplitSelectionClickLeft : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
TestUtil.flush();
assertFalse( tree.isItemSelected( item ) );
TestUtil.clickDOM( tree._rowContainer.getSubContainer( 0 )._children[ 0 ]._getTargetNode() );
TestUtil.flush();
assertTrue( tree.isItemSelected( item ) );
tree.destroy();
},
testSplitSelectionClickRight : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
TestUtil.flush();
assertFalse( tree.isItemSelected( item ) );
TestUtil.clickDOM( tree._rowContainer.getSubContainer( 1 )._children[ 0 ]._getTargetNode() );
TestUtil.flush();
assertTrue( tree.isItemSelected( item ) );
tree.destroy();
},
testSplitSelectionByServer : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
TestUtil.flush();
assertFalse( tree.isItemSelected( item ) );
org.eclipse.swt.EventUtil.setSuspended( true );
tree.selectItem( item );
org.eclipse.swt.EventUtil.setSuspended( false );
TestUtil.flush();
assertTrue( tree.isItemSelected( item ) );
tree.destroy();
},
testSyncHoverItem : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
item.setTexts( [ "bla" ] );
item.setImages( [ "bla.jpg" ] );
TestUtil.flush();
var rowNode = tree._rowContainer.getSubContainer( 0 )._children[ 0 ]._getTargetNode();
TestUtil.hoverFromTo( document.body, rowNode );
TestUtil.hoverFromTo( rowNode, rowNode.firstChild );
TestUtil.forceInterval( tree._rowContainer.getSubContainer( 1 )._asyncTimer );
assertIdentical( item, tree._rowContainer.getSubContainer( 0 ).getHoverItem() );
assertIdentical( item, tree._rowContainer.getSubContainer( 1 ).getHoverItem() );
assertTrue( tree._rowContainer.getSubContainer( 1 ).getChildren()[ 0 ].hasState( "over" ) );
tree.destroy();
},
testCellToolTipOnFixedColumns : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
widgetManager.add( tree, "w3", true );
tree.setWidth( 300 );
tree.setEnableCellToolTip( true );
tree.setColumnCount( 6 );
tree.setItemMetrics( 0, 0, 5, 0, 0, 0, 50 );
tree.setItemMetrics( 1, 5, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 2, 15, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 3, 25, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 4, 35, 350, 0, 0, 0, 50 );
tree.setItemMetrics( 5, 400, 100, 405, 10, 430, 50 );
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
widgetManager.add( item, "w45", true );
TestUtil.flush();
TestUtil.prepareTimerUse();
TestUtil.initRequestLog();
tree.setScrollLeft( 20 );
var leftButton = qx.event.type.MouseEvent.buttons.left;
var node = tree._rowContainer.getSubContainer( 1 ).getChildren()[ 0 ].getElement();
TestUtil.fakeMouseEventDOM( node, "mouseover", leftButton, 6, 11 );
TestUtil.fakeMouseEventDOM( node, "mousemove", leftButton, 6, 11 );
TestUtil.forceInterval( tree._cellToolTip._showTimer );
assertEquals( 1, TestUtil.getRequestsSend() );
var message = TestUtil.getMessageObject();
var actualItem = message.findCallProperty( "w3", "renderToolTipText", "item" );
var actualCol = message.findCallProperty( "w3", "renderToolTipText", "column" );
assertEquals( "w45", actualItem );
assertEquals( 1, actualCol );
tree.destroy();
},
testCellToolTipOnNonFixedColumns : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
var widgetManager = org.eclipse.swt.WidgetManager.getInstance();
widgetManager.add( tree, "w3", true );
tree.setWidth( 300 );
tree.setEnableCellToolTip( true );
tree.setColumnCount( 6 );
tree.setItemMetrics( 0, 0, 5, 0, 0, 0, 50 );
tree.setItemMetrics( 1, 5, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 2, 15, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 3, 25, 10, 0, 0, 0, 50 );
tree.setItemMetrics( 4, 35, 350, 0, 0, 0, 50 );
tree.setItemMetrics( 5, 400, 100, 405, 10, 430, 50 );
tree.setItemCount( 1 );
var item = new rwt.widgets.GridItem( tree.getRootItem(), 0 );
widgetManager.add( item, "w45", true );
TestUtil.flush();
TestUtil.prepareTimerUse();
TestUtil.initRequestLog();
tree.setScrollLeft( 20 );
var leftButton = qx.event.type.MouseEvent.buttons.left;
var node = tree._rowContainer.getSubContainer( 1 ).getChildren()[ 0 ].getElement();
TestUtil.fakeMouseEventDOM( node, "mouseover", leftButton, 16, 11 );
TestUtil.fakeMouseEventDOM( node, "mousemove", leftButton, 16, 11 );
TestUtil.forceInterval( tree._cellToolTip._showTimer );
assertEquals( 1, TestUtil.getRequestsSend() );
var message = TestUtil.getMessageObject();
var actualItem = message.findCallProperty( "w3", "renderToolTipText", "item" );
var actualCol = message.findCallProperty( "w3", "renderToolTipText", "column" );
assertEquals( "w45", actualItem );
assertEquals( 4, actualCol );
tree.destroy();
},
testLinesVisibleForSplitTree : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
for( var i = 0; i < 5; i++ ) {
var column = new rwt.widgets.GridColumn( tree );
rwt.protocol.ObjectRegistry.add( "col", column );
column.setLeft( tree.getRenderConfig().itemLeft[ i ] );
column.setWidth( tree.getRenderConfig().itemWidth[ i ] );
if( i < 2 ) {
column.setFixed( true );
}
}
tree.setLinesVisible( true );
TestUtil.flush();
var border = tree._rowContainer.getSubContainer( 0 )._getHorizontalGridBorder();
var row = tree._rowContainer.getSubContainer( 0 )._children[ 0 ];
assertTrue( tree.hasState( "linesvisible" ) );
assertIdentical( border, row.getBorder() );
tree.destroy();
},
testVerticalGridLayoutOnSplitTree : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
TestUtil.flush();
var cont1 = tree.getRowContainer().getSubContainer( 0 )._getTargetNode();
var cont2 = tree.getRowContainer().getSubContainer( 1 )._getTargetNode();
var offset1 = cont1.childNodes.length;
var offset2 = cont2.childNodes.length;
tree.setLinesVisible( true );
TestUtil.flush();
assertEquals( offset1 + 2, cont1.childNodes.length );
assertEquals( offset2 + 3, cont2.childNodes.length ); // column count is 5
assertEquals( 49, parseInt( cont1.childNodes[ offset1 ].style.left, 10 ) );
assertEquals( 21, parseInt( cont1.childNodes[ offset1 + 1 ].style.left, 10 ) );
assertEquals( 20, parseInt( cont2.childNodes[ offset2 ].style.left, 10 ) );
assertEquals( 52, parseInt( cont2.childNodes[ offset2 + 1 ].style.left, 10 ) );
assertEquals( 52, parseInt( cont2.childNodes[ offset2 + 2 ].style.left, 10 ) );
tree.destroy();
},
testVerticalGridLayoutOnChangeFixedColumns : function() {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var tree = this._createSplitTree();
TestUtil.flush();
var cont1 = tree.getRowContainer().getSubContainer( 0 )._getTargetNode();
var cont2 = tree.getRowContainer().getSubContainer( 1 )._getTargetNode();
var offset1 = cont1.childNodes.length;
var offset2 = cont2.childNodes.length;
tree.setLinesVisible( true );
TestUtil.flush();
org.eclipse.rwt.GridUtil.setFixedColumns( tree, 0 );
TestUtil.flush();
assertEquals( offset1, cont1.childNodes.length );
assertEquals( offset2 + 5, cont2.childNodes.length ); // column count is 5
tree.destroy();
},
/////////
// helper
_createSplitContainer : function() {
// column order: 2,0 - 1,3,4
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var argsMap = { "splitContainer" : true };
var result = org.eclipse.rwt.GridUtil.createTreeRowContainer( argsMap );
result.setFixedColumns( 2 );
result.setBaseAppearance( "table" );
result.setSelectionProvider( function(){ return true; }, {} );
result.setWidth( 100 );
result.setHeight( 200 );
var config = result.getRenderConfig();
config.columnCount = 5;
config.treeColumn = 2;
config.alignment = [ "left", "left", "right", "right", "left" ];
config.itemLeft = [ 30, 60, 0, 90, 120 ];
config.itemWidth = [ 20, 21, 22, 23, 24 ];
config.itemImageLeft = [ 32, 63, 4, 95, 126 ];
config.itemImageWidth = [ 4, 5, 6, 7, 8 ];
config.itemTextLeft = [ 33, 64, 5, 96, 127];
config.itemTextWidth = [ 3, 4, 5, 6, 7 ];
TestUtil.getDocument().add( result );
TestUtil.flush();
result.renderAll();
return result;
},
_createSplitTree : function( noflush, option, arg ) {
var TestUtil = org.eclipse.rwt.test.fixture.TestUtil;
var args = {
"appearance" : "table",
"splitContainer" : true
};
if( option ) {
args[ option ] = true;
}
if( option === "check" ) {
args[ "checkBoxMetrics" ] = arg;
}
args[ "fullSelection" ] = true;
args[ "selectionPadding" ] = [ 2, 4 ];
args[ "indentionWidth" ] = 16;
var tree = new rwt.widgets.Grid( args );
org.eclipse.rwt.GridUtil.setFixedColumns( tree, 2 );
tree.setTreeColumn( -1 );
tree.setItemHeight( 20 );
tree.setLeft( 0 );
tree.setTop( 0 );
tree.setWidth( 500 );
tree.setHeight( 500 );
tree.setColumnCount( 5 );
tree.setItemMetrics( 0, 30, 20, 32, 4, 33, 3 );
tree.setItemMetrics( 1, 60, 21, 63, 5, 64, 4 );
tree.setItemMetrics( 2, 0, 22, 4, 6, 5, 5 );
tree.setItemMetrics( 3, 90, 23, 95, 7, 96, 6 );
tree.setItemMetrics( 4, 90, 23, 95, 7, 96, 6 );
tree.setItemMetrics( 5, 120, 24, 126, 8, 127, 7 );
tree.addToDocument();
if( !noflush ) {
TestUtil.flush();
}
rwt.protocol.ObjectRegistry.add( "w3", tree );
return tree;
},
_fillTree : function( tree, count, subItems, flatCount ) {
tree.setItemCount( ( subItems && flatCount ) ? ( count / 2 ) : count );
var i = 0;
var itemNr = 0;
while( i < count ) {
var item = new rwt.widgets.GridItem( tree.getRootItem(), itemNr );
itemNr++;
item.setTexts( [ "Test" + i ] );
if( subItems ) {
item.setItemCount( 1 );
var subitem = new rwt.widgets.GridItem( item, 0 );
if( flatCount ) {
item.setExpanded( true );
i++;
subitem.setTexts( [ "Test" + i ] );
} else {
subitem.setTexts( [ "Test" + i + "sub" ] );
}
}
i++;
}
}
}
} );