blob: fb0bc54a01831eab09c80eb297061631a046fed1 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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
******************************************************************************/
package org.eclipse.nebula.widgets.grid.internal.gridkit;
import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridColumns;
import static org.eclipse.nebula.widgets.grid.GridTestUtil.createGridItems;
import static org.eclipse.nebula.widgets.grid.GridTestUtil.loadImage;
import static org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCATestUtil.jsonEquals;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_SELECTION;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridColumn;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.eclipse.nebula.widgets.grid.internal.IGridAdapter;
import org.eclipse.nebula.widgets.grid.internal.gridkit.GridLCA.ItemMetrics;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.rap.rwt.testfixture.Message;
import org.eclipse.rap.rwt.testfixture.Message.CreateOperation;
import org.eclipse.rap.rwt.testfixture.Message.DestroyOperation;
import org.eclipse.rap.rwt.testfixture.Message.Operation;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ScrollBar;
import org.eclipse.swt.widgets.Shell;
import org.json.JSONArray;
import org.json.JSONException;
import junit.framework.TestCase;
@SuppressWarnings("restriction")
public class GridLCA_Test extends TestCase {
private Display display;
private Shell shell;
private Grid grid;
private GridLCA lca;
@Override
protected void setUp() throws Exception {
Fixture.setUp();
display = new Display();
shell = new Shell( display );
grid = new Grid( shell, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
lca = ( GridLCA )WidgetUtil.getLCA( grid );
Fixture.fakeNewRequest( display );
}
@Override
protected void tearDown() throws Exception {
Fixture.tearDown();
}
public void testRenderCreate() throws IOException {
lca.renderInitialization( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
List<Object> styles = Arrays.asList( operation.getStyles() );
assertEquals( "rwt.widgets.Grid", operation.getType() );
assertEquals( "tree", operation.getProperty( "appearance" ) );
assertEquals( Integer.valueOf( 16 ), operation.getProperty( "indentionWidth" ) );
assertFalse( operation.getPropertyNames().contains( "checkBoxMetrics" ) );
assertTrue( styles.contains( "FULL_SELECTION" ) );
}
public void testRenderParent() throws IOException {
lca.renderInitialization( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertEquals( WidgetUtil.getId( grid.getParent() ), operation.getParent() );
}
public void testRenderCreateWithVirtualMulti() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL | SWT.MULTI );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
List<Object> styles = Arrays.asList( operation.getStyles() );
assertTrue( styles.contains( "VIRTUAL" ) );
assertTrue( styles.contains( "MULTI" ) );
assertEquals( Boolean.TRUE, message.findListenProperty( grid, "SetData" ) );
}
public void testRenderDispose() throws IOException {
lca.renderDispose( grid );
Message message = Fixture.getProtocolMessage();
Operation operation = message.getOperation( 0 );
assertTrue( operation instanceof DestroyOperation );
assertEquals( WidgetUtil.getId( grid ), operation.getTarget() );
}
public void testRenderInitialItemCount() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "itemCount" ) == -1 );
}
public void testRenderItemCount() throws IOException {
createGridItems( grid, 10, 3 );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 10 ), message.findSetProperty( grid, "itemCount" ) );
}
public void testRenderItemCountUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setItemCount( 10 );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "itemCount" ) );
}
public void testRenderInitialItemHeight() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
assertNotNull( message.findSetOperation( grid, "itemHeight" ) );
}
public void testRenderItemHeight() throws IOException {
grid.setItemHeight( 40 );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 40 ), message.findSetProperty( grid, "itemHeight" ) );
}
public void testRenderItemHeightUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setItemHeight( 40 );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "itemHeight" ) );
}
public void testRenderInitialItemMetrics() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
assertNotNull( message.findSetOperation( grid, "itemMetrics" ) );
}
public void testRenderItemMetrics() throws IOException, JSONException {
GridColumn column = new GridColumn( grid, SWT.NONE );
column.setWidth( 50 );
GridItem[] items = createGridItems( grid, 3, 1 );
items[ 0 ].setText( "foo" );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
JSONArray actual = ( JSONArray )message.findSetProperty( grid, "itemMetrics" );
assertTrue( jsonEquals( "[0,0,50,0,0,0,44,0,0]", ( JSONArray )actual.get( 0 ) ) );
}
public void testRenderItemMetrics_WithCheck() throws IOException, JSONException {
createGridColumns( grid, 2, SWT.CHECK );
GridItem[] items = createGridItems( grid, 3, 1 );
items[ 0 ].setText( "foo" );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
JSONArray actual = ( JSONArray )message.findSetProperty( grid, "itemMetrics" );
assertTrue( jsonEquals( "[0,0,20,23,0,23,0,0,21]", ( JSONArray )actual.get( 0 ) ) );
assertTrue( jsonEquals( "[1,20,40,49,0,49,5,26,21]", ( JSONArray )actual.get( 1 ) ) );
}
public void testRenderItemMetricsUnchanged() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
GridItem item = new GridItem( grid, SWT.NONE );
item.setText( "foo" );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "itemMetrics" ) );
}
public void testRenderInitialColumnCount() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "columnCount" ) == -1 );
}
public void testRenderColumnCount() throws IOException {
new GridColumn( grid, SWT.NONE );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 1 ), message.findSetProperty( grid, "columnCount" ) );
}
public void testRenderColumnCountUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
new GridColumn( grid, SWT.NONE );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "columnCount" ) );
}
public void testRenderInitialTreeColumn() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "treeColumn" ) == -1 );
}
public void testRenderTreeColumn() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
grid.setColumnOrder( new int[]{ 1, 0 } );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 1 ), message.findSetProperty( grid, "treeColumn" ) );
}
public void testRenderTreeColumnUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setColumnOrder( new int[]{ 1, 0 } );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "treeColumn" ) );
}
public void testRenderInitialHeaderHeight() throws IOException {
new GridColumn( grid, SWT.NONE );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "headerHeight" ) == -1 );
}
public void testRenderHeaderHeight() throws IOException {
new GridColumn( grid, SWT.NONE );
grid.setHeaderVisible( true );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 31 ), message.findSetProperty( grid, "headerHeight" ) );
}
public void testRenderHeaderHeightUnchanged() throws IOException {
new GridColumn( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setHeaderVisible( true );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "headerHeight" ) );
}
public void testRenderInitialHeaderVisible() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "headerVisible" ) == -1 );
}
public void testRenderHeaderVisible() throws IOException {
grid.setHeaderVisible( true );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findSetProperty( grid, "headerVisible" ) );
}
public void testRenderHeaderVisibleUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setHeaderVisible( true );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "headerVisible" ) );
}
public void testRenderInitialFooterHeight() throws IOException {
new GridColumn( grid, SWT.NONE );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "footerHeight" ) == -1 );
}
public void testRenderFooterHeight() throws IOException {
new GridColumn( grid, SWT.NONE );
grid.setFooterVisible( true );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 31 ), message.findSetProperty( grid, "footerHeight" ) );
}
public void testRenderFooterHeightUnchanged() throws IOException {
new GridColumn( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setFooterVisible( true );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "footerHeight" ) );
}
public void testRenderInitialFooterVisible() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "footerVisible" ) == -1 );
}
public void testRenderFooterVisible() throws IOException {
grid.setFooterVisible( true );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findSetProperty( grid, "footerVisible" ) );
}
public void testRenderFooterVisibleUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setFooterVisible( true );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "footerVisible" ) );
}
public void testRenderInitialLinesVisible() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findSetProperty( grid, "linesVisible" ) );
}
public void testRenderLinesVisible() throws IOException {
Fixture.markInitialized( grid );
grid.setLinesVisible( false );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.FALSE, message.findSetProperty( grid, "linesVisible" ) );
}
public void testRenderLinesVisibleUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setLinesVisible( true );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "linesVisible" ) );
}
public void testRenderInitialTopItemIndex() throws IOException {
grid.setSize( 100, 100 );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "topItemIndex" ) == -1 );
}
public void testRenderTopItemIndex() throws IOException {
grid.setSize( 100, 100 );
createGridItems( grid, 10, 3 );
grid.getItem( 4 ).setExpanded( true );
grid.setTopIndex( 5 );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 2 ), message.findSetProperty( grid, "topItemIndex" ) );
}
public void testRenderTopItemIndexUnchanged() throws IOException {
grid.setSize( 100, 100 );
createGridItems( grid, 10, 3 );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setTopIndex( 2 );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "topItemIndex" ) );
}
public void testRenderInitialFocusItem() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "focusItem" ) == -1 );
}
public void testRenderFocusItem() throws IOException {
GridItem[] items = createGridItems( grid, 3, 0 );
grid.setFocusItem( items[ 1 ] );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( WidgetUtil.getId( items[ 1 ] ), message.findSetProperty( grid, "focusItem" ) );
}
public void testRenderFocusItemUnchanged() throws IOException {
GridItem[] items = createGridItems( grid, 3, 0 );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setFocusItem( items[ 1 ] );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "focusItem" ) );
}
public void testRenderInitialScrollLeft() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "scrollLeft" ) == -1 );
}
public void testRenderScrollLeft() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
grid.getHorizontalBar().setSelection( 10 );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Integer.valueOf( 10 ), message.findSetProperty( grid, "scrollLeft" ) );
}
public void testRenderScrollLeftUnchanged() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.getHorizontalBar().setSelection( 10 );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "scrollLeft" ) );
}
public void testRenderInitialSelection() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "selection" ) == -1 );
}
public void testRenderSelection() throws IOException, JSONException {
GridItem[] items = createGridItems( grid, 3, 3 );
grid.setSelection( new int[] { 0, 4 } );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
JSONArray actual = ( JSONArray )message.findSetProperty( grid, "selection" );
StringBuilder expected = new StringBuilder();
expected.append( "[" );
expected.append( WidgetUtil.getId( items[ 0 ] ) );
expected.append( "," );
expected.append( WidgetUtil.getId( items[ 4 ] ) );
expected.append( "]" );
assertTrue( jsonEquals( expected.toString(), actual ) );
}
public void testRenderSelectionUnchanged() throws IOException {
createGridItems( grid, 3, 3 );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
grid.setSelection( new int[] { 0, 4 } );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "selection" ) );
}
public void testRenderInitialSortDirection() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "sortDirection" ) == -1 );
}
public void testRenderSortDirection() throws IOException {
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
columns[ 1 ].setSort( SWT.UP );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( "up", message.findSetProperty( grid, "sortDirection" ) );
}
public void testRenderSortDirectionUnchanged() throws IOException {
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
columns[ 1 ].setSort( SWT.UP );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "sortDirection" ) );
}
public void testRenderInitialSortColumn() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "sortColumn" ) == -1 );
}
public void testRenderSortColumn() throws IOException {
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
columns[ 1 ].setSort( SWT.UP );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( WidgetUtil.getId( columns[ 1 ] ), message.findSetProperty( grid, "sortColumn" ) );
}
public void testRenderSortColumnUnchanged() throws IOException {
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
columns[ 1 ].setSort( SWT.UP );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "sortColumn" ) );
}
public void testRenderInitialScrollBarsVisible() throws IOException {
doFakeRedraw();
lca.render( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid.getHorizontalBar(), "visibility" ) );
assertNull( message.findSetOperation( grid.getVerticalBar(), "visibility" ) );
}
public void testRenderScrollBarsVisible_Horizontal() throws IOException {
grid.setSize( 200, 200 );
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
columns[ 0 ].setWidth( 150 );
doFakeRedraw();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findSetProperty( grid.getHorizontalBar(), "visibility" ) );
assertNull( message.findSetOperation( grid.getVerticalBar(), "visibility" ) );
}
public void testRenderScrollBarsVisible_Vertical() throws IOException {
grid.setSize( 200, 200 );
createGridColumns( grid, 3, SWT.NONE );
createGridItems( grid, 20, 0 );
doFakeRedraw();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid.getHorizontalBar(), "visibility" ) );
assertEquals( Boolean.TRUE, message.findSetProperty( grid.getVerticalBar(), "visibility" ) );
}
public void testRenderScrollBarsVisibleUnchanged() throws IOException {
grid.setSize( 200, 200 );
GridColumn[] columns = createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( grid.getHorizontalBar() );
Fixture.markInitialized( grid.getVerticalBar() );
columns[ 0 ].setWidth( 150 );
createGridItems( grid, 20, 0 );
doFakeRedraw();
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid.getHorizontalBar(), "visibility" ) );
assertNull( message.findSetOperation( grid.getVerticalBar(), "visibility" ) );
}
public void testRenderAddScrollBarsSelectionListener_Horizontal() throws Exception {
ScrollBar hScroll = grid.getHorizontalBar();
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( hScroll );
Fixture.preserveWidgets();
hScroll.addSelectionListener( new SelectionAdapter() { } );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findListenProperty( hScroll, "Selection" ) );
}
public void testRenderRemoveScrollBarsSelectionListener_Horizontal() throws Exception {
ScrollBar hScroll = grid.getHorizontalBar();
SelectionListener listener = new SelectionAdapter() { };
hScroll.addSelectionListener( listener );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( hScroll );
Fixture.preserveWidgets();
hScroll.removeSelectionListener( listener );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.FALSE, message.findListenProperty( hScroll, "Selection" ) );
}
public void testRenderScrollBarsSelectionListenerUnchanged_Horizontal() throws Exception {
ScrollBar hScroll = grid.getHorizontalBar();
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( hScroll );
Fixture.preserveWidgets();
hScroll.addSelectionListener( new SelectionAdapter() { } );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findListenOperation( hScroll, "Selection" ) );
}
public void testRenderAddScrollBarsSelectionListener_Vertical() throws Exception {
ScrollBar vScroll = grid.getVerticalBar();
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( vScroll );
Fixture.preserveWidgets();
vScroll.addSelectionListener( new SelectionAdapter() { } );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findListenProperty( vScroll, "Selection" ) );
}
public void testRenderRemoveScrollBarsSelectionListener_Vertical() throws Exception {
ScrollBar vScroll = grid.getVerticalBar();
SelectionListener listener = new SelectionAdapter() { };
vScroll.addSelectionListener( listener );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( vScroll );
Fixture.preserveWidgets();
vScroll.removeSelectionListener( listener );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.FALSE, message.findListenProperty( vScroll, "Selection" ) );
}
public void testRenderScrollBarsSelectionListenerUnchanged_Vertical() throws Exception {
ScrollBar vScroll = grid.getVerticalBar();
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.markInitialized( vScroll );
Fixture.preserveWidgets();
vScroll.addSelectionListener( new SelectionAdapter() { } );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findListenOperation( vScroll, "Selection" ) );
}
public void testRenderAddSelectionListener() throws Exception {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
grid.addSelectionListener( new SelectionAdapter() { } );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Selection" ) );
assertEquals( Boolean.TRUE, message.findListenProperty( grid, "DefaultSelection" ) );
}
public void testRenderRemoveSelectionListener() throws Exception {
SelectionListener listener = new SelectionAdapter() { };
grid.addSelectionListener( listener );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
grid.removeSelectionListener( listener );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.FALSE, message.findListenProperty( grid, "Selection" ) );
assertEquals( Boolean.FALSE, message.findListenProperty( grid, "DefaultSelection" ) );
}
public void testRenderSelectionListenerUnchanged() throws Exception {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
grid.addSelectionListener( new SelectionAdapter() { } );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findListenOperation( grid, "Selection" ) );
assertNull( message.findListenOperation( grid, "DefaultSelection" ) );
}
public void testRenderInitialEnableCellToolTip() throws IOException {
lca.render( grid );
Message message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( grid );
assertTrue( operation.getPropertyNames().indexOf( "enableCellToolTip" ) == -1 );
}
public void testRenderEnableCellToolTip() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
GridItem item = new GridItem( grid, SWT.NONE );
item.setToolTipText( 1, "foo" );
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findSetProperty( grid, "enableCellToolTip" ) );
}
public void testRenderEnableCellToolTipUnchanged() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
GridItem item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
item.setToolTipText( 1, "foo" );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( grid, "enableCellToolTip" ) );
}
public void testRenderCellToolTipText() {
createGridColumns( grid, 3, SWT.NONE );
GridItem item = new GridItem( grid, SWT.NONE );
item.setToolTipText( 1, "foo" );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
String itemId = WidgetUtil.getId( item );
processCellToolTipRequest( grid, itemId, 1 );
Message message = Fixture.getProtocolMessage();
assertEquals( "foo", message.findSetProperty( grid, "cellToolTipText" ) );
}
public void testReadSelection() {
GridItem[] items = createGridItems( grid, 3, 0 );
Fixture.fakeNewRequest( display );
Fixture.fakeSetParameter( getId( grid ),
"selection",
new String[] { getId( items[ 0 ] ), getId( items[ 2 ] ) } );
Fixture.readDataAndProcessAction( grid );
GridItem[] selectedItems = grid.getSelection();
assertEquals( 2, selectedItems.length );
assertSame( items[ 0 ], selectedItems[ 0 ] );
assertSame( items[ 2 ], selectedItems[ 1 ] );
}
public void testReadSelectionDisposedItem() {
GridItem[] items = createGridItems( grid, 3, 0 );
items[ 0 ].dispose();
Fixture.fakeNewRequest( display );
Fixture.fakeSetParameter( getId( grid ),
"selection",
new String[] { getId( items[ 0 ] ), getId( items[ 2 ] ) } );
Fixture.readDataAndProcessAction( grid );
GridItem[] selectedItems = grid.getSelection();
assertEquals( 1, selectedItems.length );
assertSame( items[ 2 ], selectedItems[ 0 ] );
}
public void testReadScrollLeft() {
grid.setSize( 100, 100 );
createGridColumns( grid, 5, SWT.NONE );
createGridItems( grid, 10, 0 );
Fixture.fakeNewRequest( display );
Fixture.fakeSetParameter( getId( grid ), "scrollLeft", Integer.valueOf( 30 ) );
Fixture.readDataAndProcessAction( grid );
assertEquals( 30, grid.getHorizontalBar().getSelection() );
}
public void testReadTopIndex() {
grid.setSize( 100, 100 );
createGridColumns( grid, 5, SWT.NONE );
GridItem[] items = createGridItems( grid, 10, 3 );
items[ 4 ].setExpanded( true );
Fixture.fakeNewRequest( display );
Fixture.fakeSetParameter( getId( grid ), "topItemIndex", Integer.valueOf( 3 ) );
Fixture.readDataAndProcessAction( grid );
assertEquals( 3, grid.getVerticalBar().getSelection() );
assertEquals( 6, grid.getTopIndex() );
}
public void testProcessSelectionEvent() {
List<Event> events = new LinkedList<Event>();
GridItem item = new GridItem( grid, SWT.NONE );
grid.addListener( SWT.Selection, new LoggingListener( events ) );
Fixture.fakeNewRequest( display );
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
Fixture.readDataAndProcessAction( display );
assertEquals( 1, events.size() );
Event event = events.get( 0 );
assertEquals( SWT.Selection, event.type );
assertEquals( grid, event.widget );
assertEquals( item, event.item );
assertEquals( SWT.NONE, event.detail );
}
public void testProcessSelectionEvent_Check() {
List<Event> events = new LinkedList<Event>();
GridItem item = new GridItem( grid, SWT.NONE );
grid.addListener( SWT.Selection, new LoggingListener( events ) );
Fixture.fakeNewRequest( display );
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
parameters.put( ClientMessageConst.EVENT_PARAM_DETAIL, "check" );
parameters.put( ClientMessageConst.EVENT_PARAM_INDEX, Integer.valueOf( 3 ) );
Fixture.fakeNotifyOperation( getId( grid ), EVENT_SELECTION, parameters );
Fixture.readDataAndProcessAction( display );
assertEquals( 1, events.size() );
Event event = events.get( 0 );
assertEquals( SWT.Selection, event.type );
assertEquals( grid, event.widget );
assertEquals( item, event.item );
assertEquals( SWT.CHECK, event.detail );
assertEquals( 3, event.index );
}
public void testProcessDefaultSelectionEvent() {
List<Event> events = new LinkedList<Event>();
GridItem item = new GridItem( grid, SWT.NONE );
grid.addListener( SWT.DefaultSelection, new LoggingListener( events ) );
Fixture.fakeNewRequest( display );
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
Fixture.fakeNotifyOperation( getId( grid ), EVENT_DEFAULT_SELECTION, parameters );
Fixture.readDataAndProcessAction( display );
assertEquals( 1, events.size() );
Event event = events.get( 0 );
assertEquals( SWT.DefaultSelection, event.type );
assertEquals( grid, event.widget );
assertEquals( item, event.item );
assertEquals( SWT.NONE, event.detail );
}
public void testGetItemMetrics_CellLeft() {
GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
columns[ 0 ].setWidth( 100 );
columns[ 1 ].setWidth( 150 );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 0, metrics[ 0 ].left );
assertEquals( 100, metrics[ 1 ].left );
}
public void testGetItemMetrics_CellWidth() {
GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
columns[ 0 ].setWidth( 100 );
columns[ 1 ].setWidth( 150 );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 100, metrics[ 0 ].width );
assertEquals( 150, metrics[ 1 ].width );
}
public void testGetItemMetrics_ImageLeft() {
Image image1 = loadImage( display, Fixture.IMAGE_100x50 );
Image image2 = loadImage( display, Fixture.IMAGE_50x100 );
GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
columns[ 0 ].setWidth( 100 );
columns[ 1 ].setWidth( 150 );
GridItem[] items = createGridItems( grid, 3, 1 );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 0, metrics[ 0 ].imageLeft );
assertEquals( 106, metrics[ 1 ].imageLeft );
items[ 1 ].setImage( image2 );
items[ 0 ].setImage( 1, image1 );
metrics = GridLCA.getItemMetrics( grid );
assertEquals( 0, metrics[ 0 ].imageLeft );
assertEquals( 106, metrics[ 1 ].imageLeft );
}
public void testGetItemMetrics_ImageWidth() {
Image image1 = loadImage( display, Fixture.IMAGE_100x50 );
Image image2 = loadImage( display, Fixture.IMAGE_50x100 );
GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
columns[ 0 ].setWidth( 100 );
columns[ 1 ].setWidth( 150 );
GridItem[] items = createGridItems( grid, 3, 1 );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 0, metrics[ 0 ].imageWidth );
items[ 1 ].setImage( image2 );
items[ 0 ].setImage( image1 );
metrics = GridLCA.getItemMetrics( grid );
assertEquals( 50, metrics[ 0 ].imageWidth );
items[ 1 ].setImage( null );
items[ 0 ].setImage( null );
metrics = GridLCA.getItemMetrics( grid );
assertEquals( 0, metrics[ 0 ].imageWidth );
}
public void testGetItemMetrics_TextLeftWithImage() {
Image image = loadImage( display, Fixture.IMAGE_100x50 );
GridColumn[] columns = createGridColumns( grid, 2, SWT.NONE );
columns[ 0 ].setWidth( 100 );
columns[ 1 ].setWidth( 150 );
GridItem[] items = createGridItems( grid, 3, 1 );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 106, metrics[ 1 ].textLeft );
items[ 0 ].setImage( 1, image );
metrics = GridLCA.getItemMetrics( grid );
assertEquals( 206, metrics[ 1 ].textLeft );
}
public void testGetItemMetrics_TextLeftWithCheckbox() {
Image image = loadImage( display, Fixture.IMAGE_100x50 );
grid = new Grid( shell, SWT.CHECK );
GridColumn[] columns = createGridColumns( grid, 1, SWT.NONE );
columns[ 0 ].setWidth( 200 );
GridItem[] items = createGridItems( grid, 3, 1 );
items[ 0 ].setText( "item" );
items[ 0 ].setImage( image );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 123, metrics[ 0 ].textLeft );
}
public void testGetItemMetrics_TextWidthWithCheckbox() {
Image image = loadImage( display, Fixture.IMAGE_100x50 );
grid = new Grid( shell, SWT.CHECK );
GridColumn[] columns = createGridColumns( grid, 1, SWT.NONE );
columns[ 0 ].setWidth( 200 );
GridItem[] items = createGridItems( grid, 3, 1 );
items[ 0 ].setText( "item" );
items[ 0 ].setImage( image );
ItemMetrics[] metrics = GridLCA.getItemMetrics( grid );
assertEquals( 71, metrics[ 0 ].textWidth );
}
public void testRenderMarkupEnabled() throws IOException {
grid.setData( RWT.MARKUP_ENABLED, Boolean.TRUE );
lca.render( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findCreateProperty( grid, "markupEnabled" ) );
}
public void testRenderAddExpandListener() throws Exception {
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Expand" ) );
}
public void testRenderAddCollapseListener() throws Exception {
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertEquals( Boolean.TRUE, message.findListenProperty( grid, "Collapse" ) );
}
public void testDontRenderSetDataListenerTwice() throws Exception {
grid = new Grid( shell, SWT.VIRTUAL | SWT.MULTI );
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findListenOperation( grid, "SetData" ) );
}
public void testDontRenderSetDataWithoutVirtual() throws Exception {
Fixture.markInitialized( display );
Fixture.markInitialized( grid );
Fixture.preserveWidgets();
lca.renderChanges( grid );
Message message = Fixture.getProtocolMessage();
assertNull( message.findListenOperation( grid, "SetData" ) );
}
//////////////////
// Helping methods
private static void processCellToolTipRequest( Grid grid, String itemId, int column ) {
Fixture.fakeNewRequest( grid.getDisplay() );
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( "item", itemId );
parameters.put( "column", Integer.valueOf( column ) );
Fixture.fakeCallOperation( getId( grid ), "renderToolTipText", parameters );
Fixture.executeLifeCycleFromServerThread();
}
private void doFakeRedraw() {
grid.getAdapter( IGridAdapter.class ).doRedraw();
}
//////////////////
// Helping classes
private static class LoggingListener implements Listener {
private final List<Event> events;
private LoggingListener( List<Event> events ) {
this.events = events;
}
public void handleEvent( Event event ) {
events.add( event );
}
}
}