blob: 6eeda129e1499f4ad8fd6c634f48df54ec1298ac [file] [log] [blame]
// Copyright 2010-2014, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package org.mozc.android.inputmethod.japanese.hardwarekeyboard;
import org.mozc.android.inputmethod.japanese.JapaneseKeyboard.KeyboardSpecification;
import org.mozc.android.inputmethod.japanese.KeycodeConverter.KeyEventInterface;
import org.mozc.android.inputmethod.japanese.hardwarekeyboard.HardwareKeyboard.CompositionSwitchMode;
import org.mozc.android.inputmethod.japanese.preference.ClientSidePreference.HardwareKeyMap;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCommands;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCommands.KeyEvent.ModifierKey;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCommands.KeyEvent.SpecialKey;
import org.mozc.android.inputmethod.japanese.testing.MozcPreferenceUtil;
import org.mozc.android.inputmethod.japanese.testing.Parameter;
import com.google.common.base.Optional;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.os.Build;
import android.test.InstrumentationTestCase;
import android.test.MoreAsserts;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.InputDevice;
import android.view.KeyEvent;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
/**
*
*/
public class HardwareKeyboardSpecificationTest extends InstrumentationTestCase {
@SmallTest
public void testIsPrintable() {
int[] printables = {'a', ' ', '猫', '☀'};
int[] nonPrintables = {'\t', '\n', '\0', '\uFFFF'};
for (int codepoint : printables) {
assertTrue(String.format("%d is printable.", codepoint),
HardwareKeyboardSpecification.isPrintable(codepoint));
}
for (int codepoint : nonPrintables) {
assertFalse(String.format("%d is not printable.", codepoint),
HardwareKeyboardSpecification.isPrintable(codepoint));
}
}
@SmallTest
public void testDefaultConverter() {
HardwareKeyboardSpecification keyboardSpecification =
HardwareKeyboardSpecification.DEFAULT;
class KeyEventMock extends KeyEvent {
private int unicode;
KeyEventMock(int action, int keycode, int meta, int unicode) {
super(0, 0, action, keycode, 0, meta);
this.unicode = unicode;
}
@Override
public int getUnicodeChar() {
return unicode;
}
}
{
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertEquals(keyEvent.getUnicodeChar(), mozcKeyEvent.getKeyCode());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SPACE);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertFalse(mozcKeyEvent.hasKeyCode());
assertEquals(SpecialKey.SPACE, mozcKeyEvent.getSpecialKey());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertFalse(mozcKeyEvent.hasKeyCode());
assertEquals(SpecialKey.ENTER, mozcKeyEvent.getSpecialKey());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEventMock(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A,
KeyEvent.META_SHIFT_ON, 'A');
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertEquals(keyEvent.getUnicodeChar(), mozcKeyEvent.getKeyCode());
// shift+a is printable ('A') so no modifier shouldn't be sent.
assertEquals(0, mozcKeyEvent.getModifierKeysCount());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEventMock(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertEquals('a', mozcKeyEvent.getKeyCode());
// shift+alt+a is not printable so modifier should be sent.
HashSet<ModifierKey> expected = new HashSet<ProtoCommands.KeyEvent.ModifierKey>();
expected.add(ModifierKey.SHIFT);
expected.add(ModifierKey.ALT);
MoreAsserts.assertEquals(expected,
new HashSet<ModifierKey>(mozcKeyEvent.getModifierKeysList()));
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEventMock(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
assertEquals('a', mozcKeyEvent.getKeyCode());
// shift+ctrl+alt+a is not printable so modifier should be sent.
HashSet<ModifierKey> expected = new HashSet<ProtoCommands.KeyEvent.ModifierKey>();
expected.add(ModifierKey.SHIFT);
expected.add(ModifierKey.ALT);
expected.add(ModifierKey.CTRL);
MoreAsserts.assertEquals(expected,
new HashSet<ModifierKey>(mozcKeyEvent.getModifierKeysList()));
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertEquals(keyEvent, keyEventInterface.getNativeEvent());
}
{
KeyEvent keyEvent = new KeyEventMock(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_GRAVE, KeyEvent.META_ALT_ON, 0);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
assertEquals(Optional.of(CompositionSwitchMode.TOGGLE),
keyboardSpecification.getCompositionSwitchMode(keyEvent));
}
assertFalse(keyboardSpecification.getCompositionSwitchMode(new KeyEvent(0, 0)).isPresent());
assertEquals(KeyboardSpecification.HARDWARE_QWERTY_KANA,
keyboardSpecification.getKanaKeyboardSpecification());
assertEquals(KeyboardSpecification.HARDWARE_QWERTY_ALPHABET,
keyboardSpecification.getAlphabetKeyboardSpecification());
}
// TODO(matsuzakit): This test is overkill. Simplify.
@SmallTest
public void testOADG109A() {
HardwareKeyboardSpecification keyboardSpecification =
HardwareKeyboardSpecification.JAPANESE109A;
class TestData extends Parameter{
final int scanCode;
final int keyCode;
final int metaState;
final int expectKeyCode;
final SpecialKey expectSpecialKey;
final Optional<CompositionSwitchMode> expectCompositionSwitchMode;
final Set<ModifierKey> expectModifierKeySet;
TestData(int scanCode, int keyCode, int metaState,
int expectKeyCode, SpecialKey expectSpecialKey,
Set<ModifierKey> expectModifierKeySet,
CompositionSwitchMode expectCompositionSwitchMode) {
this.scanCode = scanCode;
this.keyCode = keyCode;
this.metaState = metaState;
this.expectKeyCode = expectKeyCode;
this.expectSpecialKey = expectSpecialKey;
this.expectCompositionSwitchMode = Optional.fromNullable(expectCompositionSwitchMode);
this.expectModifierKeySet = expectModifierKeySet;
}
}
final Set<ModifierKey> noModifierKeys = Collections.emptySet();
final Set<ModifierKey> shiftModified = new HashSet<ModifierKey>(
Collections.singletonList(ModifierKey.SHIFT));
Set<ModifierKey> shiftAltModified = new HashSet<ModifierKey>();
shiftAltModified.add(ModifierKey.SHIFT);
shiftAltModified.add(ModifierKey.ALT);
Set<ModifierKey> shiftAltCtrlModified = new HashSet<ModifierKey>();
shiftAltCtrlModified.add(ModifierKey.SHIFT);
shiftAltCtrlModified.add(ModifierKey.ALT);
shiftAltCtrlModified.add(ModifierKey.CTRL);
int keycodeYen;
int keycodeRo;
int keycodeMunhenkan;
int keycodeHenkan;
int keycodeKana;
int keycodeKatakana;
int keycodeZenkakuHankaku;
if (Build.VERSION.SDK_INT >= 16) {
keycodeYen = KeyEvent.KEYCODE_YEN;
keycodeRo = KeyEvent.KEYCODE_RO;
keycodeMunhenkan = KeyEvent.KEYCODE_MUHENKAN;
keycodeHenkan = KeyEvent.KEYCODE_HENKAN;
keycodeKana = KeyEvent.KEYCODE_KANA;
keycodeKatakana = KeyEvent.KEYCODE_KATAKANA_HIRAGANA;
keycodeZenkakuHankaku = KeyEvent.KEYCODE_ZENKAKU_HANKAKU;
} else {
keycodeYen = 0;
keycodeRo = 0;
keycodeMunhenkan = 0;
keycodeHenkan = 0;
keycodeKana = 0;
keycodeKatakana = 0;
keycodeZenkakuHankaku = KeyEvent.KEYCODE_GRAVE;
}
TestData[] testDataList = {
new TestData(0x02, KeyEvent.KEYCODE_1, 0, '1', null, noModifierKeys, null),
new TestData(0x02, KeyEvent.KEYCODE_1,
KeyEvent.META_SHIFT_ON, '!', null, noModifierKeys, null),
new TestData(0x03, KeyEvent.KEYCODE_2, 0, '2', null, noModifierKeys, null),
new TestData(0x03, KeyEvent.KEYCODE_2,
KeyEvent.META_SHIFT_ON, '"', null, noModifierKeys, null),
new TestData(0x04, KeyEvent.KEYCODE_3, 0, '3', null, noModifierKeys, null),
new TestData(0x04, KeyEvent.KEYCODE_3,
KeyEvent.META_SHIFT_ON, '#', null, noModifierKeys, null),
new TestData(0x05, KeyEvent.KEYCODE_4, 0, '4', null, noModifierKeys, null),
new TestData(0x05, KeyEvent.KEYCODE_4,
KeyEvent.META_SHIFT_ON, '$', null, noModifierKeys, null),
new TestData(0x06, KeyEvent.KEYCODE_5, 0, '5', null, noModifierKeys, null),
new TestData(0x06, KeyEvent.KEYCODE_5,
KeyEvent.META_SHIFT_ON, '%', null, noModifierKeys, null),
new TestData(0x07, KeyEvent.KEYCODE_6, 0, '6', null, noModifierKeys, null),
new TestData(0x07, KeyEvent.KEYCODE_6,
KeyEvent.META_SHIFT_ON, '&', null, noModifierKeys, null),
new TestData(0x08, KeyEvent.KEYCODE_7, 0, '7', null, noModifierKeys, null),
new TestData(0x08, KeyEvent.KEYCODE_7,
KeyEvent.META_SHIFT_ON, '\'', null, noModifierKeys, null),
new TestData(0x09, KeyEvent.KEYCODE_8, 0, '8', null, noModifierKeys, null),
new TestData(0x09, KeyEvent.KEYCODE_8,
KeyEvent.META_SHIFT_ON, '(', null, noModifierKeys, null),
new TestData(0x0A, KeyEvent.KEYCODE_9, 0, '9', null, noModifierKeys, null),
new TestData(0x0A, KeyEvent.KEYCODE_9,
KeyEvent.META_SHIFT_ON, ')', null, noModifierKeys, null),
new TestData(0x0B, KeyEvent.KEYCODE_0, 0, '0', null, noModifierKeys, null),
// Note: Expect nothing for shift+0.
new TestData(0x0C, KeyEvent.KEYCODE_MINUS, 0, '-', null, noModifierKeys, null),
new TestData(0x0C, KeyEvent.KEYCODE_MINUS,
KeyEvent.META_SHIFT_ON, '=', null, noModifierKeys, null),
new TestData(0x0D, KeyEvent.KEYCODE_EQUALS, 0, '^', null, noModifierKeys, null),
new TestData(0x0D, KeyEvent.KEYCODE_EQUALS,
KeyEvent.META_SHIFT_ON, '~', null, noModifierKeys, null),
new TestData(0x7C, keycodeYen, 0, '\u00a5', null, noModifierKeys, null),
new TestData(0x7C, keycodeYen, KeyEvent.META_SHIFT_ON, '|', null, noModifierKeys, null),
new TestData(0x10, KeyEvent.KEYCODE_Q, 0, 'q', null, noModifierKeys, null),
new TestData(0x10, KeyEvent.KEYCODE_Q,
KeyEvent.META_SHIFT_ON, 'Q', null, noModifierKeys, null),
new TestData(0x11, KeyEvent.KEYCODE_W, 0, 'w', null, noModifierKeys, null),
new TestData(0x11, KeyEvent.KEYCODE_W,
KeyEvent.META_SHIFT_ON, 'W', null, noModifierKeys, null),
new TestData(0x12, KeyEvent.KEYCODE_E, 0, 'e', null, noModifierKeys, null),
new TestData(0x12, KeyEvent.KEYCODE_E,
KeyEvent.META_SHIFT_ON, 'E', null, noModifierKeys, null),
new TestData(0x13, KeyEvent.KEYCODE_R, 0, 'r', null, noModifierKeys, null),
new TestData(0x13, KeyEvent.KEYCODE_R,
KeyEvent.META_SHIFT_ON, 'R', null, noModifierKeys, null),
new TestData(0x14, KeyEvent.KEYCODE_T, 0, 't', null, noModifierKeys, null),
new TestData(0x14, KeyEvent.KEYCODE_T,
KeyEvent.META_SHIFT_ON, 'T', null, noModifierKeys, null),
new TestData(0x15, KeyEvent.KEYCODE_Y, 0, 'y', null, noModifierKeys, null),
new TestData(0x15, KeyEvent.KEYCODE_Y,
KeyEvent.META_SHIFT_ON, 'Y', null, noModifierKeys, null),
new TestData(0x16, KeyEvent.KEYCODE_U, 0, 'u', null, noModifierKeys, null),
new TestData(0x16, KeyEvent.KEYCODE_U,
KeyEvent.META_SHIFT_ON, 'U', null, noModifierKeys, null),
new TestData(0x17, KeyEvent.KEYCODE_I, 0, 'i', null, noModifierKeys, null),
new TestData(0x17, KeyEvent.KEYCODE_I,
KeyEvent.META_SHIFT_ON, 'I', null, noModifierKeys, null),
new TestData(0x18, KeyEvent.KEYCODE_O, 0, 'o', null, noModifierKeys, null),
new TestData(0x18, KeyEvent.KEYCODE_O,
KeyEvent.META_SHIFT_ON, 'O', null, noModifierKeys, null),
new TestData(0x19, KeyEvent.KEYCODE_P, 0, 'p', null, noModifierKeys, null),
new TestData(0x19, KeyEvent.KEYCODE_P,
KeyEvent.META_SHIFT_ON, 'P', null, noModifierKeys, null),
new TestData(0x1A, KeyEvent.KEYCODE_LEFT_BRACKET, 0, '@', null, noModifierKeys, null),
new TestData(0x1A, KeyEvent.KEYCODE_LEFT_BRACKET,
KeyEvent.META_SHIFT_ON, '`', null, noModifierKeys, null),
new TestData(0x1B, KeyEvent.KEYCODE_RIGHT_BRACKET, 0, '[', null, noModifierKeys, null),
new TestData(0x1B, KeyEvent.KEYCODE_RIGHT_BRACKET,
KeyEvent.META_SHIFT_ON, '{', null, noModifierKeys, null),
new TestData(0x1E, KeyEvent.KEYCODE_A, 0, 'a', null, noModifierKeys, null),
new TestData(0x1E, KeyEvent.KEYCODE_A,
KeyEvent.META_SHIFT_ON, 'A', null, noModifierKeys, null),
new TestData(0x1F, KeyEvent.KEYCODE_S, 0, 's', null, noModifierKeys, null),
new TestData(0x1F, KeyEvent.KEYCODE_S,
KeyEvent.META_SHIFT_ON, 'S', null, noModifierKeys, null),
new TestData(0x20, KeyEvent.KEYCODE_D, 0, 'd', null, noModifierKeys, null),
new TestData(0x20, KeyEvent.KEYCODE_D,
KeyEvent.META_SHIFT_ON, 'D', null, noModifierKeys, null),
new TestData(0x21, KeyEvent.KEYCODE_F, 0, 'f', null, noModifierKeys, null),
new TestData(0x21, KeyEvent.KEYCODE_F,
KeyEvent.META_SHIFT_ON, 'F', null, noModifierKeys, null),
new TestData(0x22, KeyEvent.KEYCODE_G, 0, 'g', null, noModifierKeys, null),
new TestData(0x22, KeyEvent.KEYCODE_G,
KeyEvent.META_SHIFT_ON, 'G', null, noModifierKeys, null),
new TestData(0x23, KeyEvent.KEYCODE_H, 0, 'h', null, noModifierKeys, null),
new TestData(0x23, KeyEvent.KEYCODE_H,
KeyEvent.META_SHIFT_ON, 'H', null, noModifierKeys, null),
new TestData(0x24, KeyEvent.KEYCODE_J, 0, 'j', null, noModifierKeys, null),
new TestData(0x24, KeyEvent.KEYCODE_J,
KeyEvent.META_SHIFT_ON, 'J', null, noModifierKeys, null),
new TestData(0x25, KeyEvent.KEYCODE_K, 0, 'k', null, noModifierKeys, null),
new TestData(0x25, KeyEvent.KEYCODE_K,
KeyEvent.META_SHIFT_ON, 'K', null, noModifierKeys, null),
new TestData(0x26, KeyEvent.KEYCODE_L, 0, 'l', null, noModifierKeys, null),
new TestData(0x26, KeyEvent.KEYCODE_L,
KeyEvent.META_SHIFT_ON, 'L', null, noModifierKeys, null),
new TestData(0x27, KeyEvent.KEYCODE_SEMICOLON, 0, ';', null, noModifierKeys, null),
new TestData(0x27, KeyEvent.KEYCODE_SEMICOLON,
KeyEvent.META_SHIFT_ON, '+', null, noModifierKeys, null),
new TestData(0x28, KeyEvent.KEYCODE_APOSTROPHE, 0, ':', null, noModifierKeys, null),
new TestData(0x28, KeyEvent.KEYCODE_APOSTROPHE,
KeyEvent.META_SHIFT_ON, '*', null, noModifierKeys, null),
new TestData(0x2B, KeyEvent.KEYCODE_BACKSLASH, 0, ']', null, noModifierKeys, null),
new TestData(0x2B, KeyEvent.KEYCODE_BACKSLASH,
KeyEvent.META_SHIFT_ON, '}', null, noModifierKeys, null),
new TestData(0x2C, KeyEvent.KEYCODE_Z, 0, 'z', null, noModifierKeys, null),
new TestData(0x2C, KeyEvent.KEYCODE_Z,
KeyEvent.META_SHIFT_ON, 'Z', null, noModifierKeys, null),
new TestData(0x2D, KeyEvent.KEYCODE_X, 0, 'x', null, noModifierKeys, null),
new TestData(0x2D, KeyEvent.KEYCODE_X,
KeyEvent.META_SHIFT_ON, 'X', null, noModifierKeys, null),
new TestData(0x2E, KeyEvent.KEYCODE_C, 0, 'c', null, noModifierKeys, null),
new TestData(0x2E, KeyEvent.KEYCODE_C,
KeyEvent.META_SHIFT_ON, 'C', null, noModifierKeys, null),
new TestData(0x2F, KeyEvent.KEYCODE_V, 0, 'v', null, noModifierKeys, null),
new TestData(0x2F, KeyEvent.KEYCODE_V,
KeyEvent.META_SHIFT_ON, 'V', null, noModifierKeys, null),
new TestData(0x30, KeyEvent.KEYCODE_B, 0, 'b', null, noModifierKeys, null),
new TestData(0x30, KeyEvent.KEYCODE_B,
KeyEvent.META_SHIFT_ON, 'B', null, noModifierKeys, null),
new TestData(0x31, KeyEvent.KEYCODE_N, 0, 'n', null, noModifierKeys, null),
new TestData(0x31, KeyEvent.KEYCODE_N,
KeyEvent.META_SHIFT_ON, 'N', null, noModifierKeys, null),
new TestData(0x32, KeyEvent.KEYCODE_M, 0, 'm', null, noModifierKeys, null),
new TestData(0x32, KeyEvent.KEYCODE_M,
KeyEvent.META_SHIFT_ON, 'M', null, noModifierKeys, null),
new TestData(0x33, KeyEvent.KEYCODE_COMMA, 0, ',', null, noModifierKeys, null),
new TestData(0x33, KeyEvent.KEYCODE_COMMA,
KeyEvent.META_SHIFT_ON, '<', null, noModifierKeys, null),
new TestData(0x34, KeyEvent.KEYCODE_PERIOD, 0, '.', null, noModifierKeys, null),
new TestData(0x34, KeyEvent.KEYCODE_PERIOD,
KeyEvent.META_SHIFT_ON, '>', null, noModifierKeys, null),
new TestData(0x35, KeyEvent.KEYCODE_SLASH, 0, '/', null, noModifierKeys, null),
new TestData(0x35, KeyEvent.KEYCODE_SLASH,
KeyEvent.META_SHIFT_ON, '?', null, noModifierKeys, null),
new TestData(0x59, keycodeRo, 0, '\\', null, noModifierKeys, null),
new TestData(0x59, keycodeRo, KeyEvent.META_SHIFT_ON, '_', null, noModifierKeys, null),
new TestData(0x01, KeyEvent.KEYCODE_ESCAPE, 0, 0, SpecialKey.ESCAPE, noModifierKeys, null),
new TestData(0x01, KeyEvent.KEYCODE_ESCAPE,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.ESCAPE, shiftModified, null),
new TestData(0x01, KeyEvent.KEYCODE_ESCAPE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.ESCAPE, shiftAltModified, null),
new TestData(0x01, KeyEvent.KEYCODE_ESCAPE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.ESCAPE, shiftAltCtrlModified, null),
new TestData(0x3B, KeyEvent.KEYCODE_F1, 0, 0, SpecialKey.F1, noModifierKeys, null),
new TestData(0x3B, KeyEvent.KEYCODE_F1,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F1, shiftModified, null),
new TestData(0x3B, KeyEvent.KEYCODE_F1,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F1, shiftAltModified, null),
new TestData(0x3B, KeyEvent.KEYCODE_F1,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F1, shiftAltCtrlModified, null),
new TestData(0x3C, KeyEvent.KEYCODE_F2, 0, 0, SpecialKey.F2, noModifierKeys, null),
new TestData(0x3C, KeyEvent.KEYCODE_F2,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F2, shiftModified, null),
new TestData(0x3C, KeyEvent.KEYCODE_F2,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F2, shiftAltModified, null),
new TestData(0x3C, KeyEvent.KEYCODE_F2,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F2, shiftAltCtrlModified, null),
new TestData(0x3D, KeyEvent.KEYCODE_F3, 0, 0, SpecialKey.F3, noModifierKeys, null),
new TestData(0x3D, KeyEvent.KEYCODE_F3,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F3, shiftModified, null),
new TestData(0x3D, KeyEvent.KEYCODE_F3,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F3, shiftAltModified, null),
new TestData(0x3D, KeyEvent.KEYCODE_F3,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F3, shiftAltCtrlModified, null),
new TestData(0x3E, KeyEvent.KEYCODE_F4, 0, 0, SpecialKey.F4, noModifierKeys, null),
new TestData(0x3E, KeyEvent.KEYCODE_F4,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F4, shiftModified, null),
new TestData(0x3E, KeyEvent.KEYCODE_F4,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F4, shiftAltModified, null),
new TestData(0x3E, KeyEvent.KEYCODE_F4,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F4, shiftAltCtrlModified, null),
new TestData(0x3F, KeyEvent.KEYCODE_F5, 0, 0, SpecialKey.F5, noModifierKeys, null),
new TestData(0x3F, KeyEvent.KEYCODE_F5,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F5, shiftModified, null),
new TestData(0x3F, KeyEvent.KEYCODE_F5,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F5, shiftAltModified, null),
new TestData(0x3F, KeyEvent.KEYCODE_F5,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F5, shiftAltCtrlModified, null),
new TestData(0x40, KeyEvent.KEYCODE_F6, 0, 0, SpecialKey.F6, noModifierKeys, null),
new TestData(0x40, KeyEvent.KEYCODE_F6,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F6, shiftModified, null),
new TestData(0x40, KeyEvent.KEYCODE_F6,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F6, shiftAltModified, null),
new TestData(0x40, KeyEvent.KEYCODE_F6,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F6, shiftAltCtrlModified, null),
new TestData(0x41, KeyEvent.KEYCODE_F7, 0, 0, SpecialKey.F7, noModifierKeys, null),
new TestData(0x41, KeyEvent.KEYCODE_F7,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F7, shiftModified, null),
new TestData(0x41, KeyEvent.KEYCODE_F7,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F7, shiftAltModified, null),
new TestData(0x41, KeyEvent.KEYCODE_F7,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F7, shiftAltCtrlModified, null),
new TestData(0x42, KeyEvent.KEYCODE_F8, 0, 0, SpecialKey.F8, noModifierKeys, null),
new TestData(0x42, KeyEvent.KEYCODE_F8,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F8, shiftModified, null),
new TestData(0x42, KeyEvent.KEYCODE_F8,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F8, shiftAltModified, null),
new TestData(0x42, KeyEvent.KEYCODE_F8,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F8, shiftAltCtrlModified, null),
new TestData(0x43, KeyEvent.KEYCODE_F9, 0, 0, SpecialKey.F9, noModifierKeys, null),
new TestData(0x43, KeyEvent.KEYCODE_F9,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F9, shiftModified, null),
new TestData(0x43, KeyEvent.KEYCODE_F9,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F9, shiftAltModified, null),
new TestData(0x43, KeyEvent.KEYCODE_F9,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F9, shiftAltCtrlModified, null),
new TestData(0x44, KeyEvent.KEYCODE_F10, 0, 0, SpecialKey.F10, noModifierKeys, null),
new TestData(0x44, KeyEvent.KEYCODE_F10,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F10, shiftModified, null),
new TestData(0x44, KeyEvent.KEYCODE_F10,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F10, shiftAltModified, null),
new TestData(0x44, KeyEvent.KEYCODE_F10,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F10, shiftAltCtrlModified, null),
new TestData(0x57, KeyEvent.KEYCODE_F11, 0, 0, SpecialKey.F11, noModifierKeys, null),
new TestData(0x57, KeyEvent.KEYCODE_F11,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F11, shiftModified, null),
new TestData(0x57, KeyEvent.KEYCODE_F11,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F11, shiftAltModified, null),
new TestData(0x57, KeyEvent.KEYCODE_F11,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F11, shiftAltCtrlModified, null),
new TestData(0x58, KeyEvent.KEYCODE_F12, 0, 0, SpecialKey.F12, noModifierKeys, null),
new TestData(0x58, KeyEvent.KEYCODE_F12,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.F12, shiftModified, null),
new TestData(0x58, KeyEvent.KEYCODE_F12,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.F12, shiftAltModified, null),
new TestData(0x58, KeyEvent.KEYCODE_F12,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.F12, shiftAltCtrlModified, null),
new TestData(0x6F, KeyEvent.KEYCODE_FORWARD_DEL,
0, 0, SpecialKey.DEL, noModifierKeys, null),
new TestData(0x6F, KeyEvent.KEYCODE_FORWARD_DEL,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.DEL, shiftModified, null),
new TestData(0x6F, KeyEvent.KEYCODE_FORWARD_DEL,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.DEL, shiftAltModified, null),
new TestData(0x6F, KeyEvent.KEYCODE_FORWARD_DEL,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.DEL, shiftAltCtrlModified, null),
new TestData(0x0E, KeyEvent.KEYCODE_DEL,
0, 0, SpecialKey.BACKSPACE, noModifierKeys, null),
new TestData(0x0E, KeyEvent.KEYCODE_DEL,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.BACKSPACE, shiftModified, null),
new TestData(0x0E, KeyEvent.KEYCODE_DEL,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.BACKSPACE, shiftAltModified, null),
new TestData(0x0E, KeyEvent.KEYCODE_DEL,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.BACKSPACE, shiftAltCtrlModified, null),
new TestData(0x0F, KeyEvent.KEYCODE_TAB, 0, 0, SpecialKey.TAB, noModifierKeys, null),
new TestData(0x0F, KeyEvent.KEYCODE_TAB,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.TAB, shiftModified, null),
new TestData(0x0F, KeyEvent.KEYCODE_TAB,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.TAB, shiftAltModified, null),
new TestData(0x0F, KeyEvent.KEYCODE_TAB,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.TAB, shiftAltCtrlModified, null),
new TestData(0x1C, KeyEvent.KEYCODE_ENTER,
0, 0, SpecialKey.ENTER, noModifierKeys, null),
new TestData(0x1C, KeyEvent.KEYCODE_ENTER,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.ENTER, shiftModified, null),
new TestData(0x1C, KeyEvent.KEYCODE_ENTER,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.ENTER, shiftAltModified, null),
new TestData(0x1C, KeyEvent.KEYCODE_ENTER,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.ENTER, shiftAltCtrlModified, null),
new TestData(0x5E, keycodeMunhenkan, 0, 0, SpecialKey.MUHENKAN, noModifierKeys, null),
new TestData(0x5E, keycodeMunhenkan,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.MUHENKAN, shiftModified, null),
new TestData(0x5E, keycodeMunhenkan,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.MUHENKAN, shiftAltModified, null),
new TestData(0x5E, keycodeMunhenkan,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.MUHENKAN, shiftAltCtrlModified, null),
new TestData(0x39, KeyEvent.KEYCODE_SPACE,
0, 0, SpecialKey.SPACE, noModifierKeys, null),
new TestData(0x39, KeyEvent.KEYCODE_SPACE,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.SPACE, shiftModified, null),
new TestData(0x39, KeyEvent.KEYCODE_SPACE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.SPACE, shiftAltModified, null),
new TestData(0x39, KeyEvent.KEYCODE_SPACE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.SPACE, shiftAltCtrlModified, null),
new TestData(0x5C, keycodeHenkan, 0, 0, SpecialKey.HENKAN, noModifierKeys, null),
new TestData(0x5C, keycodeHenkan,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.HENKAN, shiftModified, null),
new TestData(0x5C, keycodeHenkan, KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.HENKAN, shiftAltModified, null),
new TestData(0x5C, keycodeHenkan,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.HENKAN, shiftAltCtrlModified, null),
new TestData(0x5D, keycodeKatakana, 0, 0, SpecialKey.KATAKANA, noModifierKeys, null),
new TestData(0x5D, keycodeKatakana,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.KATAKANA, shiftModified, null),
new TestData(0x5D, keycodeKatakana,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.KATAKANA, shiftAltModified, null),
new TestData(0x5D, keycodeKatakana,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.KATAKANA, shiftAltCtrlModified, null),
new TestData(0x7A, keycodeKana, 0, 0, SpecialKey.KANA, noModifierKeys, null),
new TestData(0x7A, keycodeKana,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.KANA, shiftModified, null),
new TestData(0x7A, keycodeKana,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.KANA, shiftAltModified, null),
new TestData(0x7A, keycodeKana,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.KANA, shiftAltCtrlModified, null),
new TestData(0x67, KeyEvent.KEYCODE_DPAD_UP,
0, 0, SpecialKey.UP, noModifierKeys, null),
new TestData(0x67, KeyEvent.KEYCODE_DPAD_UP,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.UP, shiftModified, null),
new TestData(0x67, KeyEvent.KEYCODE_DPAD_UP,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.UP, shiftAltModified, null),
new TestData(0x67, KeyEvent.KEYCODE_DPAD_UP,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.UP, shiftAltCtrlModified, null),
new TestData(0x69, KeyEvent.KEYCODE_DPAD_LEFT,
0, 0, SpecialKey.LEFT, noModifierKeys, null),
new TestData(0x69, KeyEvent.KEYCODE_DPAD_LEFT,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.LEFT, shiftModified, null),
new TestData(0x69, KeyEvent.KEYCODE_DPAD_LEFT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.LEFT, shiftAltModified, null),
new TestData(0x69, KeyEvent.KEYCODE_DPAD_LEFT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.LEFT, shiftAltCtrlModified, null),
new TestData(0x6C, KeyEvent.KEYCODE_DPAD_DOWN,
0, 0, SpecialKey.DOWN, noModifierKeys, null),
new TestData(0x6C, KeyEvent.KEYCODE_DPAD_DOWN,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.DOWN, shiftModified, null),
new TestData(0x6C, KeyEvent.KEYCODE_DPAD_DOWN,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.DOWN, shiftAltModified, null),
new TestData(0x6C, KeyEvent.KEYCODE_DPAD_DOWN,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.DOWN, shiftAltCtrlModified, null),
new TestData(0x6A, KeyEvent.KEYCODE_DPAD_RIGHT,
0, 0, SpecialKey.RIGHT, noModifierKeys, null),
new TestData(0x6A, KeyEvent.KEYCODE_DPAD_RIGHT,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.RIGHT, shiftModified, null),
new TestData(0x6A, KeyEvent.KEYCODE_DPAD_RIGHT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.RIGHT, shiftAltModified, null),
new TestData(0x6A, KeyEvent.KEYCODE_DPAD_RIGHT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.RIGHT, shiftAltCtrlModified, null),
new TestData(0x66, KeyEvent.KEYCODE_MOVE_HOME,
0, 0, SpecialKey.HOME, noModifierKeys, null),
new TestData(0x66, KeyEvent.KEYCODE_MOVE_HOME,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.HOME, shiftModified, null),
new TestData(0x66, KeyEvent.KEYCODE_MOVE_HOME,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.HOME, shiftAltModified, null),
new TestData(0x66, KeyEvent.KEYCODE_MOVE_HOME,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.HOME, shiftAltCtrlModified, null),
new TestData(0x6B, KeyEvent.KEYCODE_MOVE_END,
0, 0, SpecialKey.END, noModifierKeys, null),
new TestData(0x6B, KeyEvent.KEYCODE_MOVE_END,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.END, shiftModified, null),
new TestData(0x6B, KeyEvent.KEYCODE_MOVE_END,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.END, shiftAltModified, null),
new TestData(0x6B, KeyEvent.KEYCODE_MOVE_END,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.END, shiftAltCtrlModified, null),
new TestData(0x6E, KeyEvent.KEYCODE_INSERT,
0, 0, SpecialKey.INSERT, noModifierKeys, null),
new TestData(0x6E, KeyEvent.KEYCODE_INSERT,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.INSERT, shiftModified, null),
new TestData(0x6E, KeyEvent.KEYCODE_INSERT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.INSERT, shiftAltModified, null),
new TestData(0x6E, KeyEvent.KEYCODE_INSERT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.INSERT, shiftAltCtrlModified, null),
new TestData(0x68, KeyEvent.KEYCODE_PAGE_UP,
0, 0, SpecialKey.PAGE_UP, noModifierKeys, null),
new TestData(0x68, KeyEvent.KEYCODE_PAGE_UP,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.PAGE_UP, shiftModified, null),
new TestData(0x68, KeyEvent.KEYCODE_PAGE_UP,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.PAGE_UP, shiftAltModified, null),
new TestData(0x68, KeyEvent.KEYCODE_PAGE_UP,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.PAGE_UP, shiftAltCtrlModified, null),
new TestData(0x6D, KeyEvent.KEYCODE_PAGE_DOWN,
0, 0, SpecialKey.PAGE_DOWN, noModifierKeys, null),
new TestData(0x6D, KeyEvent.KEYCODE_PAGE_DOWN,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.PAGE_DOWN, shiftModified, null),
new TestData(0x6D, KeyEvent.KEYCODE_PAGE_DOWN,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.PAGE_DOWN, shiftAltModified, null),
new TestData(0x6D, KeyEvent.KEYCODE_PAGE_DOWN,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.PAGE_DOWN, shiftAltCtrlModified, null),
new TestData(0x62, KeyEvent.KEYCODE_NUMPAD_DIVIDE,
0, 0, SpecialKey.DIVIDE, noModifierKeys, null),
new TestData(0x62, KeyEvent.KEYCODE_NUMPAD_DIVIDE,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.DIVIDE, shiftModified, null),
new TestData(0x62, KeyEvent.KEYCODE_NUMPAD_DIVIDE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.DIVIDE, shiftAltModified, null),
new TestData(0x62, KeyEvent.KEYCODE_NUMPAD_DIVIDE,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.DIVIDE, shiftAltCtrlModified, null),
new TestData(0x37, KeyEvent.KEYCODE_NUMPAD_MULTIPLY,
0, 0, SpecialKey.MULTIPLY, noModifierKeys, null),
new TestData(0x37, KeyEvent.KEYCODE_NUMPAD_MULTIPLY,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.MULTIPLY, shiftModified, null),
new TestData(0x37, KeyEvent.KEYCODE_NUMPAD_MULTIPLY,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.MULTIPLY, shiftAltModified, null),
new TestData(0x37, KeyEvent.KEYCODE_NUMPAD_MULTIPLY,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.MULTIPLY, shiftAltCtrlModified, null),
new TestData(0x4A, KeyEvent.KEYCODE_NUMPAD_SUBTRACT,
0, 0, SpecialKey.SUBTRACT, noModifierKeys, null),
new TestData(0x4A, KeyEvent.KEYCODE_NUMPAD_SUBTRACT,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.SUBTRACT, shiftModified, null),
new TestData(0x4A, KeyEvent.KEYCODE_NUMPAD_SUBTRACT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.SUBTRACT, shiftAltModified, null),
new TestData(0x4A, KeyEvent.KEYCODE_NUMPAD_SUBTRACT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.SUBTRACT, shiftAltCtrlModified, null),
new TestData(0x4E, KeyEvent.KEYCODE_NUMPAD_ADD,
0, 0, SpecialKey.ADD, noModifierKeys, null),
new TestData(0x4E, KeyEvent.KEYCODE_NUMPAD_ADD,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.ADD, shiftModified, null),
new TestData(0x4E, KeyEvent.KEYCODE_NUMPAD_ADD,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.ADD, shiftAltModified, null),
new TestData(0x4E, KeyEvent.KEYCODE_NUMPAD_ADD,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.ADD, shiftAltCtrlModified, null),
new TestData(0x60, KeyEvent.KEYCODE_NUMPAD_ENTER,
0, 0, SpecialKey.SEPARATOR, noModifierKeys, null),
new TestData(0x60, KeyEvent.KEYCODE_NUMPAD_ENTER,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.SEPARATOR, shiftModified, null),
new TestData(0x60, KeyEvent.KEYCODE_NUMPAD_ENTER,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.SEPARATOR, shiftAltModified, null),
new TestData(0x60, KeyEvent.KEYCODE_NUMPAD_ENTER,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.SEPARATOR, shiftAltCtrlModified, null),
new TestData(0x53, KeyEvent.KEYCODE_NUMPAD_DOT,
0, 0, SpecialKey.DECIMAL, noModifierKeys, null),
new TestData(0x53, KeyEvent.KEYCODE_NUMPAD_DOT,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.DECIMAL, shiftModified, null),
new TestData(0x53, KeyEvent.KEYCODE_NUMPAD_DOT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.DECIMAL, shiftAltModified, null),
new TestData(0x53, KeyEvent.KEYCODE_NUMPAD_DOT,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.DECIMAL, shiftAltCtrlModified, null),
new TestData(0x52, KeyEvent.KEYCODE_NUMPAD_0,
0, 0, SpecialKey.NUMPAD0, noModifierKeys, null),
new TestData(0x52, KeyEvent.KEYCODE_NUMPAD_0,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD0, shiftModified, null),
new TestData(0x52, KeyEvent.KEYCODE_NUMPAD_0,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD0, shiftAltModified, null),
new TestData(0x52, KeyEvent.KEYCODE_NUMPAD_0,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD0, shiftAltCtrlModified, null),
new TestData(0x4F, KeyEvent.KEYCODE_NUMPAD_1,
0, 0, SpecialKey.NUMPAD1, noModifierKeys, null),
new TestData(0x4F, KeyEvent.KEYCODE_NUMPAD_1,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD1, shiftModified, null),
new TestData(0x4F, KeyEvent.KEYCODE_NUMPAD_1,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD1, shiftAltModified, null),
new TestData(0x4F, KeyEvent.KEYCODE_NUMPAD_1,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD1, shiftAltCtrlModified, null),
new TestData(0x50, KeyEvent.KEYCODE_NUMPAD_2,
0, 0, SpecialKey.NUMPAD2, noModifierKeys, null),
new TestData(0x50, KeyEvent.KEYCODE_NUMPAD_2,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD2, shiftModified, null),
new TestData(0x50, KeyEvent.KEYCODE_NUMPAD_2,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD2, shiftAltModified, null),
new TestData(0x50, KeyEvent.KEYCODE_NUMPAD_2,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD2, shiftAltCtrlModified, null),
new TestData(0x51, KeyEvent.KEYCODE_NUMPAD_3,
0, 0, SpecialKey.NUMPAD3, noModifierKeys, null),
new TestData(0x51, KeyEvent.KEYCODE_NUMPAD_3,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD3, shiftModified, null),
new TestData(0x51, KeyEvent.KEYCODE_NUMPAD_3,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD3, shiftAltModified, null),
new TestData(0x51, KeyEvent.KEYCODE_NUMPAD_3,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD3, shiftAltCtrlModified, null),
new TestData(0x4B, KeyEvent.KEYCODE_NUMPAD_4,
0, 0, SpecialKey.NUMPAD4, noModifierKeys, null),
new TestData(0x4B, KeyEvent.KEYCODE_NUMPAD_4,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD4, shiftModified, null),
new TestData(0x4B, KeyEvent.KEYCODE_NUMPAD_4,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD4, shiftAltModified, null),
new TestData(0x4B, KeyEvent.KEYCODE_NUMPAD_4,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD4, shiftAltCtrlModified, null),
new TestData(0x4C, KeyEvent.KEYCODE_NUMPAD_5,
0, 0, SpecialKey.NUMPAD5, noModifierKeys, null),
new TestData(0x4C, KeyEvent.KEYCODE_NUMPAD_5,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD5, shiftModified, null),
new TestData(0x4C, KeyEvent.KEYCODE_NUMPAD_5,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD5, shiftAltModified, null),
new TestData(0x4C, KeyEvent.KEYCODE_NUMPAD_5,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD5, shiftAltCtrlModified, null),
new TestData(0x4D, KeyEvent.KEYCODE_NUMPAD_6,
0, 0, SpecialKey.NUMPAD6, noModifierKeys, null),
new TestData(0x4D, KeyEvent.KEYCODE_NUMPAD_6,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD6, shiftModified, null),
new TestData(0x4D, KeyEvent.KEYCODE_NUMPAD_6,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD6, shiftAltModified, null),
new TestData(0x4D, KeyEvent.KEYCODE_NUMPAD_6,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD6, shiftAltCtrlModified, null),
new TestData(0x47, KeyEvent.KEYCODE_NUMPAD_7,
0, 0, SpecialKey.NUMPAD7, noModifierKeys, null),
new TestData(0x47, KeyEvent.KEYCODE_NUMPAD_7,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD7, shiftModified, null),
new TestData(0x47, KeyEvent.KEYCODE_NUMPAD_7,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD7, shiftAltModified, null),
new TestData(0x47, KeyEvent.KEYCODE_NUMPAD_7,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD7, shiftAltCtrlModified, null),
new TestData(0x48, KeyEvent.KEYCODE_NUMPAD_8,
0, 0, SpecialKey.NUMPAD8, noModifierKeys, null),
new TestData(0x48, KeyEvent.KEYCODE_NUMPAD_8,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD8, shiftModified, null),
new TestData(0x48, KeyEvent.KEYCODE_NUMPAD_8,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD8, shiftAltModified, null),
new TestData(0x48, KeyEvent.KEYCODE_NUMPAD_8,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD8, shiftAltCtrlModified, null),
new TestData(0x49, KeyEvent.KEYCODE_NUMPAD_9,
0, 0, SpecialKey.NUMPAD9, noModifierKeys, null),
new TestData(0x49, KeyEvent.KEYCODE_NUMPAD_9,
KeyEvent.META_SHIFT_ON, 0, SpecialKey.NUMPAD9, shiftModified, null),
new TestData(0x49, KeyEvent.KEYCODE_NUMPAD_9,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
SpecialKey.NUMPAD9, shiftAltModified, null),
new TestData(0x49, KeyEvent.KEYCODE_NUMPAD_9,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
SpecialKey.NUMPAD9, shiftAltCtrlModified, null),
new TestData(0x29, keycodeZenkakuHankaku,
0, 0, null, noModifierKeys, CompositionSwitchMode.TOGGLE),
new TestData(0x29, keycodeZenkakuHankaku,
KeyEvent.META_SHIFT_ON, 0, null, shiftModified, null),
new TestData(0x29, keycodeZenkakuHankaku, KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON, 0,
null, noModifierKeys, null),
new TestData(0x29, keycodeZenkakuHankaku,
KeyEvent.META_SHIFT_ON | KeyEvent.META_ALT_ON | KeyEvent.META_CTRL_ON, 0,
null, noModifierKeys, null),
};
for (final TestData testData : testDataList) {
KeyEvent keyEvent =
new KeyEvent(0, 0, 0, testData.keyCode, 0, testData.metaState, 0, testData.scanCode) {
@Override
public int getUnicodeChar() {
return testData.expectKeyCode;
}
};
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
ProtoCommands.KeyEvent mozcKeyEvent = keyboardSpecification.getMozcKeyEvent(keyEvent);
if (testData.expectKeyCode == 0 && testData.expectSpecialKey == null) {
assertNull(testData.toString(), mozcKeyEvent);
} else if (testData.expectKeyCode != 0) {
assertNotNull(testData.toString(), mozcKeyEvent);
assertEquals(testData.toString(), testData.expectKeyCode, mozcKeyEvent.getKeyCode());
assertFalse(testData.toString(), mozcKeyEvent.hasSpecialKey());
} else if (testData.expectSpecialKey != null) {
assertNotNull(testData.toString(), mozcKeyEvent);
assertEquals(testData.toString(), testData.expectSpecialKey, mozcKeyEvent.getSpecialKey());
assertFalse(testData.toString(), mozcKeyEvent.hasKeyCode());
}
if (mozcKeyEvent != null) {
MoreAsserts.assertEquals(testData.toString(), testData.expectModifierKeySet,
new HashSet<ModifierKey>(mozcKeyEvent.getModifierKeysList()));
}
assertEquals(testData.toString(), keyEvent,
keyboardSpecification.getKeyEventInterface(keyEvent).getNativeEvent());
assertEquals(testData.toString(), testData.expectCompositionSwitchMode,
keyboardSpecification.getCompositionSwitchMode(keyEvent));
}
assertEquals(KeyboardSpecification.HARDWARE_QWERTY_KANA,
keyboardSpecification.getKanaKeyboardSpecification());
assertEquals(KeyboardSpecification.HARDWARE_QWERTY_ALPHABET,
keyboardSpecification.getAlphabetKeyboardSpecification());
}
@SmallTest
public void testTweleveKeyConverter() {
HardwareKeyboardSpecification keyboardSpecification =
HardwareKeyboardSpecification.TWELVEKEY;
KeyEvent keyEventA = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A);
keyEventA.setSource(InputDevice.SOURCE_KEYBOARD);
assertEquals(keyEventA.getUnicodeChar(),
keyboardSpecification.getMozcKeyEvent(keyEventA).getKeyCode());
class TestData extends Parameter {
final int keyCode;
final int expectMozcKeyCode;
TestData(int keyCode, int expectMozcKeyCode) {
this.keyCode = keyCode;
this.expectMozcKeyCode = expectMozcKeyCode;
}
}
TestData[] testDataList = {
new TestData(KeyEvent.KEYCODE_0, '0'),
new TestData(KeyEvent.KEYCODE_1, '1'),
new TestData(KeyEvent.KEYCODE_2, '2'),
new TestData(KeyEvent.KEYCODE_3, '3'),
new TestData(KeyEvent.KEYCODE_4, '4'),
new TestData(KeyEvent.KEYCODE_5, '5'),
new TestData(KeyEvent.KEYCODE_6, '6'),
new TestData(KeyEvent.KEYCODE_7, '7'),
new TestData(KeyEvent.KEYCODE_8, '8'),
new TestData(KeyEvent.KEYCODE_9, '9'),
new TestData(KeyEvent.KEYCODE_STAR, '*'),
};
for (TestData testData : testDataList) {
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, testData.keyCode);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
assertEquals(testData.toString(), testData.expectMozcKeyCode,
keyboardSpecification.getMozcKeyEvent(keyEvent).getKeyCode());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertNotNull(testData.toString(), keyEventInterface.getNativeEvent());
assertEquals(testData.toString(), keyEvent.getKeyCode(), keyEventInterface.getKeyCode());
}
{
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
assertEquals(SpecialKey.ENTER,
keyboardSpecification.getMozcKeyEvent(keyEvent).getSpecialKey());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertNotNull(keyEventInterface.getNativeEvent());
assertEquals(KeyEvent.KEYCODE_ENTER, keyEventInterface.getKeyCode());
}
{
KeyEvent keyEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_CENTER);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
assertEquals(SpecialKey.ENTER,
keyboardSpecification.getMozcKeyEvent(keyEvent).getSpecialKey());
KeyEventInterface keyEventInterface = keyboardSpecification.getKeyEventInterface(keyEvent);
assertNotNull(keyEventInterface.getNativeEvent());
assertEquals(KeyEvent.KEYCODE_ENTER, keyEventInterface.getKeyCode());
}
// No corresponding entry.
KeyEvent keyEvent = new KeyEvent(0, 0);
keyEvent.setSource(InputDevice.SOURCE_KEYBOARD);
assertFalse(keyboardSpecification.getCompositionSwitchMode(keyEvent).isPresent());
assertEquals(KeyboardSpecification.TWELVE_KEY_TOGGLE_KANA,
keyboardSpecification.getKanaKeyboardSpecification());
assertEquals(KeyboardSpecification.TWELVE_KEY_TOGGLE_ALPHABET,
keyboardSpecification.getAlphabetKeyboardSpecification());
}
@SmallTest
public void testMaybeSetDetectedHardwareKeyMap() {
class TestData extends Parameter {
final HardwareKeyMap presetHardwareKeyMap;
final int keyboard;
final boolean forceToSet;
final HardwareKeyMap expectHardwareKeyMap;
TestData(HardwareKeyMap presetHardwareKeyMap,
int keyboard,
boolean forceToSet,
HardwareKeyMap expectHardwareKeyMap) {
this.presetHardwareKeyMap = presetHardwareKeyMap;
this.keyboard = keyboard;
this.forceToSet = forceToSet;
this.expectHardwareKeyMap = expectHardwareKeyMap;
}
}
TestData[] testDataList = {
new TestData(HardwareKeyMap.JAPANESE109A, Configuration.KEYBOARD_12KEY, false,
HardwareKeyMap.JAPANESE109A),
new TestData(null, Configuration.KEYBOARD_12KEY, false, HardwareKeyMap.TWELVEKEY),
new TestData(null, Configuration.KEYBOARD_QWERTY, false, HardwareKeyMap.JAPANESE109A),
new TestData(null, Configuration.KEYBOARD_NOKEYS, false, null),
new TestData(null, Configuration.KEYBOARD_UNDEFINED, false, null),
new TestData(null, Configuration.KEYBOARD_NOKEYS, true, HardwareKeyMap.DEFAULT),
new TestData(null, Configuration.KEYBOARD_UNDEFINED, true, HardwareKeyMap.DEFAULT),
};
SharedPreferences sharedPreferences = MozcPreferenceUtil.getSharedPreferences(
getInstrumentation().getContext(), "HARDWARE_KEYMAP");
for (TestData testData : testDataList) {
sharedPreferences.edit().clear().commit();
if (testData.presetHardwareKeyMap != null) {
HardwareKeyboardSpecification.setHardwareKeyMap(
sharedPreferences, testData.presetHardwareKeyMap);
}
Configuration configuration = new Configuration();
configuration.keyboard = testData.keyboard;
HardwareKeyboardSpecification.maybeSetDetectedHardwareKeyMap(
sharedPreferences, configuration, testData.forceToSet);
assertEquals(testData.toString(), testData.expectHardwareKeyMap,
HardwareKeyboardSpecification.getHardwareKeyMap(sharedPreferences));
}
}
}