blob: 837d0db4d171c8e11d4bb307b52b1296bfa034c4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 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.griditemkit;
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.rap.rwt.internal.lifecycle.WidgetUtil.getId;
import static org.eclipse.rap.rwt.testfixture.internal.TestMessage.getParent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.eclipse.rap.json.JsonArray;
import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.json.JsonValue;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.internal.lifecycle.RemoteAdapter;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.internal.protocol.Operation.CreateOperation;
import org.eclipse.rap.rwt.internal.protocol.Operation.DestroyOperation;
import org.eclipse.rap.rwt.internal.remote.RemoteObjectImpl;
import org.eclipse.rap.rwt.internal.remote.RemoteObjectRegistry;
import org.eclipse.rap.rwt.remote.OperationHandler;
import org.eclipse.rap.rwt.testfixture.internal.Fixture;
import org.eclipse.rap.rwt.testfixture.internal.TestMessage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("restriction")
public class GridItemLCA_Test {
private Display display;
private Shell shell;
private Grid grid;
private GridItem item;
private GridItemLCA lca;
@Before
public void setUp() {
Fixture.setUp();
display = new Display();
shell = new Shell( display );
grid = new Grid( shell, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
item = new GridItem( grid, SWT.NONE );
lca = new GridItemLCA();
}
@After
public void tearDown() {
Fixture.tearDown();
}
@Test
public void testRenderCreate() throws IOException {
GridItem[] items = createGridItems( grid, 3, 3 );
lca.renderInitialization( items[ 8 ] );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( items[ 8 ] );
assertEquals( "rwt.widgets.GridItem", operation.getType() );
}
@Test
public void testRenderInitialization_setsOperationHandler() throws IOException {
String id = getId( item );
lca.renderInitialization( item );
OperationHandler handler = RemoteObjectRegistry.getInstance().get( id ).getHandler();
assertTrue( handler instanceof GridItemOperationHandler );
}
@Test
public void testRenderParent() throws IOException {
lca.renderInitialization( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertEquals( WidgetUtil.getId( item.getParent() ), getParent( operation ) );
}
@Test
public void testRenderParent_WithParentItem() throws IOException {
GridItem subitem = new GridItem( item, SWT.NONE );
lca.renderInitialization( subitem );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( subitem );
assertEquals( WidgetUtil.getId( item ), getParent( operation ) );
}
@Test
public void testRenderDispose() throws IOException {
lca.renderDispose( item );
TestMessage message = Fixture.getProtocolMessage();
DestroyOperation operation = ( DestroyOperation )message.getOperation( 0 );
assertEquals( WidgetUtil.getId( item ), operation.getTarget() );
}
@Test
public void testRenderDispose_WithDisposedGrid() throws IOException {
grid.dispose();
lca.renderDispose( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 0, message.getOperationCount() );
}
@Test
public void testRenderDispose_WithDisposedParentItem() throws IOException {
GridItem[] items = createGridItems( grid, 3, 3 );
items[ 0 ].dispose();
lca.renderDispose( items[ 1 ] );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 0, message.getOperationCount() );
}
@Test
public void testRenderDispose_withDisposedParent_destroysRemoteObjects() throws IOException {
lca.renderInitialization( item );
RemoteObjectImpl remoteObject = RemoteObjectRegistry.getInstance().get( getId( item ) );
grid.dispose();
lca.renderDispose( item );
assertTrue( remoteObject.isDestroyed() );
}
@Test
public void testRenderInitialIndex() throws IOException {
GridItem gridItem = new GridItem( grid, SWT.NONE );
lca.render( gridItem );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( gridItem );
assertEquals( 1, operation.getProperties().get( "index" ).asInt() );
}
@Test
public void testRenderIndex() throws IOException {
new GridItem( grid, SWT.NONE, 0 );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 1, message.findSetProperty( item, "index" ).asInt() );
}
@Test
public void testRenderIndex_VirtualAfterClear() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
Fixture.preserveWidgets();
new GridItem( grid, SWT.NONE, 0 );
grid.clear( 1, false );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 1, message.findSetProperty( item, "index" ).asInt() );
}
@Test
public void testRenderIndexWithParentItem() throws IOException {
GridItem rootItem = new GridItem( grid, SWT.NONE );
new GridItem( rootItem, SWT.NONE );
GridItem item = new GridItem( rootItem, SWT.NONE );
new GridItem( rootItem, SWT.NONE, 0 );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 2, message.findSetProperty( item, "index" ).asInt() );
}
@Test
public void testRenderIndexUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( item );
new GridItem( grid, SWT.NONE, 0 );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "index" ) );
}
@Test
public void testRenderCustomVariant() throws IOException {
item.setData( RWT.CUSTOM_VARIANT, "blue" );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( "variant_blue", message.findSetProperty( item, "customVariant" ).asString() );
}
@Test
public void testRenderInitialItemCount() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "itemCount" ) == -1 );
}
@Test
public void testRenderItemCount() throws IOException {
GridItem[] items = createGridItems( grid, 1, 10 );
lca.renderChanges( items[ 0 ] );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 10, message.findSetProperty( items[ 0 ], "itemCount" ).asInt() );
}
@Test
public void testRenderItemCountUnchanged() throws IOException {
GridItem[] items = createGridItems( grid, 1, 10 );
Fixture.markInitialized( display );
Fixture.markInitialized( items[ 0 ] );
Fixture.preserveWidgets();
lca.renderChanges( items[ 0 ] );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( items[ 0 ], "itemCount" ) );
}
@Test
public void testRenderInitialHeight() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "height" ) == -1 );
}
@Test
public void testRenderHeight() throws IOException {
item.setHeight( 10 );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 10, message.findSetProperty( item, "height" ).asInt() );
}
@Test
public void testRenderHeightUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setHeight( 10 );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "height" ) );
}
@Test
public void testRenderInitialTexts() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "texts" ) == -1 );
}
@Test
public void testRenderTexts() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
item.setText( 0, "item 0.0" );
item.setText( 1, "item 0.1" );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[\"\", \"item 0.0\", \"item 0.1\"]" );
assertEquals( expected, message.findSetProperty( item, "texts" ) );
}
@Test
public void testRenderTextsWithRowHeader() throws IOException {
grid.setRowHeaderVisible( true );
createGridColumns( grid, 2, SWT.NONE );
item.setHeaderText( "header 0" );
item.setText( 0, "item 0.0" );
item.setText( 1, "item 0.1" );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[\"header 0\", \"item 0.0\", \"item 0.1\"]" );
assertEquals( expected, message.findSetProperty( item, "texts" ) );
}
@Test
public void testRenderTextsUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setText( 0, "item 0.0" );
item.setText( 1, "item 0.1" );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "texts" ) );
}
@Test
public void testRenderTextsReset() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setText( 1, "item 0.1" );
Fixture.preserveWidgets();
item.setText( 1, "" );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "texts" ) );
}
@Test
public void testRenderInitialImages() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "images" ) == -1 );
}
@Test
public void testRenderImages() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Image image = loadImage( display, Fixture.IMAGE1 );
item.setImage( 1, image );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "images" );
String expected = "[null, null, [\"rwt-resources/generated/90fb0bfe.gif\",58,12]]";
assertEquals( JsonArray.readFrom( expected ), actual );
}
@Test
public void testRenderImagesWithRowHeader() throws IOException {
grid.setRowHeaderVisible( true );
createGridColumns( grid, 2, SWT.NONE );
Image image = loadImage( display, Fixture.IMAGE1 );
item.setHeaderImage( image );
item.setImage( 1, image );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "images" );
String expected = "[[\"rwt-resources/generated/90fb0bfe.gif\",58,12], "
+ "null, [\"rwt-resources/generated/90fb0bfe.gif\",58,12]]";
assertEquals( JsonArray.readFrom( expected ), actual );
}
@Test
public void testRenderImagesUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
Image image = loadImage( display, Fixture.IMAGE1 );
item.setImage( 1, image );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "images" ) );
}
@Test
public void testRenderImagesReset() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
Image image = loadImage( display, Fixture.IMAGE1 );
item.setImage( 1, image );
Fixture.preserveWidgets();
item.setImage( 1, null );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "images" ) );
}
@Test
public void testRenderInitialBackground() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "background" ) == -1 );
}
@Test
public void testRenderBackground() throws IOException {
item.setBackground( display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "background" );
assertEquals( JsonArray.readFrom( "[0,255,0,255]" ), actual );
}
@Test
public void testRenderBackgroundUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setBackground( display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "background" ) );
}
@Test
public void testRenderInitialForeground() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "foreground" ) == -1 );
}
@Test
public void testRenderForeground() throws IOException {
item.setForeground( display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "foreground" );
assertEquals( JsonArray.readFrom( "[0,255,0,255]" ), actual );
}
@Test
public void testRenderForegroundUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setForeground( display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "foreground" ) );
}
@Test
public void testRenderInitialFont() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "font" ) == -1 );
}
@Test
public void testRenderFont() throws IOException {
item.setFont( new Font( display, "Arial", 20, SWT.BOLD ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "font" );
assertEquals( JsonArray.readFrom( "[[\"Arial\"], 20, true, false]" ), actual );
}
@Test
public void testRenderFontUnchanged() throws IOException {
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setFont( new Font( display, "Arial", 20, SWT.BOLD ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "font" ) );
}
@Test
public void testRenderInitialCellBackgrounds() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellBackgrounds" ) == -1 );
}
@Test
public void testRenderCellBackgrounds() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
item.setBackground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellBackgrounds" );
assertEquals( JsonArray.readFrom( "[null, null, [0,255,0,255]]" ), actual );
}
@Test
public void testRenderCellBackgroundsWithRowHeader() throws IOException {
grid.setRowHeaderVisible( true );
createGridColumns( grid, 2, SWT.NONE );
item.setHeaderBackground( display.getSystemColor( SWT.COLOR_RED ) );
item.setBackground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellBackgrounds" );
assertEquals( JsonArray.readFrom( "[[255,0,0,255], null, [0,255,0,255]]" ), actual );
}
@Test
public void testRenderCellBackgroundsUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setBackground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellBackgrounds" ) );
}
@Test
public void testRenderCellBackgroundsReset() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setBackground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
item.setBackground( 1, null );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellBackgrounds" ) );
}
@Test
public void testRenderInitialCellForegrounds() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellForegrounds" ) == -1 );
}
@Test
public void testRenderCellForegrounds() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
item.setForeground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellForegrounds" );
assertEquals( JsonArray.readFrom( "[null, null, [0,255,0,255]]" ), actual );
}
@Test
public void testRenderCellForegroundsWithRowHeader() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
item.setHeaderForeground( display.getSystemColor( SWT.COLOR_RED ) );
item.setForeground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellForegrounds" );
assertEquals( JsonArray.readFrom( "[[255,0,0,255], null, [0,255,0,255]]" ), actual );
}
@Test
public void testRenderCellForegroundsUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setForeground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellForegrounds" ) );
}
@Test
public void testRenderCellForegroundsReset() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setForeground( 1, display.getSystemColor( SWT.COLOR_GREEN ) );
Fixture.preserveWidgets();
item.setForeground( 1, null );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellForegrounds" ) );
}
@Test
public void testRenderInitialCellFonts() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellFonts" ) == -1 );
}
@Test
public void testRenderCellFonts() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
item.setFont( 1, new Font( display, "Arial", 20, SWT.BOLD ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellFonts" );
assertEquals( JsonArray.readFrom( "[null, null, [[\"Arial\"], 20, true, false]]" ), actual );
}
@Test
public void testRenderCellFontsWithRowHeader() throws IOException {
grid.setRowHeaderVisible( true );
createGridColumns( grid, 2, SWT.NONE );
Font font = new Font( display, "Arial", 20, SWT.BOLD );
item.setHeaderFont( font );
item.setFont( 1, font );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonValue actual = message.findSetProperty( item, "cellFonts" );
JsonArray expected = JsonArray.readFrom( "[[[\"Arial\"], 20, true, false], "
+ "null, [[\"Arial\"], 20, true, false]]" );
assertEquals( expected, actual );
}
@Test
public void testRenderCellFontsUnchanged() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setFont( 1, new Font( display, "Arial", 20, SWT.BOLD ) );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellFonts" ) );
}
@Test
public void testRenderCellFontsReset() throws IOException {
createGridColumns( grid, 2, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setFont( 1, new Font( display, "Arial", 20, SWT.BOLD ) );
Fixture.preserveWidgets();
item.setFont( 1, null );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellFonts" ) );
}
@Test
public void testRenderInitialExpanded() throws IOException {
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "expanded" ) == -1 );
}
@Test
public void testRenderExpanded() throws IOException {
new GridItem( item, SWT.NONE );
item.setExpanded( true );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.TRUE, message.findSetProperty( item, "expanded" ) );
}
@Test
public void testRenderExpandedUnchanged() throws IOException {
new GridItem( item, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setExpanded( true );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "expanded" ) );
}
@Test
public void testRenderInitialCellChecked() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellChecked" ) == -1 );
}
@Test
public void testRenderCellChecked() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
item.setChecked( 1, true );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[false,false,true]" );
assertEquals( expected, message.findSetProperty( item, "cellChecked" ) );
}
@Test
public void testRenderCellCheckedUnchanged() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setChecked( 1, true );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellChecked" ) );
}
@Test
public void testRenderCellCheckedReset() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setChecked( 1, true );
Fixture.preserveWidgets();
item.setChecked( 1, false );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellChecked" ) );
}
@Test
public void testRenderInitialCellGrayed() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellGrayed" ) == -1 );
}
@Test
public void testRenderCellGrayed() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
item.setGrayed( 1, true );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[false, false, true]" );
assertEquals( expected, message.findSetProperty( item, "cellGrayed" ) );
}
@Test
public void testRenderGrayedUnchanged() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setGrayed( 1, true );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellGrayed" ) );
}
@Test
public void testRenderGrayedReset() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setGrayed( 1, true );
Fixture.preserveWidgets();
item.setGrayed( 1, false );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellGrayed" ) );
}
@Test
public void testRenderInitialCellCheckable() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "cellCheckable" ) == -1 );
}
@Test
public void testRenderCellCheckable() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
item.setCheckable( 1, false );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[true, true, false]" );
assertEquals( expected, message.findSetProperty( item, "cellCheckable" ) );
}
@Test
public void testRenderCellCheckableUnchanged() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setCheckable( 1, false );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "cellCheckable" ) );
}
@Test
public void testRenderCellCheckableReset() throws IOException {
grid = new Grid( shell, SWT.CHECK );
createGridColumns( grid, 2, SWT.NONE );
item = new GridItem( grid, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setCheckable( 1, false );
Fixture.preserveWidgets();
item.setCheckable( 1, true );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "cellCheckable" ) );
}
@Test
public void testRenderInitialColumnSpans() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
lca.render( item );
TestMessage message = Fixture.getProtocolMessage();
CreateOperation operation = message.findCreateOperation( item );
assertTrue( operation.getProperties().names().indexOf( "columnSpans" ) == -1 );
}
@Test
public void testRenderColumnSpans() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
item.setColumnSpan( 1, 1 );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonArray expected = JsonArray.readFrom( "[0, 0, 1, 0]" );
assertEquals( expected, message.findSetProperty( item, "columnSpans" ) );
}
@Test
public void testRenderColumnSpansUnchanged() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setColumnSpan( 1, 1 );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findSetOperation( item, "columnSpans" ) );
}
@Test
public void testRenderColumnSpansReset() throws IOException {
createGridColumns( grid, 3, SWT.NONE );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
item.setColumnSpan( 1, 1 );
Fixture.preserveWidgets();
item.setColumnSpan( 1, 0 );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( JsonValue.NULL, message.findSetProperty( item, "columnSpans" ) );
}
@Test
public void testRenderData() throws IOException {
WidgetUtil.registerDataKeys( new String[]{ "foo", "bar" } );
item.setData( "foo", "string" );
item.setData( "bar", Integer.valueOf( 1 ) );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
JsonObject data = ( JsonObject )message.findSetProperty( item, "data" );
assertEquals( "string", data.get( "foo" ).asString() );
assertEquals( 1, data.get( "bar" ).asInt() );
}
@Test
public void testRenderDataUnchanged() throws IOException {
WidgetUtil.registerDataKeys( new String[]{ "foo" } );
item.setData( "foo", "string" );
Fixture.markInitialized( display );
Fixture.markInitialized( item );
Fixture.preserveWidgets();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertEquals( 0, message.getOperationCount() );
}
@Test
public void testRender_onVirtual() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
grid.setItemCount( 1 );
// Ensure that nothing is written for an item that is virtual and whose
// cached was false and remains unchanged while processing the life cycle
GridItem item = grid.getItem( 0 );
grid.clear( 0, false );
Fixture.markInitialized( item );
// Ensure that nothing else than the 'index' and 'cached' property gets preserved
lca.preserveValues( item );
RemoteAdapter adapter = WidgetUtil.getAdapter( item );
assertEquals( Boolean.FALSE, adapter.getPreserved( "cached" ) );
assertEquals( Integer.valueOf( 0 ), adapter.getPreserved( "index" ) );
assertNull( adapter.getPreserved( "itemCount" ) );
assertNull( adapter.getPreserved( "texts" ) );
assertNull( adapter.getPreserved( "images" ) );
assertNull( adapter.getPreserved( "cellChecked" ) );
// ... and no operations are generated for a uncached item that was already
// uncached when entering the life cycle
lca.renderChanges( item );
assertEquals( 0, Fixture.getProtocolMessage().getOperationCount() );
}
@Test
public void testRender_onVirtual_rendersOnlyChangedProperties() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
grid.setItemCount( 1 );
GridItem item = grid.getItem( 0 );
Fixture.markInitialized( item );
lca.preserveValues( item );
item.setText( "foo" );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNotNull( message.findSetOperation( item, "texts" ) );
assertNull( message.findSetOperation( item, "itemCount" ) );
assertNull( message.findSetOperation( item, "height" ) );
assertNull( message.findSetOperation( item, "images" ) );
assertNull( message.findSetOperation( item, "cellChecked" ) );
assertNull( message.findSetOperation( item, "cellGrayed" ) );
assertNull( message.findSetOperation( item, "cellCheckable" ) );
assertNull( message.findSetOperation( item, "font" ) );
assertNull( message.findSetOperation( item, "foreground" ) );
assertNull( message.findSetOperation( item, "background" ) );
assertNull( message.findSetOperation( item, "cellFonts" ) );
assertNull( message.findSetOperation( item, "cellBackgrounds" ) );
assertNull( message.findSetOperation( item, "cellForegrounds" ) );
}
@Test
public void testRender_onVirtual_preservesInitializedFlag() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
grid.setItemCount( 1 );
GridItem item = grid.getItem( 0 );
Fixture.markInitialized( item );
lca.preserveValues( item );
item.setText( "foo" );
lca.renderChanges( item );
assertTrue( WidgetUtil.getAdapter( item ).isInitialized() );
}
@Test
public void testRenderClear_onNonInitializedItem() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
grid.setItemCount( 1 );
GridItem item = grid.getItem( 0 );
item.getText();
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNull( message.findCallOperation( item, "clear" ) );
}
@Test
public void testRenderClear_onInitializedItem() throws IOException {
grid = new Grid( shell, SWT.VIRTUAL );
grid.setItemCount( 1 );
GridItem item = grid.getItem( 0 );
item.getText();
Fixture.markInitialized( item );
lca.preserveValues( item );
grid.clear( 0, false );
lca.renderChanges( item );
TestMessage message = Fixture.getProtocolMessage();
assertNotNull( message.findCallOperation( item, "clear" ) );
}
}