blob: c826e88d51d8837d2c575fe811926cfa6b219e74 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 Ketan Padegaonkar 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:
* Ketan Padegaonkar - initial API and implementation
*******************************************************************************/
package org.eclipse.swtbot.swt.finder.keyboard;
import static org.eclipse.swtbot.swt.finder.utils.SWTUtils.isMac;
import org.eclipse.swt.SWT;
import org.eclipse.swtbot.swt.finder.test.AbstractCustomControlExampleTest;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotStyledText;
import org.eclipse.swtbot.swt.finder.widgets.SWTBotText;
import org.junit.Before;
import org.junit.Test;
/**
* @author Ketan Padegaonkar <KetanPadegaonkar [at] gmail [dot] com>
* @version $Id$
*/
public abstract class AbstractKeyboardTest extends AbstractCustomControlExampleTest {
private SWTBotStyledText styledText;
private SWTBotText listeners;
private Keyboard keyboard;
@Test
public void canTypeSingleQuote() throws Exception {
styledText.setFocus();
styledText.typeText("'");
assertEventMatches(listeners, "Verify [25]: VerifyEvent{StyledText {} time=2009363 data=null character='\\0' keyCode=" + toKeyCode(0, styledText.widget) + " stateMask=0 doit=true start=0 end=0 text='}");
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=2009363 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=1951427 data=null character=''' keyCode=" + toKeyCode(39, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=1951515 data=null character=''' keyCode=" + toKeyCode(39, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeAltUpKey() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.MOD3, Keystrokes.UP);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=-2118818527 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=-2118818111 data=null character='\\0' keyCode=" + toKeyCode(16777217, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=-2118818055 data=null character='\\0' keyCode=" + toKeyCode(16777217, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=-2118817351 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canTypeBackquoteKey() throws Exception {
styledText.setFocus();
styledText.typeText("`");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=332938450 data=null character='`' keyCode=" + toKeyCode(96, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=332938540 data=null character='`' keyCode=" + toKeyCode(96, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeShiftKey() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=332938450 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=332938540 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canTypeEndKey() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.END);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=1686687 data=null character='\\0' keyCode=" + toKeyCode(16777224, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=1686718 data=null character='\\0' keyCode=" + toKeyCode(16777224, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeCTRLKey() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334095974 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334096084 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canTypeAltKey() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.ALT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337927063 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337927163 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canType_CTRL_SHIFT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL, Keystrokes.SHIFT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334163451 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334163611 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334163782 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334163832 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canType_SHIFT_CTRL_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT, Keystrokes.CTRL);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334173686 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334173996 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334174277 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334174347 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canType_CTRL_ALT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL, Keystrokes.ALT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334364901 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334365191 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334365331 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334365492 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canType_ALT_CTRL_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.ALT, Keystrokes.CTRL);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334374164 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334374324 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334374475 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334374495 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canType_SHIFT_ALT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT, Keystrokes.ALT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334403126 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334403236 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334403366 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334403426 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canType_ALT_SHIFT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.ALT, Keystrokes.SHIFT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334417126 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=334417456 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334417526 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=334417577 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canType_SHIFT_CTRL_ALT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT, Keystrokes.CTRL, Keystrokes.ALT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=336998217 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=336998548 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=336998858 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=336998938 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337000000 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337000330 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canType_SHIFT_ALT_CTRL_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT, Keystrokes.ALT, Keystrokes.CTRL);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337024085 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337024595 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337025316 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337026738 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337027700 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337028090 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canType_CTRL_SHIFT_ALT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL, Keystrokes.SHIFT, Keystrokes.ALT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337073666 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337074086 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337074527 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337074928 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337075999 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337076370 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canType_CTRL_ALT_SHIFT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL, Keystrokes.ALT, Keystrokes.SHIFT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337084111 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337084592 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337085162 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337085753 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337086184 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337086584 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canType_ALT_CTRL_SHIFT_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.ALT, Keystrokes.CTRL, Keystrokes.SHIFT);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337516292 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337516753 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337517113 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337517985 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337518335 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=327680 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337518686 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canType_ALT_SHIFT_CTRL_Keys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.ALT, Keystrokes.SHIFT, Keystrokes.CTRL);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337527028 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337527649 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=337528209 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337531534 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=458752 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337532275 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=337532666 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canTypeCTRL_SHIFT_T() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.toKeys(SWT.CTRL | SWT.SHIFT, 't'));
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=356391804 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=356392194 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=356393156 data=null character='' keyCode=" + toKeyCode(116, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=356392495 data=null character='' keyCode=" + toKeyCode(116, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=356393987 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=393216 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=356394307 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canTypeSmallCharacters() throws Exception {
styledText.setFocus();
keyboard.typeText("ab");
assertEventMatches(listeners, "Verify [25]: VerifyEvent{StyledText {} time=358259489 data=null character='\\0' keyCode=" + toKeyCode(0, styledText.widget) + " stateMask=0 doit=true start=0 end=0 text=a}");
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=358259489 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=358259489 data=null character='a' keyCode=" + toKeyCode(97, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=358259560 data=null character='a' keyCode=" + toKeyCode(97, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "Verify [25]: VerifyEvent{StyledText {} time=358264617 data=null character='\\0' keyCode=" + toKeyCode(0, styledText.widget) + " stateMask=0 doit=true start=1 end=1 text=b}");
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=358264617 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=358264617 data=null character='b' keyCode=" + toKeyCode(98, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=358259810 data=null character='b' keyCode=" + toKeyCode(98, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeCapitalCharacters() throws Exception {
styledText.setFocus();
keyboard.typeText("A");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=359800165 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "Verify [25]: VerifyEvent{StyledText {} time=359800285 data=null character='\\0' keyCode=" + toKeyCode(0, styledText.widget) + " stateMask=0 doit=true start=0 end=0 text=A}");
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=359800285 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=359800285 data=null character='A' keyCode=" + toKeyCode(97, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=359800405 data=null character='A' keyCode=" + toKeyCode(97, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=359800485 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canTypeCTRL_SPACE() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.CTRL, Keystrokes.create(' ')[0]);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=41517702 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=0 doit=true}");
if (!isWin32() && !isGtk()) // FIXME: bug 278162: Sending CTRL+SPACE does not work consistently across platforms
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=41517983 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=41517983 data=null character=' ' keyCode=" + toKeyCode(32, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=41518070 data=null character=' ' keyCode=" + toKeyCode(32, styledText.widget) + " stateMask=262144 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=41518278 data=null character='\\0' keyCode=" + toKeyCode(262144, styledText.widget) + " stateMask=262144 doit=true}");
}
@Test
public void canTypeFunctionKeys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(SWT.NONE, SWT.F2, '\0');
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=71024493 data=null character='\\0' keyCode=" + toKeyCode(16777227, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=71024597 data=null character='\\0' keyCode=" + toKeyCode(16777227, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeArrowKeys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(Keystrokes.DOWN);
assertEventMatches(listeners, "Traverse [31]: TraverseEvent{StyledText {} time=72468446 data=null character='\\0' keyCode=" + toKeyCode(16777218, styledText.widget) + " stateMask=0 doit=false detail=64}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=72468446 data=null character='\\0' keyCode=" + toKeyCode(16777218, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=72468502 data=null character='\\0' keyCode=" + toKeyCode(16777218, styledText.widget) + " stateMask=0 doit=true}");
}
@Test
public void canTypeShiftEnd() throws Exception {
if (isWin32()) // FIXME: 278207: Display.post() cannot post SHIFT+END keystrokes.
return;
styledText.setFocus();
styledText.pressShortcut(Keystrokes.SHIFT, Keystrokes.END);
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=74720408 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=74720744 data=null character='\\0' keyCode=" + toKeyCode(16777224, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=74720800 data=null character='\\0' keyCode=" + toKeyCode(16777224, styledText.widget) + " stateMask=131072 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=74720904 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=131072 doit=true}");
}
@Test
public void canTypeModifierAndSpecialKeys() throws Exception {
styledText.setFocus();
styledText.pressShortcut(SWT.ALT | SWT.SHIFT, SWT.F1, '\0');
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=1734039746 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=1734040242 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=1734040650 data=null character='\\0' keyCode=" + toKeyCode(16777226, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=1734040730 data=null character='\\0' keyCode=" + toKeyCode(16777226, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=1734041073 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=1734041394 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Test
public void canTypeALT_SHIFT_C() throws Exception {
// don't execute on mac
if (!isMac())
return;
styledText.setFocus();
styledText.pressShortcut(SWT.ALT | SWT.SHIFT, 'c');
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=17898887 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=0 doit=true}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=17899215 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=65536 doit=true}");
assertEventMatches(listeners, "Verify [25]: VerifyEvent{StyledText {} time=17899783 data=null character='\\0' keyCode=" + toKeyCode(0, styledText.widget) + " stateMask=0 doit=true start=0 end=0 text=Ç}");
assertEventMatches(listeners, "Modify [24]: ModifyEvent{StyledText {} time=17899783 data=null}");
assertEventMatches(listeners, "KeyDown [1]: KeyEvent{StyledText {} time=17899783 data=null character='Ç' keyCode=" + toKeyCode(99, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=17899887 data=null character='Ç' keyCode=" + toKeyCode(99, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=17900711 data=null character='\\0' keyCode=" + toKeyCode(131072, styledText.widget) + " stateMask=196608 doit=true}");
assertEventMatches(listeners, "KeyUp [2]: KeyEvent{StyledText {} time=17901071 data=null character='\\0' keyCode=" + toKeyCode(65536, styledText.widget) + " stateMask=65536 doit=true}");
}
@Before
public void prepareExample() throws Exception {
keyboard = new Keyboard();
bot.tabItem("StyledText").activate();
bot.checkBox("Horizontal Fill").select();
bot.checkBox("Vertical Fill").select();
bot.checkBox("Listen").deselect();
bot.checkBox("Listen").select();
styledText = bot.styledTextInGroup("StyledText");
styledText.setText("");
bot.button("Clear").click();
listeners = bot.textInGroup("Listeners");
}
private static boolean isWin32() {
String swtPlatform = SWT.getPlatform();
return ("win32".equals(swtPlatform));
}
private static boolean isGtk() {
String swtPlatform = SWT.getPlatform();
return ("gtk".equals(swtPlatform));
}
}