blob: 712dafaa3d6cd6993eab7230270abf856e4aef5a [file] [log] [blame]
// Copyright 2010-2015, 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.
/**
* @fileoverview This file contains unit tests of nacl_mozc.js.
*
*/
'use strict';
var keyTranslator = null;
var pressedKeys = null;
var isKanaMode = false;
var keyboardLayout = '';
function setUp() {
keyTranslator = new mozc.KeyTranslator();
pressedKeys = {};
isKanaMode = false;
keyboardLayout = 'us';
}
function tearDown() {
keyTranslator = null;
pressedKeys = null;
isKanaMode = false;
keyboardLayout = '';
}
function setKanaMode(newKanaMode) {
isKanaMode = newKanaMode;
}
function setKeyboardLayout(newLayout) {
keyboardLayout = newLayout;
}
function keyDown(code, key) {
var result =
keyTranslator.translateKeyEvent({
type: 'keydown',
altKey: (pressedKeys['AltLeft'] || pressedKeys['AltRight']),
ctrlKey: (pressedKeys['ControlLeft'] || pressedKeys['ControlRight']),
shiftKey: (pressedKeys['ShiftLeft'] || pressedKeys['ShiftRight']),
code: code,
key: key
}, isKanaMode, keyboardLayout);
pressedKeys[code] = true;
return result;
}
function keyUp(code, key, isKana, layout) {
var result =
keyTranslator.translateKeyEvent({
type: 'keyup',
altKey: (pressedKeys['AltLeft'] || pressedKeys['AltRight']),
ctrlKey: (pressedKeys['ControlLeft'] || pressedKeys['ControlRight']),
shiftKey: (pressedKeys['ShiftLeft'] || pressedKeys['ShiftRight']),
code: code,
key: key
}, isKanaMode, keyboardLayout);
pressedKeys[code] = false;
return result;
}
function testTranslateKey_Space() {
assertObjectEquals({special_key: 'SPACE'}, keyDown('Space', ' '));
assertObjectEquals({}, keyUp('Space', ' '));
}
function testTranslateKey_F1() {
assertObjectEquals({special_key: 'F1'}, keyDown('', 'HistoryBack'));
assertObjectEquals({}, keyUp('', 'HistoryBack'));
}
function testTranslateKey_CtrlLeft() {
assertObjectEquals({}, keyDown('ControlLeft', 'Ctrl'));
assertObjectEquals({modifier_keys: ['CTRL']}, keyUp('ControlLeft', 'Ctrl'));
}
function testTranslateKey_CtrlRight() {
assertObjectEquals({}, keyDown('ControlRight', 'Ctrl'));
assertObjectEquals({modifier_keys: ['CTRL']}, keyUp('ControlRight', 'Ctrl'));
}
function testTranslateKey_ShiftLeft() {
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['SHIFT']}, keyUp('ShiftLeft', 'Shift'));
}
function testTranslateKey_ShiftRight() {
assertObjectEquals({}, keyDown('ShiftRight', 'Shift'));
assertObjectEquals({modifier_keys: ['SHIFT']}, keyUp('ShiftRight', 'Shift'));
}
function testTranslateKey_Ctrl_Shift() {
// Ctrl down, Shift down, Shift up, Ctrl up
assertObjectEquals({}, keyDown('ControlLeft', 'Ctrl'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['CTRL', 'SHIFT']},
keyUp('ControlLeft', 'Ctrl'));
// Ctrl down, Shift down, Ctrl up, Shift up
assertObjectEquals({}, keyDown('ControlLeft', 'Ctrl'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({}, keyUp('ControlLeft', 'Ctrl'));
assertObjectEquals({modifier_keys: ['CTRL', 'SHIFT']},
keyUp('ShiftLeft', 'Shift'));
}
function testTranslateKey_A() {
assertObjectEquals({key_code: 97}, keyDown('KeyA', 'a'));
assertObjectEquals({}, keyUp('KeyA', 'a'));
}
function testTranslateKey_Ctrl_Bs() {
// Ctrl down, BS down, BS up, Ctrl up
assertObjectEquals({}, keyDown('ControlLeft', 'Ctrl'));
assertObjectEquals({special_key: 'BACKSPACE', modifier_keys: ['CTRL']},
keyDown('Backspace', 'Backspace'));
assertObjectEquals({}, keyUp('Backspace', 'Backspace'));
assertObjectEquals({}, keyUp('ControlLeft', 'Ctrl'));
}
function testTranslateKey_Ctrl_Shift_Bs() {
// Ctrl down, Shift down, BS down, BS up,Shift up, Ctrl up
assertObjectEquals({}, keyDown('ControlLeft', 'Ctrl'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({
special_key: 'BACKSPACE',
modifier_keys: ['CTRL', 'SHIFT']},
keyDown('Backspace', 'Backspace'));
assertObjectEquals({}, keyUp('Backspace', 'Backspace'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
// TODO(horo): This behavior is same as Mac Mozc. But it shoud be
// assertObjectEquals({}, keyUp('ControlLeft', 'Ctrl'));
assertObjectEquals({modifier_keys: ['CTRL']}, keyUp('ControlLeft', 'Ctrl'));
}
function testTranslateKey_Shift_A() {
// Shift + 'a'
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({key_code: 'A'.charCodeAt(0)}, keyDown('KeyA', 'a'));
assertObjectEquals({}, keyUp('KeyA', 'a'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
}
function testTranslateKey_Ctrl_A() {
// Ctrl + 'a'
assertObjectEquals({}, keyDown('ControlLeft', 'Control'));
assertObjectEquals({key_code: 'a'.charCodeAt(0), modifier_keys: ['CTRL']},
keyDown('KeyA', 'a'));
assertObjectEquals({}, keyUp('KeyA', 'a'));
assertObjectEquals({}, keyUp('ControlLeft', 'Control'));
}
function testTranslateKey_Ctrl_Alt_A() {
// Ctrl down, Alt down, a down, a up, Alt up, Ctrl up
assertObjectEquals({}, keyDown('ControlLeft', 'Control'));
assertObjectEquals({}, keyDown('AltLeft', 'Alt'));
assertObjectEquals({
key_code: 'a'.charCodeAt(0),
modifier_keys: ['ALT', 'CTRL']
},
keyDown('KeyA', 'a'));
assertObjectEquals({}, keyUp('KeyA', 'a'));
assertObjectEquals({}, keyUp('AltLeft', 'Alt'));
assertObjectEquals({modifier_keys: ['CTRL']},
keyUp('ControlLeft', 'Control'));
}
function testTranslateKey_Ctrl_Shift_A() {
// Ctrl down, Shift down, a down, a up, Shift up, Ctrl up
assertObjectEquals({}, keyDown('ControlLeft', 'Control'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({
key_code: 'a'.charCodeAt(0),
modifier_keys: ['CTRL', 'SHIFT']
},
keyDown('KeyA', 'a'));
assertObjectEquals({}, keyUp('KeyA', 'a'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['CTRL']},
keyUp('ControlLeft', 'Control'));
}
function testTakingScreenShotKey() {
assertObjectEquals({special_key: 'F5'}, keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyDown('AltLeft', 'Alt'));
assertObjectEquals({special_key: 'F5', modifier_keys: ['ALT']},
keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({special_key: 'F5', modifier_keys: ['ALT', 'SHIFT']},
keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyUp('AltLeft', 'Alt'));
assertObjectEquals({special_key: 'F5', modifier_keys: ['SHIFT']},
keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
assertObjectEquals({}, keyDown('ControlLeft', 'Control'));
assertObjectEquals({}, keyDown('AltLeft', 'Alt'));
assertObjectEquals({}, keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({}, keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyUp('AltLeft', 'Alt'));
assertObjectEquals({}, keyDown('', 'ChromeOSSwitchWindow'));
assertObjectEquals({}, keyUp('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['ALT', 'CTRL', 'SHIFT']},
keyUp('ControlLeft', 'Control'));
}
function testDigit6Key_US() {
assertObjectEquals({key_code: '6'.charCodeAt(0)}, keyDown('Digit6', '6'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({key_code: '^'.charCodeAt(0)}, keyDown('Digit6', '^'));
}
function testDigit6Key_JP() {
setKeyboardLayout('jp');
assertObjectEquals({key_code: '6'.charCodeAt(0)}, keyDown('Digit6', '6'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({key_code: '&'.charCodeAt(0)}, keyDown('Digit6', '&'));
}
function testDigit6Key_US_KANA() {
setKanaMode(true);
assertObjectEquals({
key_code: '6'.charCodeAt(0),
key_string: '\u304A' // 'お'
},
keyDown('Digit6', '6'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({
key_code: '^'.charCodeAt(0),
key_string: '\u3049' // 'ぉ'
},
keyDown('Digit6', '^'));
}
function testDigit6Key_JP_KANA() {
setKanaMode(true);
setKeyboardLayout('jp');
assertObjectEquals({
key_code: '6'.charCodeAt(0),
key_string: '\u304A' // 'お'
},
keyDown('Digit6', '6'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({
key_code: '&'.charCodeAt(0),
key_string: '\u3049' // 'ぉ'
},
keyDown('Digit6', '&'));
}
function testBackquoteKey_US() {
assertObjectEquals({key_code: '`'.charCodeAt(0)}, keyDown('Backquote', '`'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({key_code: '~'.charCodeAt(0)}, keyDown('Backquote', '~'));
}
function testBackquoteKey_JP() {
setKeyboardLayout('jp');
assertObjectEquals({}, keyDown('Backquote', ''));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['SHIFT']}, keyDown('Backquote', ''));
}
function testBackquoteKey_US_KANA() {
setKanaMode(true);
assertObjectEquals({
key_code: '`'.charCodeAt(0),
key_string: '\u308D' // 'ろ'
},
keyDown('Backquote', '`'));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({
key_code: '~'.charCodeAt(0),
key_string: '\u308D' // 'ろ'
},
keyDown('Backquote', '~'));
}
function testBackquoteKey_JP_KANA() {
setKanaMode(true);
setKeyboardLayout('jp');
assertObjectEquals({}, keyDown('Backquote', ''));
assertObjectEquals({}, keyDown('ShiftLeft', 'Shift'));
assertObjectEquals({modifier_keys: ['SHIFT']}, keyDown('Backquote', ''));
}
function testConvertAndNoConvertKey_US() {
assertObjectEquals({}, keyDown('Convert', '`'));
assertObjectEquals({}, keyDown('NoConvert', '`'));
}
function testConvertAndNoConvertKey_JP() {
setKeyboardLayout('jp');
assertObjectEquals({}, keyDown('Convert', '`'));
assertObjectEquals({}, keyDown('NoConvert', '`'));
}