blob: 1e48891c9544a0ab419fe595f873c9b490e80421 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.swt.events;
import static org.eclipse.rap.rwt.lifecycle.WidgetUtil.getId;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
import org.mockito.InOrder;
public class KeyEvent_Test extends TestCase {
private Display display;
private Shell shell;
private List<Object> events;
@Override
protected void setUp() throws Exception {
Fixture.setUp();
display = new Display();
shell = new Shell( display );
events = new LinkedList<Object>();
Fixture.fakeNewRequest( display );
}
@Override
protected void tearDown() throws Exception {
Fixture.tearDown();
}
public void testUntypedEventConstructor() throws Exception {
Event event = new Event();
event.display = display;
event.widget = mock( Widget.class );
event.time = 4325;
event.stateMask = 23;
event.keyCode = 42;
event.character = 'f';
event.doit = true;
event.data = new Object();
KeyEvent keyEvent = new KeyEvent( event );
EventTestHelper.assertFieldsEqual( keyEvent, event );
}
public void testKeySelectionEventsOrder() {
KeyListener keyListener = mock( KeyListener.class );
SelectionListener selectionListener = mock( SelectionListener.class );
Tree tree = createTreeWithKeyListener();
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeSelectionRequest( tree, tree.getItem( 1 ) );
tree.addKeyListener( keyListener );
tree.addSelectionListener( selectionListener );
Fixture.readDataAndProcessAction( display );
InOrder inOrder = inOrder( keyListener, selectionListener );
inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
inOrder.verify( selectionListener ).widgetSelected( any( SelectionEvent.class ) );
inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
public void testKeyTreeEventsOrder() {
KeyListener keyListener = mock( KeyListener.class );
TreeListener treeListener = mock( TreeListener.class );
Tree tree = createTreeWithKeyListener();
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeTreeRequest( tree.getItem( 1 ) );
tree.addKeyListener( keyListener );
tree.addTreeListener( treeListener );
Fixture.readDataAndProcessAction( display );
InOrder inOrder = inOrder( keyListener, treeListener );
inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
inOrder.verify( treeListener ).treeExpanded( any( TreeEvent.class ) );
inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
public void testKeyHelpEventsOrder() {
KeyListener keyListener = mock( KeyListener.class );
HelpListener helpListener = mock( HelpListener.class );
Tree tree = createTreeWithKeyListener();
Fixture.fakeNewRequest( display );
fakeKeyDownRequest( tree, 65, 65 );
fakeHelpRequest( tree );
tree.addKeyListener( keyListener );
tree.addHelpListener( helpListener );
Fixture.readDataAndProcessAction( display );
InOrder inOrder = inOrder( keyListener, helpListener );
inOrder.verify( keyListener ).keyPressed( any( KeyEvent.class ) );
inOrder.verify( helpListener ).helpRequested( any( HelpEvent.class ) );
inOrder.verify( keyListener ).keyReleased( any( KeyEvent.class ) );
}
private Tree createTreeWithKeyListener() {
Tree result = new Tree( shell, SWT.NONE );
result.setSize( 100, 100 );
for( int i = 0; i < 5; i++ ) {
TreeItem item = new TreeItem( result, SWT.NONE);
for( int j = 0; j < 5; j++ ) {
new TreeItem( item, SWT.NONE);
}
}
result.addKeyListener( new LoggingKeyListener( events ) );
return result;
}
private static void fakeSelectionRequest( Widget widget, Widget item ) {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_ITEM, getId( item ) );
Fixture.fakeNotifyOperation( getId( widget ),
ClientMessageConst.EVENT_WIDGET_SELECTED,
parameters );
}
private static void fakeTreeRequest( Widget item ) {
Fixture.fakeNotifyOperation( getId( item ), ClientMessageConst.EVENT_TREE_EXPANDED, null );
}
private static void fakeHelpRequest( Widget widget ) {
Fixture.fakeNotifyOperation( getId( widget ), ClientMessageConst.EVENT_HELP, null );
}
private static void fakeKeyDownRequest( Widget widget, int keyCode, int charCode ) {
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put( ClientMessageConst.EVENT_PARAM_KEY_CODE, Integer.valueOf( keyCode ) );
parameters.put( ClientMessageConst.EVENT_PARAM_CHAR_CODE, Integer.valueOf( charCode ) );
parameters.put( ClientMessageConst.EVENT_PARAM_MODIFIER, "" );
Fixture.fakeNotifyOperation( getId( widget ), ClientMessageConst.EVENT_KEY_DOWN, parameters );
}
private static class LoggingKeyListener implements KeyListener {
private final List<Object> events;
private LoggingKeyListener( List<Object> events ) {
this.events = events;
}
public void keyPressed( KeyEvent event ) {
events.add( event );
}
public void keyReleased( KeyEvent event ) {
events.add( event );
}
}
}