blob: 5f697b59474f2ca6335d93c977662b45cf1b5ef8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 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.rap.rwt.internal.protocol;
import static org.eclipse.rap.rwt.internal.protocol.ClientMessageConst.EVENT_KEY_DOWN;
import static org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler.createKeyEvent;
import static org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler.createMenuDetectEvent;
import static org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler.createMouseEvent;
import static org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler.getTraverseKey;
import static org.eclipse.rap.rwt.internal.protocol.ControlOperationHandler.translateKeyCode;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.rwt.testfixture.Fixture;
import org.eclipse.swt.SWT;
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.Shell;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
public class ControlOperationHandler_Test {
private Shell shell;
private Button control;
private Control mockedControl;
private ControlOperationHandler<Control> handler;
@Before
public void setUp() {
Fixture.setUp();
Display display = new Display();
shell = new Shell( display );
control = new Button( shell, SWT.NONE );
control.setBounds( 10, 10, 100, 20 );
mockedControl = mock( Control.class );
handler = new ControlOperationHandler<Control>( mockedControl ) {};
}
@After
public void tearDown() {
Fixture.tearDown();
}
@Test
public void testCreateMouseEvent() {
JsonObject properties = new JsonObject()
.add( "button", 1 )
.add( "x", 15 )
.add( "y", 20 )
.add( "time", 4 );
Event event = createMouseEvent( SWT.MouseDown, control, properties );
assertEquals( SWT.MouseDown, event.type );
assertEquals( control, event.widget );
assertEquals( SWT.BUTTON1, event.stateMask );
assertEquals( 1, event.button );
assertEquals( 4, event.x );
assertEquals( 9, event.y );
assertEquals( 4, event.time );
assertEquals( 1, event.count );
}
@Test
public void testCreateMouseEvent_withKeyModifiers() {
JsonObject properties = new JsonObject()
.add( "altKey", true )
.add( "ctrlKey", true )
.add( "button", 1 )
.add( "x", 15 )
.add( "y", 20 )
.add( "time", 4 );
Event event = createMouseEvent( SWT.MouseDoubleClick, control, properties );
assertEquals( SWT.MouseDoubleClick, event.type );
assertEquals( control, event.widget );
assertEquals( SWT.ALT | SWT.CTRL | SWT.BUTTON1, event.stateMask );
assertEquals( 1, event.button );
assertEquals( 4, event.x );
assertEquals( 9, event.y );
assertEquals( 4, event.time );
assertEquals( 2, event.count );
}
@Test
public void testGetTraverseKey() {
int traverseKey;
traverseKey = getTraverseKey( 13, 0 );
assertEquals( traverseKey, SWT.TRAVERSE_RETURN );
traverseKey = getTraverseKey( 27, 0 );
assertEquals( traverseKey, SWT.TRAVERSE_ESCAPE );
traverseKey = getTraverseKey( 9, 0 );
assertEquals( traverseKey, SWT.TRAVERSE_TAB_NEXT );
traverseKey = getTraverseKey( 9, SWT.SHIFT );
assertEquals( traverseKey, SWT.TRAVERSE_TAB_PREVIOUS );
traverseKey = getTraverseKey( 9, SWT.SHIFT | SWT.CTRL );
assertEquals( traverseKey, SWT.TRAVERSE_NONE );
}
@Test
public void testCreateKeyEvent_withLowerCaseCharacter() {
JsonObject properties = new JsonObject().add( "keyCode", 65 ).add( "charCode", 97 );
Event event = createKeyEvent( properties );
assertEquals( SWT.None, event.stateMask );
assertEquals( 97, event.keyCode );
assertEquals( 'a', event.character );
}
@Test
public void testCreateKeyEvent_withUpperCaseCharacter() {
JsonObject properties = new JsonObject().add( "keyCode", 65 ).add( "charCode", 65 );
Event event = createKeyEvent( properties );
assertEquals( SWT.None, event.stateMask );
assertEquals( 97, event.keyCode );
assertEquals( 'A', event.character );
}
@Test
public void testCreateKeyEvent_withDigitCharacter() {
JsonObject properties = new JsonObject().add( "keyCode", 49 ).add( "charCode", 49 );
Event event = createKeyEvent( properties );
assertEquals( SWT.None, event.stateMask );
assertEquals( 49, event.keyCode );
assertEquals( '1', event.character );
}
@Test
public void testCreateKeyEvent_withPunctuationCharacter() {
JsonObject properties = new JsonObject().add( "keyCode", 49 ).add( "charCode", 33 );
Event event = createKeyEvent( properties );
assertEquals( SWT.None, event.stateMask );
assertEquals( 49, event.keyCode );
assertEquals( '!', event.character );
}
@Test
public void testCreateKeyEvent_withKeyModifier() {
JsonObject properties = new JsonObject()
.add( "shiftKey", true )
.add( "keyCode", 65 )
.add( "charCode", 65 );
Event event = createKeyEvent( properties );
assertEquals( SWT.SHIFT, event.stateMask );
assertEquals( 97, event.keyCode );
assertEquals( 'A', event.character );
}
@Test
public void testTranslateKeyCode() {
int keyCode;
keyCode = translateKeyCode( 40 );
assertEquals( SWT.ARROW_DOWN, keyCode );
keyCode = translateKeyCode( 37 );
assertEquals( SWT.ARROW_LEFT, keyCode );
keyCode = translateKeyCode( 38 );
assertEquals( SWT.ARROW_UP, keyCode );
keyCode = translateKeyCode( 39 );
assertEquals( SWT.ARROW_RIGHT, keyCode );
keyCode = translateKeyCode( 20 );
assertEquals( SWT.CAPS_LOCK, keyCode );
keyCode = translateKeyCode( 36 );
assertEquals( SWT.HOME, keyCode );
keyCode = translateKeyCode( 115 );
assertEquals( SWT.F4, keyCode );
keyCode = translateKeyCode( 123 );
assertEquals( SWT.F12, keyCode );
keyCode = translateKeyCode( 18 );
assertEquals( SWT.ALT, keyCode );
}
@Test
public void testCreateMenuDetectEvent() {
JsonObject properties = new JsonObject()
.add( "x", 1 )
.add( "y", 2 );
Event event = createMenuDetectEvent( properties );
assertEquals( 1, event.x );
assertEquals( 2, event.y );
}
@Test
public void testHandleNotify_processesFocusIn() {
JsonObject properties = new JsonObject();
handler.handleNotify( "FocusIn", properties );
verify( mockedControl ).notifyListeners( eq( SWT.FocusIn ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesFocusOut() {
JsonObject properties = new JsonObject();
handler.handleNotify( "FocusOut", properties );
verify( mockedControl ).notifyListeners( eq( SWT.FocusOut ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesMouseDown_onControl_valid() {
Control spyControl = spy( control );
handler = new ControlOperationHandler<Control>( spyControl ) {};
JsonObject properties = new JsonObject()
.add( "button", 1 )
.add( "x", 15 )
.add( "y", 20 )
.add( "time", 4 );
handler.handleNotifyMouseDown( spyControl, properties );
verify( spyControl ).notifyListeners( eq( SWT.MouseDown ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesMouseDown_onControl_invalid() {
Control spyControl = spy( control );
JsonObject properties = new JsonObject()
.add( "button", 1 )
.add( "x", -10 )
.add( "y", 3 )
.add( "time", 4 );
handler.handleNotifyMouseDown( spyControl, properties );
verify( spyControl, never() ).notifyListeners( eq( SWT.MouseDown ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesMouseDown_onScrollable_valid() {
Control spyControl = spy( shell );
JsonObject properties = new JsonObject()
.add( "button", 1 )
.add( "x", 20 )
.add( "y", 60 )
.add( "time", 4 );
handler.handleNotifyMouseDown( spyControl, properties );
verify( spyControl ).notifyListeners( eq( SWT.MouseDown ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesMouseDown_onScrollable_invalid() {
Control spyControl = spy( shell );
JsonObject properties = new JsonObject()
.add( "button", 1 )
.add( "x", 2 )
.add( "y", 3 )
.add( "time", 4 );
handler.handleNotifyMouseDown( spyControl, properties );
verify( spyControl, never() ).notifyListeners( eq( SWT.MouseDown ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesKeyDown() {
JsonObject properties = new JsonObject()
.add( "shiftKey", true )
.add( "keyCode", 65 )
.add( "charCode", 97 );
handler.handleNotify( EVENT_KEY_DOWN, properties );
ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class );
verify( mockedControl ).notifyListeners( eq( SWT.KeyDown ), captor.capture() );
Event event = captor.getValue();
assertEquals( SWT.SHIFT, event.stateMask );
assertEquals( 97, event.keyCode );
assertEquals( 'a', event.character );
}
@Test
public void testHandleNotify_processesKeyUp() {
JsonObject properties = new JsonObject()
.add( "shiftKey", true )
.add( "keyCode", 65 )
.add( "charCode", 97 );
handler.handleNotify( EVENT_KEY_DOWN, properties );
ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class );
verify( mockedControl ).notifyListeners( eq( SWT.KeyUp ), captor.capture() );
Event event = captor.getValue();
assertEquals( SWT.SHIFT, event.stateMask );
assertEquals( 97, event.keyCode );
assertEquals( 'a', event.character );
}
@Test
public void testHandleNotify_processesTraverse() {
JsonObject properties = new JsonObject()
.add( "shiftKey", true )
.add( "keyCode", 9 )
.add( "charCode", 0 );
handler.handleNotify( "Traverse", properties );
ArgumentCaptor<Event> captor = ArgumentCaptor.forClass( Event.class );
verify( mockedControl ).notifyListeners( eq( SWT.Traverse ), captor.capture() );
Event event = captor.getValue();
assertEquals( SWT.SHIFT, event.stateMask );
assertEquals( 9, event.keyCode );
assertEquals( 9, event.character );
assertEquals( SWT.TRAVERSE_TAB_PREVIOUS, event.detail );
}
@Test
public void testHandleNotify_processesTraverse_wrongKeyModifier() {
JsonObject properties = new JsonObject()
.add( "ctrlKey", true )
.add( "keyCode", 9 )
.add( "charCode", 0 );
handler.handleNotify( "Traverse", properties );
verify( mockedControl, never() ).notifyListeners( eq( SWT.Traverse ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesMenuDetect() {
JsonObject properties = new JsonObject().add( "x", 1 ).add( "y", 2 );
handler.handleNotify( "MenuDetect", properties );
verify( mockedControl ).notifyListeners( eq( SWT.MenuDetect ), any( Event.class ) );
}
@Test
public void testHandleNotify_processesHelp() {
JsonObject properties = new JsonObject();
handler.handleNotify( "Help", properties );
verify( mockedControl ).notifyListeners( eq( SWT.Help ), any( Event.class ) );
}
}