/******************************************************************************* * Copyright (c) 2012, 2015 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 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, [\"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, [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, [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, [[\"Arial\"], 20, true, false]]" ), 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,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, 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, 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, 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" ) ); } }