| /******************************************************************************* |
| * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH 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: |
| * Innoopract Informationssysteme GmbH - initial API and implementation |
| * EclipseSource - ongoing development |
| ******************************************************************************/ |
| package org.eclipse.rap.rwt.lifecycle; |
| |
| import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_DEFAULT_SELECTION; |
| import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId; |
| import static org.mockito.Matchers.any; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.never; |
| import static org.mockito.Mockito.times; |
| import static org.mockito.Mockito.verify; |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import junit.framework.TestCase; |
| |
| import org.eclipse.rap.rwt.graphics.Graphics; |
| import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst; |
| import org.eclipse.rap.rwt.internal.protocol.ProtocolTestUtil; |
| import org.eclipse.rap.rwt.testfixture.Fixture; |
| import org.eclipse.rap.rwt.testfixture.Message; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.FocusAdapter; |
| import org.eclipse.swt.events.HelpEvent; |
| import org.eclipse.swt.events.HelpListener; |
| import org.eclipse.swt.events.KeyEvent; |
| import org.eclipse.swt.events.KeyListener; |
| import org.eclipse.swt.events.MenuDetectEvent; |
| import org.eclipse.swt.events.MenuDetectListener; |
| import org.eclipse.swt.events.MouseAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.events.SelectionListener; |
| import org.eclipse.swt.events.TraverseListener; |
| import org.eclipse.swt.graphics.Font; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.internal.graphics.ImageFactory; |
| import org.eclipse.swt.internal.widgets.shellkit.ShellLCA; |
| import org.eclipse.swt.widgets.Button; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Item; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Menu; |
| import org.eclipse.swt.widgets.Shell; |
| import org.json.JSONArray; |
| import org.json.JSONException; |
| import org.json.JSONObject; |
| import org.mockito.ArgumentCaptor; |
| |
| |
| @SuppressWarnings("deprecation") |
| public class ControlLCAUtil_Test extends TestCase { |
| |
| private Display display; |
| private Shell shell; |
| private Button control; |
| |
| @Override |
| protected void setUp() throws Exception { |
| Fixture.setUp(); |
| display = new Display(); |
| shell = new Shell( display ); |
| control = new Button( shell, SWT.PUSH ); |
| control.setSize( 10, 10 ); // Would be rendered as invisible otherwise |
| Fixture.fakeNewRequest( display ); |
| Fixture.fakePhase( PhaseId.PROCESS_ACTION ); |
| } |
| |
| @Override |
| protected void tearDown() throws Exception { |
| display.dispose(); |
| Fixture.tearDown(); |
| } |
| |
| public void testProcessSelectionForControl() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| fakeSelectionEvent( control, null, null ); |
| ControlLCAUtil.processSelection( control, null, true ); |
| |
| verify( listener, never() ).widgetDefaultSelected( any( SelectionEvent.class ) ); |
| ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class ); |
| verify( listener ).widgetSelected( captor.capture() ); |
| SelectionEvent event = captor.getValue(); |
| assertEquals( control, event.widget ); |
| assertEquals( control.getBounds(), |
| new Rectangle( event.x, event.y, event.width, event.height ) ); |
| } |
| |
| public void testProcessSelectionForControlWithItem() { |
| Item item = mock( Item.class ); |
| Listener listener = mock( Listener.class ); |
| control.addListener( SWT.Selection, listener ); |
| |
| fakeSelectionEvent( control, null, null ); |
| ControlLCAUtil.processSelection( control, item, true ); |
| |
| ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class ); |
| verify( listener ).handleEvent( captor.capture() ); |
| Event event = captor.getValue(); |
| assertEquals( control, event.widget ); |
| assertEquals( item, event.item ); |
| assertEquals( SWT.Selection, event.type ); |
| assertEquals( control.getBounds(), event.getBounds() ); |
| } |
| |
| public void testProcessSelectionWithStateMask() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| fakeSelectionEvent( control, "altKey", "true" ); |
| ControlLCAUtil.processSelection( control, null, true ); |
| |
| verify( listener, never() ).widgetDefaultSelected( any( SelectionEvent.class ) ); |
| ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class ); |
| verify( listener ).widgetSelected( captor.capture() ); |
| SelectionEvent event = captor.getValue(); |
| assertEquals( control, event.widget ); |
| assertTrue( ( event.stateMask & SWT.ALT ) != 0 ); |
| assertEquals( control.getBounds(), |
| new Rectangle( event.x, event.y, event.width, event.height ) ); |
| } |
| |
| public void testProcessSelectionWithoutReadingBounds() { |
| Listener listener = mock( Listener.class ); |
| control.addListener( SWT.Selection, listener ); |
| |
| fakeSelectionEvent( control, null, null ); |
| ControlLCAUtil.processSelection( control, null, false ); |
| |
| ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class ); |
| verify( listener ).handleEvent( captor.capture() ); |
| Event event = captor.getValue(); |
| assertEquals( control, event.widget ); |
| assertEquals( SWT.Selection, event.type ); |
| assertEquals( 0, event.x ); |
| assertEquals( 0, event.y ); |
| assertEquals( 0, event.width ); |
| assertEquals( 0, event.height ); |
| } |
| |
| public void testProcessSelectionWithDetailChecked() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| fakeSelectionEvent( control, ClientMessageConst.EVENT_PARAM_DETAIL, "check" ); |
| ControlLCAUtil.processSelection( control, null, false ); |
| |
| ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class ); |
| verify( listener ).widgetSelected( captor.capture() ); |
| SelectionEvent event = captor.getValue(); |
| assertEquals( SWT.CHECK, event.detail ); |
| } |
| |
| public void testProcessSelectionWithDetailSearch() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| fakeSelectionEvent( control, ClientMessageConst.EVENT_PARAM_DETAIL, "search" ); |
| ControlLCAUtil.processSelection( control, null, false ); |
| |
| ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class ); |
| verify( listener ).widgetSelected( captor.capture() ); |
| SelectionEvent event = captor.getValue(); |
| assertEquals( SWT.ICON_SEARCH, event.detail ); |
| } |
| |
| public void testProcessSelectionWithDetailCancel() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| fakeSelectionEvent( control, ClientMessageConst.EVENT_PARAM_DETAIL, "cancel" ); |
| ControlLCAUtil.processSelection( control, null, false ); |
| |
| ArgumentCaptor<SelectionEvent> captor = ArgumentCaptor.forClass( SelectionEvent.class ); |
| verify( listener ).widgetSelected( captor.capture() ); |
| SelectionEvent event = captor.getValue(); |
| assertEquals( SWT.CANCEL, event.detail ); |
| } |
| |
| public void testProcessDefaultSelection() { |
| SelectionListener listener = mock( SelectionListener.class ); |
| control.addSelectionListener( listener ); |
| |
| Fixture.fakeNotifyOperation( getId( control ), EVENT_DEFAULT_SELECTION, null ); |
| ControlLCAUtil.processDefaultSelection( control, null ); |
| |
| verify( listener, never() ).widgetSelected( any( SelectionEvent.class ) ); |
| verify( listener ).widgetDefaultSelected( any( SelectionEvent.class ) ); |
| } |
| |
| public void testProcessKeyEventWithDisplayFilter() { |
| shell.open(); |
| Listener listener = mock( Listener.class ); |
| display.addFilter( SWT.KeyDown, listener ); |
| |
| fakeKeyDown( getId( shell ), 65, 97, "" ); |
| Fixture.readDataAndProcessAction( display ); |
| |
| ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class ); |
| verify( listener, times( 1 ) ).handleEvent( captor.capture() ); |
| assertEquals( 97, captor.getValue().keyCode ); |
| assertEquals( 'a', captor.getValue().character ); |
| assertEquals( 0, captor.getValue().stateMask ); |
| } |
| |
| public void testProcessKeyEventWithLowerCaseCharacter() { |
| shell.open(); |
| KeyListener listener = mock( KeyListener.class ); |
| shell.addKeyListener( listener ); |
| |
| fakeKeyDown( getId( shell ), 65, 97, "" ); |
| Fixture.readDataAndProcessAction( shell ); |
| |
| ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass( KeyEvent.class ); |
| verify( listener, times( 1 ) ).keyPressed( captor.capture() ); |
| assertEquals( 97, captor.getValue().keyCode ); |
| assertEquals( 'a', captor.getValue().character ); |
| assertEquals( 0, captor.getValue().stateMask ); |
| } |
| |
| public void testProcessKeyEventWithUpperCaseCharacter() { |
| shell.open(); |
| KeyListener listener = mock( KeyListener.class ); |
| shell.addKeyListener( listener ); |
| |
| fakeKeyDown( getId( shell ), 65, 65, "" ); |
| Fixture.readDataAndProcessAction( shell ); |
| |
| ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass( KeyEvent.class ); |
| verify( listener, times( 1 ) ).keyPressed( captor.capture() ); |
| assertEquals( 97, captor.getValue().keyCode ); |
| assertEquals( 'A', captor.getValue().character ); |
| assertEquals( 0, captor.getValue().stateMask ); |
| } |
| |
| public void testProcessKeyEventWithDigitCharacter() { |
| shell.open(); |
| KeyListener listener = mock( KeyListener.class ); |
| shell.addKeyListener( listener ); |
| |
| fakeKeyDown( getId( shell ), 49, 49, "" ); |
| Fixture.readDataAndProcessAction( shell ); |
| |
| ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass( KeyEvent.class ); |
| verify( listener, times( 1 ) ).keyPressed( captor.capture() ); |
| assertEquals( 49, captor.getValue().keyCode ); |
| assertEquals( 49, captor.getValue().character ); |
| assertEquals( 0, captor.getValue().stateMask ); |
| } |
| |
| public void testProcessKeyEventWithPunctuationCharacter() { |
| shell.open(); |
| KeyListener listener = mock( KeyListener.class ); |
| shell.addKeyListener( listener ); |
| |
| fakeKeyDown( getId( shell ), 49, 33, "" ); |
| Fixture.readDataAndProcessAction( shell ); |
| |
| ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass( KeyEvent.class ); |
| verify( listener, times( 1 ) ).keyPressed( captor.capture() ); |
| assertEquals( 49, captor.getValue().keyCode ); |
| assertEquals( 33, captor.getValue().character ); |
| assertEquals( 0, captor.getValue().stateMask ); |
| } |
| |
| public void testKeyAndTraverseEvents() { |
| final List<Event> eventLog = new ArrayList<Event>(); |
| shell.open(); |
| Listener listener = new Listener() { |
| public void handleEvent( Event event ) { |
| eventLog.add( event ); |
| } |
| }; |
| shell.addListener( SWT.Traverse, listener ); |
| shell.addListener( SWT.KeyDown, listener ); |
| shell.addListener( SWT.KeyUp, listener ); |
| |
| fakeTraverse( getId( shell ), 27, 0, "" ); |
| Fixture.readDataAndProcessAction( display ); |
| |
| assertEquals( 3, eventLog.size() ); |
| Event traverseEvent = eventLog.get( 0 ); |
| assertEquals( SWT.Traverse, traverseEvent.type ); |
| assertEquals( SWT.TRAVERSE_ESCAPE, traverseEvent.detail ); |
| assertTrue( traverseEvent.doit ); |
| Event downEvent = eventLog.get( 1 ); |
| assertEquals( SWT.KeyDown, downEvent.type ); |
| Event upEvent = eventLog.get( 2 ); |
| assertEquals( SWT.KeyUp, upEvent.type ); |
| } |
| |
| public void testGetTraverseKey() { |
| int traverseKey; |
| traverseKey = ControlLCAUtil.getTraverseKey( 13, 0 ); |
| assertEquals( traverseKey, SWT.TRAVERSE_RETURN ); |
| traverseKey = ControlLCAUtil.getTraverseKey( 27, 0 ); |
| assertEquals( traverseKey, SWT.TRAVERSE_ESCAPE ); |
| traverseKey = ControlLCAUtil.getTraverseKey( 9, 0 ); |
| assertEquals( traverseKey, SWT.TRAVERSE_TAB_NEXT ); |
| traverseKey = ControlLCAUtil.getTraverseKey( 9, SWT.SHIFT ); |
| assertEquals( traverseKey, SWT.TRAVERSE_TAB_PREVIOUS ); |
| traverseKey = ControlLCAUtil.getTraverseKey( 9, SWT.SHIFT | SWT.CTRL ); |
| assertEquals( traverseKey, SWT.TRAVERSE_NONE ); |
| } |
| |
| public void testTranslateKeyCode() { |
| int keyCode; |
| keyCode = ControlLCAUtil.translateKeyCode( 40 ); |
| assertEquals( SWT.ARROW_DOWN, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 37 ); |
| assertEquals( SWT.ARROW_LEFT, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 38 ); |
| assertEquals( SWT.ARROW_UP, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 39 ); |
| assertEquals( SWT.ARROW_RIGHT, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 20 ); |
| assertEquals( SWT.CAPS_LOCK, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 36 ); |
| assertEquals( SWT.HOME, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 115 ); |
| assertEquals( SWT.F4, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 123 ); |
| assertEquals( SWT.F12, keyCode ); |
| keyCode = ControlLCAUtil.translateKeyCode( 18 ); |
| assertEquals( SWT.ALT, keyCode ); |
| } |
| |
| public void testProcessHelpEvent() { |
| shell.open(); |
| HelpListener listener = mock( HelpListener.class ); |
| shell.addHelpListener( listener ); |
| |
| Fixture.fakeNotifyOperation( getId( shell ), ClientMessageConst.EVENT_HELP, null ); |
| Fixture.readDataAndProcessAction( shell ); |
| |
| verify( listener, times( 1 ) ).helpRequested( any( HelpEvent.class) ); |
| } |
| |
| public void testRenderFocusListener_NotFocusableControl() { |
| Label control = new Label( shell, SWT.NONE ); |
| Fixture.fakeResponseWriter(); |
| ControlLCAUtil.preserveValues( control ); |
| Fixture.markInitialized( control ); |
| Fixture.markInitialized( display ); |
| |
| control.addFocusListener( new FocusAdapter() {} ); |
| ControlLCAUtil.renderChanges( control ); |
| |
| assertEquals( 0, Fixture.getProtocolMessage().getOperationCount() ); |
| } |
| |
| ////////////////////////////////////////////// |
| // Tests for new render methods using protocol |
| |
| public void testRenderVisibilityIntiallyFalse() { |
| control.setVisible( false ); |
| ControlLCAUtil.renderVisible( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findSetProperty( control, "visibility" ) ); |
| } |
| |
| public void testRenderVisibilityInitiallyTrue() { |
| ControlLCAUtil.renderVisible( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "visibility" ) ); |
| } |
| |
| public void testRenderVisibilityUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setVisible( false ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderVisible( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "visibility" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderBoundsIntiallyZero() throws JSONException { |
| control = new Button( shell, SWT.PUSH ); |
| ControlLCAUtil.renderBounds( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray bounds = ( JSONArray )message.findSetProperty( control, "bounds" ); |
| assertTrue( ProtocolTestUtil.jsonEquals( "[ 0, 0, 0, 0 ]", bounds ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderBoundsInitiallySet() throws JSONException { |
| control.setBounds( 10, 20, 100, 200 ); |
| ControlLCAUtil.renderBounds( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray bounds = ( JSONArray )message.findSetProperty( control, "bounds" ); |
| assertTrue( ProtocolTestUtil.jsonEquals( "[ 10, 20, 100, 200 ]", bounds ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderBoundsUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setBounds( 10, 20, 100, 200 ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderBounds( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "bounds" ) ); |
| } |
| |
| public void testRenderIntialChildren() throws JSONException { |
| ControlLCAUtil.renderChildren( shell ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray actual = ( JSONArray )message.findSetProperty( shell, "children" ); |
| assertTrue( ProtocolTestUtil.jsonEquals( "[" + WidgetUtil.getId( control ) + "]", actual ) ); |
| } |
| |
| public void testRenderChildren() throws JSONException { |
| Button button = new Button( shell, SWT.PUSH ); |
| control.moveBelow( button ); |
| ControlLCAUtil.renderChildren( shell ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray actual = ( JSONArray )message.findSetProperty( shell, "children" ); |
| String expected = "[" + WidgetUtil.getId( button ) + "," + WidgetUtil.getId( control ) + "]"; |
| assertTrue( ProtocolTestUtil.jsonEquals( expected, actual ) ); |
| } |
| |
| public void testRenderChildrenOnNotComposite() { |
| ControlLCAUtil.renderChildren( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "children" ) ); |
| } |
| |
| public void testRenderChildrenUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( shell ); |
| control.moveBelow( new Button( shell, SWT.PUSH ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderChildren( shell ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( shell, "children" ) ); |
| } |
| |
| public void testRenderIntialTabIndex() throws IOException { |
| ShellLCA shellLCA = new ShellLCA(); |
| shellLCA.renderChanges( shell ); |
| Fixture.fakeResponseWriter(); |
| ControlLCAUtil.renderTabIndex( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( new Integer( 1 ), message.findSetProperty( control, "tabIndex" ) ); |
| } |
| |
| public void testRenderTabIndex() throws IOException { |
| shell.setTabList( new Control[]{ new Button( shell, SWT.PUSH ), control } ); |
| ShellLCA shellLCA = new ShellLCA(); |
| shellLCA.renderChanges( shell ); |
| Fixture.fakeResponseWriter(); |
| ControlLCAUtil.renderTabIndex( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( new Integer( 2 ), message.findSetProperty( control, "tabIndex" ) ); |
| } |
| |
| public void testRenderTabIndexUnchanged() throws IOException { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.moveBelow( new Button( shell, SWT.PUSH ) ); |
| ShellLCA shellLCA = new ShellLCA(); |
| shellLCA.renderChanges( shell ); |
| Fixture.fakeResponseWriter(); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderTabIndex( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "tabIndex" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderIntialToolTip() { |
| ControlLCAUtil.renderToolTip( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "toolTip" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderToolTip() { |
| control.setToolTipText( "foo" ); |
| ControlLCAUtil.renderToolTip( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( "foo", message.findSetProperty( control, "toolTip" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderToolTipUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setToolTipText( "foo" ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderToolTip( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "toolTip" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderIntialMenu() { |
| ControlLCAUtil.renderMenu( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "menu" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderMenu() { |
| control.setMenu( new Menu( shell ) ); |
| ControlLCAUtil.renderMenu( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| String expected = WidgetUtil.getId( control.getMenu() ); |
| assertEquals( expected, message.findSetProperty( control, "menu" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderMenuUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setMenu( new Menu( shell ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderMenu( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "menu" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderIntialEnabled() { |
| ControlLCAUtil.renderEnabled( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "enabled" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderEnabled() { |
| control.setEnabled( false ); |
| ControlLCAUtil.renderEnabled( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findSetProperty( control, "enabled" ) ); |
| } |
| |
| // TODO [tb] : Move to WidgetLCAUtil_Test? |
| public void testRenderEnabledUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setEnabled( false ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderEnabled( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "enabled" ) ); |
| } |
| |
| public void testRenderIntialBackgroundImage() { |
| ControlLCAUtil.renderBackgroundImage( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "backgroundImage" ) ); |
| } |
| |
| public void testRenderBackgroundImage() throws JSONException { |
| Image image = Graphics.getImage( Fixture.IMAGE1 ); |
| |
| control.setBackgroundImage( image ); |
| ControlLCAUtil.renderBackgroundImage( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| String imageLocation = ImageFactory.getImagePath( image ); |
| JSONArray args = ( JSONArray )message.findSetProperty( control, "backgroundImage" ); |
| String expected = "[ \"" + imageLocation + "\", 58, 12 ]"; |
| assertTrue( ProtocolTestUtil.jsonEquals( expected, args ) ); |
| } |
| |
| public void testRenderBackgroundImageUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setBackgroundImage( Graphics.getImage( Fixture.IMAGE1 ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderBackgroundImage( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "backgroundImage" ) ); |
| } |
| |
| public void testRenderInitialFont() { |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "font" ) ); |
| } |
| |
| public void testRenderFont() throws JSONException { |
| control.setFont( new Font( display, "Arial", 12, SWT.NORMAL ) ); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray result = ( JSONArray )message.findSetProperty( control, "font" ); |
| assertEquals( 4, result.length() ); |
| assertEquals( "Arial", ( ( JSONArray )result.get( 0 ) ).getString( 0 ) ); |
| assertEquals( 12, result.getInt( 1 ) ); |
| assertEquals( false, result.getBoolean( 2 ) ); |
| assertEquals( false, result.getBoolean( 3 ) ); |
| } |
| |
| public void testRenderFontBold() throws JSONException { |
| control.setFont( new Font( display, "Arial", 12, SWT.BOLD ) ); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray result = ( JSONArray )message.findSetProperty( control, "font" ); |
| assertEquals( true, result.getBoolean( 2 ) ); |
| assertEquals( false, result.getBoolean( 3 ) ); |
| } |
| |
| public void testRenderFontItalic() throws JSONException { |
| control.setFont( new Font( display, "Arial", 12, SWT.ITALIC ) ); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray result = ( JSONArray )message.findSetProperty( control, "font" ); |
| assertEquals( false, result.getBoolean( 2 ) ); |
| assertEquals( true, result.getBoolean( 3 ) ); |
| } |
| |
| public void testRenderFontItalicAndBold() throws JSONException { |
| control.setFont( new Font( display, "Arial", 12, SWT.ITALIC | SWT.BOLD ) ); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| JSONArray result = ( JSONArray )message.findSetProperty( control, "font" ); |
| assertEquals( true, result.getBoolean( 2 ) ); |
| assertEquals( true, result.getBoolean( 3 ) ); |
| } |
| |
| public void testRenderFontUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setFont( new Font( display, "Arial", 12, SWT.NORMAL ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "font" ) ); |
| } |
| |
| public void testResetFont() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setFont( new Font( display, "Arial", 12, SWT.NORMAL ) ); |
| |
| Fixture.preserveWidgets(); |
| control.setFont( null ); |
| ControlLCAUtil.renderFont( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( JSONObject.NULL, message.findSetProperty( control, "font" ) ); |
| } |
| |
| public void testRenderInitialCursor() { |
| ControlLCAUtil.renderCursor( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "cursor" ) ); |
| } |
| |
| public void testRenderCursor() { |
| control.setCursor( display.getSystemCursor( SWT.CURSOR_HAND ) ); |
| ControlLCAUtil.renderCursor( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( "pointer", message.findSetProperty( control, "cursor" ) ); |
| } |
| |
| public void testRenderCursorUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setCursor( display.getSystemCursor( SWT.CURSOR_HAND ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderCursor( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findSetOperation( control, "cursor" ) ); |
| } |
| |
| public void testResetCursor() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.setCursor( display.getSystemCursor( SWT.CURSOR_HAND ) ); |
| |
| Fixture.preserveWidgets(); |
| control.setCursor( null ); |
| ControlLCAUtil.renderCursor( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( JSONObject.NULL, message.findSetProperty( control, "cursor" ) ); |
| } |
| |
| public void testRenderInitialListenActivate() { |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "Activate" ) ); |
| assertNull( message.findListenOperation( control, "Deactivate" ) ); |
| } |
| |
| public void testRenderListenActivate() { |
| control.addListener( SWT.Activate, mock( Listener.class ) ); |
| |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "Activate" ) ); |
| } |
| |
| public void testRenderListenDeactivate() { |
| control.addListener( SWT.Deactivate, mock( Listener.class ) ); |
| |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "Deactivate" ) ); |
| } |
| |
| public void testRenderListenActivateUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addListener( SWT.Activate, mock( Listener.class ) ); |
| control.addListener( SWT.Deactivate, mock( Listener.class ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "Activate" ) ); |
| assertNull( message.findListenOperation( control, "Deactivate" ) ); |
| } |
| |
| public void testRenderListenActivateRemoved() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| Listener listener = mock( Listener.class ); |
| control.addListener( SWT.Activate, listener ); |
| control.addListener( SWT.Deactivate, listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeListener( SWT.Activate, listener ); |
| control.removeListener( SWT.Deactivate, listener ); |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "Activate" ) ); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "Deactivate" ) ); |
| } |
| |
| public void testRenderNoListenActivateOnDispose() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| Fixture.preserveWidgets(); |
| control.addListener( SWT.Activate, mock( Listener.class ) ); |
| |
| control.dispose(); |
| ControlLCAUtil.renderListenActivate( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "activate" ) ); |
| } |
| |
| public void testRenderInitialListenFocus() { |
| ControlLCAUtil.renderListenFocus( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "FocusIn" ) ); |
| assertNull( message.findListenOperation( control, "FocusIn" ) ); |
| } |
| |
| public void testRenderListenFocus() { |
| FocusAdapter listener = new FocusAdapter() {}; |
| |
| control.addFocusListener( listener ); |
| ControlLCAUtil.renderListenFocus( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "FocusIn" ) ); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "FocusOut" ) ); |
| } |
| |
| public void testRenderListenFocusUnchanged() { |
| FocusAdapter listener = new FocusAdapter() {}; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addFocusListener( listener ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenFocus( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "FocusIn" ) ); |
| assertNull( message.findListenOperation( control, "FocusIn" ) ); |
| } |
| |
| public void testRenderListenFocusRemoved() { |
| FocusAdapter listener = new FocusAdapter() {}; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addFocusListener( listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeFocusListener( listener ); |
| ControlLCAUtil.renderListenFocus( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "FocusIn" ) ); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "FocusOut" ) ); |
| } |
| |
| public void testRenderInitialListenMouse() { |
| ControlLCAUtil.renderListenMouse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "MouseDown" ) ); |
| assertNull( message.findListenOperation( control, "MouseDoubleClick" ) ); |
| assertNull( message.findListenOperation( control, "MouseUp" ) ); |
| } |
| |
| public void testRenderListenMouse() { |
| MouseAdapter listener = new MouseAdapter() {}; |
| |
| control.addMouseListener( listener ); |
| ControlLCAUtil.renderListenMouse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "MouseDown" ) ); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "MouseDoubleClick" ) ); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "MouseUp" ) ); |
| } |
| |
| public void testRenderListenMouseUnchanged() { |
| MouseAdapter listener = new MouseAdapter() {}; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addMouseListener( listener ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenMouse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "MouseDown" ) ); |
| assertNull( message.findListenOperation( control, "MouseDoubleClick" ) ); |
| assertNull( message.findListenOperation( control, "MouseUp" ) ); |
| } |
| |
| public void testRenderListenMouseRemoved() { |
| MouseAdapter listener = new MouseAdapter() { |
| }; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addMouseListener( listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeMouseListener( listener ); |
| ControlLCAUtil.renderListenMouse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "MouseDown" ) ); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "MouseDoubleClick" ) ); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "MouseUp" ) ); |
| } |
| |
| public void testRenderInitialListenKey() { |
| ControlLCAUtil.renderListenKey( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "KeyDown" ) ); |
| } |
| |
| public void testRenderListenKey() { |
| control.addKeyListener( mock( KeyListener.class ) ); |
| ControlLCAUtil.renderListenKey( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "KeyDown" ) ); |
| } |
| |
| public void testRenderListenKeyUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addKeyListener( mock( KeyListener.class ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenKey( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "KeyDown" ) ); |
| } |
| |
| public void testRenderListenKeyRemoved() { |
| KeyListener listener = mock( KeyListener.class ); |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addKeyListener( listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeKeyListener( listener ); |
| ControlLCAUtil.renderListenKey( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "KeyDown" ) ); |
| } |
| |
| public void testRenderInitialListenTraverse() { |
| ControlLCAUtil.renderListenTraverse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "Traverse" ) ); |
| } |
| |
| public void testRenderListenTraverse() { |
| control.addTraverseListener( mock( TraverseListener.class ) ); |
| ControlLCAUtil.renderListenTraverse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "Traverse" ) ); |
| } |
| |
| public void testRenderListenTraverseUnchanged() { |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addTraverseListener( mock( TraverseListener.class ) ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenTraverse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "Traverse" ) ); |
| } |
| |
| public void testRenderListenTraverseRemoved() { |
| TraverseListener listener = mock( TraverseListener.class ); |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addTraverseListener( listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeTraverseListener( listener ); |
| ControlLCAUtil.renderListenTraverse( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "Traverse" ) ); |
| } |
| |
| public void testRenderInitialListenMenuDetect() { |
| ControlLCAUtil.renderListenMenuDetect( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "MenuDetect" ) ); |
| } |
| |
| public void testRenderListenMenuDetect() { |
| MenuDetectListener listener = new MenuDetectListener() { |
| public void menuDetected( MenuDetectEvent e ) { |
| } |
| }; |
| control.addMenuDetectListener( listener ); |
| ControlLCAUtil.renderListenMenuDetect( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.TRUE, message.findListenProperty( control, "MenuDetect" ) ); |
| } |
| |
| public void testRenderListenMenuDetectUnchanged() { |
| MenuDetectListener listener = new MenuDetectListener() { |
| public void menuDetected( MenuDetectEvent e ) { |
| } |
| }; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addMenuDetectListener( listener ); |
| |
| Fixture.preserveWidgets(); |
| ControlLCAUtil.renderListenMenuDetect( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertNull( message.findListenOperation( control, "MenuDetect" ) ); |
| } |
| |
| public void testRenderListenMenuDetectRemoved() { |
| MenuDetectListener listener = new MenuDetectListener() { |
| public void menuDetected( MenuDetectEvent e ) { |
| } |
| }; |
| Fixture.markInitialized( display ); |
| Fixture.markInitialized( control ); |
| control.addMenuDetectListener( listener ); |
| Fixture.preserveWidgets(); |
| |
| control.removeMenuDetectListener( listener ); |
| ControlLCAUtil.renderListenMenuDetect( control ); |
| |
| Message message = Fixture.getProtocolMessage(); |
| assertEquals( Boolean.FALSE, message.findListenProperty( control, "MenuDetect" ) ); |
| } |
| |
| private void fakeKeyDown( String target, int keyCode, int charCode, String modifier ) { |
| Map<String, Object> properties = new HashMap<String, Object>(); |
| properties.put( ClientMessageConst.EVENT_PARAM_KEY_CODE, Integer.valueOf( keyCode ) ); |
| properties.put( ClientMessageConst.EVENT_PARAM_CHAR_CODE, Integer.valueOf( charCode ) ); |
| properties.put( ClientMessageConst.EVENT_PARAM_MODIFIER, modifier ); |
| Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_KEY_DOWN, properties ); |
| } |
| |
| private void fakeTraverse( String target, int keyCode, int charCode, String modifier ) { |
| Map<String, Object> properties = new HashMap<String, Object>(); |
| properties.put( ClientMessageConst.EVENT_PARAM_KEY_CODE, Integer.valueOf( keyCode ) ); |
| properties.put( ClientMessageConst.EVENT_PARAM_CHAR_CODE, Integer.valueOf( charCode ) ); |
| properties.put( ClientMessageConst.EVENT_PARAM_MODIFIER, modifier ); |
| Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_KEY_DOWN, properties ); |
| Fixture.fakeNotifyOperation( target, ClientMessageConst.EVENT_TRAVERSE, properties ); |
| } |
| |
| private static void fakeSelectionEvent( Control control, String key, String value ) { |
| String id = getId( control ); |
| Map<String, Object> parameters = new HashMap<String,Object>(); |
| if( key != null ) { |
| parameters.put( key, value ); |
| } |
| Fixture.fakeNotifyOperation( id, ClientMessageConst.EVENT_SELECTION, parameters ); |
| } |
| |
| } |