/*******************************************************************************
* Copyright (c) 2002, 2009 Innoopract Informationssysteme GmbH.
* 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.rwt.lifecycle;
import java.io.IOException;
import java.util.ArrayList;
import junit.framework.TestCase;
import org.eclipse.rwt.Fixture;
import org.eclipse.rwt.graphics.Graphics;
import org.eclipse.rwt.internal.lifecycle.*;
import org.eclipse.rwt.internal.service.RequestParams;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.internal.events.ActivateAdapter;
import org.eclipse.swt.internal.events.ActivateEvent;
import org.eclipse.swt.internal.widgets.Props;
import org.eclipse.swt.widgets.*;
public class ControlLCAUtil_Test extends TestCase {
private static final String WIDGET_DEFAULT_SELECTED = "widgetDefaultSelected";
private static final String WIDGET_SELECTED = "widgetSelected";
public void testWriteBounds() throws Exception {
// Ensure that bounds for an uninitialized widget are rendered
Display display = new Display();
Composite shell = new Shell( display , SWT.NONE );
Composite composite = new Composite( shell , SWT.NONE );
Fixture.markInitialized( display );
Fixture.preserveWidgets();
Fixture.fakeResponseWriter();
ControlLCAUtil.writeBounds( composite );
// TODO [fappel]: check whether minWidth and minHeight is still needed -
// causes problems on FF with caching
//String expected
// = w.setSpace( 0, 0, 0, 0 );w.setMinWidth( 0 );w.setMinHeight( 0 );";
String expected = "w.setSpace( 0, 0, 0, 0 );";
assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
// Ensure that unchanged bound do not lead to markup
Fixture.fakeResponseWriter();
Fixture.markInitialized( composite );
Fixture.clearPreserved();
Fixture.preserveWidgets();
ControlLCAUtil.writeBounds( composite );
assertEquals( "", Fixture.getAllMarkup() );
// Ensure that bounds-changes on an already initialized widgets are rendered
Fixture.fakeResponseWriter();
composite.setBounds( new Rectangle( 1, 2, 3, 4 ) );
ControlLCAUtil.writeBounds( composite );
expected = "w.setSpace( 1, 3, 2, 4 );";
assertTrue( Fixture.getAllMarkup().endsWith( expected ) );
}
public void testWriteToolTip() throws IOException {
Display display = new Display();
Composite shell = new Shell( display , SWT.NONE );
// on a not yet initialized control: no tool tip -> no markup
Fixture.fakeResponseWriter();
ControlLCAUtil.writeToolTip( shell );
assertEquals( "", Fixture.getAllMarkup() );
shell.setToolTipText( "" );
ControlLCAUtil.writeToolTip( shell );
assertEquals( "", Fixture.getAllMarkup() );
// on a not yet initialized control: non-empty tool tip must be rendered
Fixture.fakeResponseWriter();
shell.setToolTipText( "abc" );
ControlLCAUtil.writeToolTip( shell );
assertTrue( Fixture.getAllMarkup().indexOf( "abc" ) != -1 );
// on an initialized control: change tooltip from non-empty to empty
Fixture.fakeResponseWriter();
Fixture.markInitialized( shell );
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setToolTipText( null );
ControlLCAUtil.writeToolTip( shell );
assertTrue( Fixture.getAllMarkup().indexOf( "setToolTip" ) != -1 );
// on an initialized control: change tooltip from non-empty to empty
Fixture.fakeResponseWriter();
Fixture.markInitialized( shell );
shell.setToolTipText( "abc" );
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setToolTipText( "newTooltip" );
ControlLCAUtil.writeToolTip( shell );
assertTrue( Fixture.getAllMarkup().indexOf( "setToolTip" ) != -1 );
assertTrue( Fixture.getAllMarkup().indexOf( "newTooltip" ) != -1 );
// on an initialized control: change non-empty tooltip text
Fixture.fakeResponseWriter();
Fixture.markInitialized( shell );
shell.setToolTipText( "newToolTip" );
Fixture.clearPreserved();
Fixture.preserveWidgets();
shell.setToolTipText( "anotherTooltip" );
ControlLCAUtil.writeToolTip( shell );
assertTrue( Fixture.getAllMarkup().indexOf( "setToolTip" ) != -1 );
assertTrue( Fixture.getAllMarkup().indexOf( "anotherTooltip" ) != -1 );
// test actual markup - the next two lines fake situation that there is
// already a widget reference (w)
JSWriter writer = JSWriter.getWriterFor( shell );
writer.newWidget( "Window" );
Fixture.fakeResponseWriter();
ControlLCAUtil.writeToolTip( shell );
String expected = "wm.setToolTip( w, \"anotherTooltip\" );";
assertEquals( expected, Fixture.getAllMarkup() );
}
public void testWriteActivateListener() throws IOException {
ActivateAdapter listener = new ActivateAdapter() {
};
Display display = new Display();
Shell shell = new Shell( display , SWT.NONE );
Composite composite = new Composite( shell, SWT.NONE );
Label label = new Label( composite, SWT.NONE );
// A non-initialized widget with no listener attached must not render
// JavaScript code for adding activateListeners
AbstractWidgetLCA labelLCA = WidgetUtil.getLCA( label );
Fixture.fakeResponseWriter();
labelLCA.renderChanges( label );
String markup = Fixture.getAllMarkup();
assertEquals( false, WidgetUtil.getAdapter( label ).isInitialized() );
assertTrue( markup.length() > 0 );
assertTrue( markup.indexOf( "addActivateListenerWidget" ) == -1 );
// A non-initialized widget with a listener attached must render JavaScript
// code for adding activateListeners
ActivateEvent.addListener( label, listener );
Fixture.fakeResponseWriter();
labelLCA.renderChanges( label );
markup = Fixture.getAllMarkup();
assertEquals( false, WidgetUtil.getAdapter( label ).isInitialized() );
assertTrue( markup.indexOf( "addActivateListenerWidget" ) != -1 );
// An initialized widget with unchanged activateListeners must not render
// JavaScript code for adding activateListeners
Fixture.fakeResponseWriter();
Fixture.markInitialized( label );
labelLCA.preserveValues( label );
labelLCA.renderChanges( label );
markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( "addActivateListenerWidget" ) == -1 );
// Removing an ActivateListener from an initialized widget must render
// JavaScript code for removing activateListeners
Fixture.fakeResponseWriter();
Fixture.markInitialized( label );
labelLCA.preserveValues( label );
ActivateEvent.removeListener( label, listener );
labelLCA.renderChanges( label );
markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( "addActivateListenerWidget" ) == -1 );
assertTrue( markup.indexOf( "removeActivateListenerWidget" ) != -1 );
// When the shell is disposed of, no removeActivateListener must be rendered
// Important when disposing of a shell with ShellListener#shellClosed
labelLCA.preserveValues( label );
ActivateEvent.addListener( label, listener );
shell.dispose();
ControlLCAUtil.writeActivateListener( label );
Fixture.fakeResponseWriter();
markup = Fixture.getAllMarkup();
assertEquals( -1, markup.indexOf( "removeActivateListenerWidget" ) );
}
public void testProcessSelection() {
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
final StringBuffer log = new StringBuffer();
SelectionListener listener = new SelectionListener() {
public void widgetSelected( final SelectionEvent event ) {
log.append( WIDGET_SELECTED );
}
public void widgetDefaultSelected( SelectionEvent e ) {
log.append( WIDGET_DEFAULT_SELECTED );
}
};
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
Button button = new Button( shell, SWT.PUSH );
button.addSelectionListener( listener );
String displayId = DisplayUtil.getId( display );
String buttonId = WidgetUtil.getId( button );
// Test that requestParams like '...events.widgetSelected=w3' cause the
// event to be fired
log.setLength( 0 );
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED, buttonId );
ControlLCAUtil.processSelection( button, null, true );
assertEquals( WIDGET_SELECTED, log.toString() );
// Test that if requestParam '...events.widgetSelected' is null, no event
// gets fired
log.setLength( 0 );
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_SELECTED, null );
ControlLCAUtil.processSelection( button, null, true );
assertEquals( "", log.toString() );
// Test that requestParams like '...events.widgetDefaultSelected=w3' cause
// the event to be fired
log.setLength( 0 );
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_DEFAULT_SELECTED, buttonId );
ControlLCAUtil.processSelection( button, null, true );
assertEquals( WIDGET_DEFAULT_SELECTED, log.toString() );
// Test that if requestParam '...events.widgetSelected' is null, no event
// gets fired
log.setLength( 0 );
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_WIDGET_DEFAULT_SELECTED, null );
ControlLCAUtil.processSelection( button, null, true );
assertEquals( "", log.toString() );
}
public void testMaxZOrder() {
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
for( int i = 0; i < ControlLCAUtil.MAX_STATIC_ZORDER; i++ ) {
new Button( shell, SWT.PUSH );
}
Control control = new Button( shell, SWT.PUSH );
IWidgetAdapter adapter = WidgetUtil.getAdapter( control );
ControlLCAUtil.preserveValues( control );
assertEquals( new Integer( 1 ), adapter.getPreserved( Props.Z_INDEX ) );
}
public void testWriteCursor() throws Exception {
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
final Control control = new Button( shell, SWT.PUSH );
AbstractWidgetLCA controlLCA = WidgetUtil.getLCA( control );
Cursor cursor = display.getSystemCursor( SWT.CURSOR_HAND );
Fixture.markInitialized( control );
Fixture.preserveWidgets();
control.setCursor( cursor );
ControlLCAUtil.writeCursor( control );
String expected = "w.setCursor( \"pointer\" );";
assertTrue( Fixture.getAllMarkup().indexOf( expected ) != -1 );
Fixture.fakeResponseWriter();
controlLCA.preserveValues( control );
ControlLCAUtil.writeCursor( control );
assertEquals( "", Fixture.getAllMarkup() );
control.setCursor( null );
ControlLCAUtil.writeCursor( control );
assertTrue( Fixture.getAllMarkup().indexOf( "w.resetCursor();" ) != -1 );
}
public void testWriteKeyEvents() throws IOException {
final java.util.List eventLog = new ArrayList();
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
Fixture.fakeResponseWriter();
ControlLCAUtil.writeKeyListener( shell );
assertEquals( "", Fixture.getAllMarkup() );
shell.addListener( SWT.KeyDown, new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
} );
Fixture.fakeResponseWriter();
ControlLCAUtil.writeKeyListener( shell );
String expected
= "var w = wm.findWidgetById( \"w2\" );"
+ "w.setUserData( \"keyListener\", true );";
assertEquals( expected, Fixture.getAllMarkup() );
}
public void testWriteTraverseEvents() throws IOException {
final java.util.List eventLog = new ArrayList();
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
Fixture.fakeResponseWriter();
ControlLCAUtil.writeTraverseListener( shell );
assertEquals( "", Fixture.getAllMarkup() );
shell.addListener( SWT.Traverse, new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
} );
Fixture.fakeResponseWriter();
ControlLCAUtil.writeTraverseListener( shell );
String expected
= "var w = wm.findWidgetById( \"w2\" );"
+ "w.setUserData( \"traverseListener\", true );";
assertEquals( expected, Fixture.getAllMarkup() );
}
public void testProcessKeyEvents() {
final java.util.List eventLog = new ArrayList();
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
shell.addListener( SWT.KeyDown, new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
} );
String shellId = WidgetUtil.getId( shell );
// Simulate requests that carry information about a key-down event
// - incomplete request
Fixture.fakeNewRequest();
Fixture.fakePhase( PhaseId.READ_DATA );
eventLog.clear();
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
try {
ControlLCAUtil.processKeyEvents( shell );
fail( "Attempting to process incomplete key-event-request must fail" );
} catch( RuntimeException e ) {
// expected
}
assertTrue( eventLog.isEmpty() );
// - key-event without meaningful information (e.g. Shift-key only)
Fixture.fakeNewRequest();
Fixture.fakePhase( PhaseId.READ_DATA );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "0" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "0" );
ControlLCAUtil.processKeyEvents( shell );
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
display.readAndDispatch();
Event event = ( Event )eventLog.get( 0 );
assertEquals( SWT.KeyDown, event.type );
assertEquals( shell, event.widget );
assertEquals( 0, event.character );
assertEquals( 0, event.keyCode );
assertTrue( event.doit );
}
public void testProcessKeyEventsWithDoItFlag() {
PhaseListenerRegistry.add( new PreserveWidgetsPhaseListener() );
PhaseListenerRegistry.add( new CurrentPhase.Listener() );
final java.util.List eventLog = new ArrayList();
Listener doitTrueListener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
};
Listener doitFalseListener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
event.doit = false;
}
};
Listener keyUpListener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
};
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
String shellId = WidgetUtil.getId( shell );
String displayId = DisplayUtil.getId( display );
// Simulate KeyEvent request, listener leaves doit untouched (doit==true)
shell.addListener( SWT.KeyDown, doitTrueListener );
shell.addListener( SWT.KeyUp, keyUpListener );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "0" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "65" );
Fixture.executeLifeCycleFromServerThread();
assertEquals( 2, eventLog.size() );
assertEquals( SWT.KeyDown, ( ( Event )eventLog.get( 0 ) ).type );
assertTrue( ( ( Event )eventLog.get( 0 ) ).doit );
assertEquals( SWT.KeyUp, ( ( Event )eventLog.get( 1 ) ).type );
String markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_CANCEL_EVENT ) == -1 );
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_ALLOW_EVENT ) != -1 );
shell.removeListener( SWT.KeyDown, doitTrueListener );
// Simulate KeyEvent request, listener sets doit = false
eventLog.clear();
shell.addListener( SWT.KeyDown, doitFalseListener );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "0" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "65" );
Fixture.executeLifeCycleFromServerThread();
assertEquals( 1, eventLog.size() );
assertEquals( SWT.KeyDown, ( ( Event )eventLog.get( 0 ) ).type );
assertFalse( ( ( Event )eventLog.get( 0 ) ).doit );
markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_CANCEL_EVENT ) != -1 );
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_ALLOW_EVENT ) == -1 );
shell.removeListener( SWT.KeyDown, doitFalseListener );
}
public void testProcessTraverseEventsWithDoItFlag() {
PhaseListenerRegistry.add( new PreserveWidgetsPhaseListener() );
PhaseListenerRegistry.add( new CurrentPhase.Listener() );
final java.util.List eventLog = new ArrayList();
Listener doitTrueListener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
};
Listener doitFalseListener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
event.doit = false;
}
};
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
String shellId = WidgetUtil.getId( shell );
String displayId = DisplayUtil.getId( display );
// Simulate Tab key stroke, listener leaves doit untouched (doit==true)
shell.addListener( SWT.Traverse, doitTrueListener );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "9" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "0" );
Fixture.executeLifeCycleFromServerThread();
assertEquals( 1, eventLog.size() );
assertEquals( SWT.Traverse, ( ( Event )eventLog.get( 0 ) ).type );
assertTrue( ( ( Event )eventLog.get( 0 ) ).doit );
String markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_CANCEL_EVENT ) == -1 );
shell.removeListener( SWT.Traverse, doitTrueListener );
// Simulate Tab key stroke, listener sets doit = false
eventLog.clear();
shell.addListener( SWT.Traverse, doitFalseListener );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "9" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "0" );
Fixture.executeLifeCycleFromServerThread();
assertEquals( 1, eventLog.size() );
assertEquals( SWT.Traverse, ( ( Event )eventLog.get( 0 ) ).type );
assertFalse( ( ( Event )eventLog.get( 0 ) ).doit );
markup = Fixture.getAllMarkup();
assertTrue( markup.indexOf( ControlLCAUtil.JSFUNC_CANCEL_EVENT ) != -1 );
shell.removeListener( SWT.Traverse, doitFalseListener );
}
public void testKeyAndTraverseEvents() {
PhaseListenerRegistry.add( new PreserveWidgetsPhaseListener() );
PhaseListenerRegistry.add( new CurrentPhase.Listener() );
final java.util.List eventLog = new ArrayList();
Display display = new Display();
Shell shell = new Shell( display );
shell.open();
String shellId = WidgetUtil.getId( shell );
String displayId = DisplayUtil.getId( display );
// Ensure that if a key event that notifies about a traversal key is
// canceled (doit=false) the following traverse event isn't fired at all
Listener listener = new Listener() {
public void handleEvent( final Event event ) {
eventLog.add( event );
}
};
shell.addListener( SWT.Traverse, listener );
shell.addListener( SWT.KeyDown, listener );
shell.addListener( SWT.KeyUp, listener );
Fixture.fakeNewRequest();
Fixture.fakeRequestParam( RequestParams.UIROOT, displayId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN, shellId );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_MODIFIER, "" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_KEY_CODE, "27" );
Fixture.fakeRequestParam( JSConst.EVENT_KEY_DOWN_CHAR_CODE, "0" );
Fixture.executeLifeCycleFromServerThread();
assertEquals( 3, eventLog.size() );
Event traverseEvent = ( Event )eventLog.get( 0 );
assertEquals( SWT.Traverse, traverseEvent.type );
assertEquals( SWT.TRAVERSE_ESCAPE, traverseEvent.detail );
assertTrue( traverseEvent.doit );
Event downEvent = ( Event )eventLog.get( 1 );
assertEquals( SWT.KeyDown, downEvent.type );
Event upEvent = ( Event )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 );
}
public void testWriteBackgroundImage() throws IOException {
Display display = new Display();
Shell shell = new Shell( display, SWT.NONE );
Control control = new Button( shell, SWT.PUSH );
Fixture.fakeResponseWriter();
ControlLCAUtil.preserveBackgroundImage( control );
Fixture.markInitialized( control );
control.setBackgroundImage( Graphics.getImage( Fixture.IMAGE1 ) );
ControlLCAUtil.writeBackgroundImage( control );
String imageLocation = "rwt-resources/" + Fixture.IMAGE1;
String expected = "var w = wm.findWidgetById( \"w2\" );"
+ "w.setUserData( \"backgroundImageSize\", [58,12 ] );"
+ "w.setBackgroundImage( \""
+ imageLocation
+ "\" );";
assertEquals( expected, Fixture.getAllMarkup() );
Fixture.fakeResponseWriter();
ControlLCAUtil.preserveBackgroundImage( control );
control.setBackgroundImage( null );
ControlLCAUtil.writeBackgroundImage( control );
expected = "w.setUserData( \"backgroundImageSize\", null );"
+ "w.resetBackgroundImage();";
assertEquals( expected, Fixture.getAllMarkup() );
}
public void testProcessHelpEvent() {
Fixture.fakePhase( PhaseId.PROCESS_ACTION );
final java.util.List log = new ArrayList();
Display display = new Display();
Control control = new Shell( display, SWT.NONE );
control.addHelpListener( new HelpListener() {
public void helpRequested( final HelpEvent event ) {
log.add( event );
}
} );
Fixture.fakeRequestParam( JSConst.EVENT_HELP, WidgetUtil.getId( control ) );
WidgetLCAUtil.processHelp( control );
assertEquals( 1, log.size() );
HelpEvent event = ( HelpEvent )log.get( 0 );
assertSame( control, event.widget );
assertSame( display, event.display );
}
protected void setUp() throws Exception {
Fixture.setUp();
Fixture.fakeResponseWriter();
}
protected void tearDown() throws Exception {
Fixture.tearDown();
}
}