aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/Android.mk14
-rw-r--r--tests/AndroidManifest.xml2
-rw-r--r--tests/data/bigramlist.xml2
-rw-r--r--tests/res/raw/test.dictbin2829 -> 1528 bytes
-rw-r--r--tests/res/values/donottranslate.xml56
-rw-r--r--tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java1416
-rw-r--r--tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java1616
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java303
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java469
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java90
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java230
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java690
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java120
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java183
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java220
-rw-r--r--tests/src/com/android/inputmethod/latin/EditDistanceTests.java18
-rw-r--r--tests/src/com/android/inputmethod/latin/InputLogicTests.java399
-rw-r--r--tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java49
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestHelper.java67
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestTests.java7
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestTestsBase.java20
-rw-r--r--tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java13
-rw-r--r--tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java4
-rw-r--r--tests/src/com/android/inputmethod/latin/UtilsTests.java2
24 files changed, 4160 insertions, 1830 deletions
diff --git a/tests/Android.mk b/tests/Android.mk
index 658e8e294..6634070e9 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -1,3 +1,17 @@
+# Copyright (C) 2011 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
index 210e81489..38a2ecfeb 100644
--- a/tests/AndroidManifest.xml
+++ b/tests/AndroidManifest.xml
@@ -22,8 +22,6 @@
<application>
<uses-library android:name="android.test.runner" />
<!-- meta-data android:name="com.android.contacts.iconset" android:resource="@xml/iconset" /-->
- <uses-permission android:name="android.permission.READ_CONTACTS" />
-
</application>
<instrumentation android:name="android.test.InstrumentationTestRunner"
diff --git a/tests/data/bigramlist.xml b/tests/data/bigramlist.xml
index dd3f2916e..d3d8bb801 100644
--- a/tests/data/bigramlist.xml
+++ b/tests/data/bigramlist.xml
@@ -25,7 +25,7 @@
<bi w1="about" count="3">
<w w2="part" p="117" />
<w w2="business" p="100" />
- <w w2="being" p="10" />
+ <w w2="being" p="90" />
</bi>
<bi w1="business" count="1">
<w w2="people" p="100" />
diff --git a/tests/res/raw/test.dict b/tests/res/raw/test.dict
index 6a5d6d794..453fc9fce 100644
--- a/tests/res/raw/test.dict
+++ b/tests/res/raw/test.dict
Binary files differ
diff --git a/tests/res/values/donottranslate.xml b/tests/res/values/donottranslate.xml
new file mode 100644
index 000000000..1ca4451d4
--- /dev/null
+++ b/tests/res/values/donottranslate.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<resources>
+ <string name="empty_string">""</string>
+ <string name="single_char">"a"</string>
+ <string name="space">" "</string>
+ <string name="single_label">"abc"</string>
+ <string name="spaces">" "</string>
+ <string name="spaces_in_label">"a b c"</string>
+ <string name="spaces_at_beginning_of_label">" abc"</string>
+ <string name="spaces_at_end_of_label">"abc "</string>
+ <string name="label_surrounded_by_spaces">" abc "</string>
+ <string name="escaped_char">"\\a"</string>
+ <string name="escaped_comma">"\\,"</string>
+ <string name="escaped_comma_escape">"a\\,\\"</string>
+ <string name="escaped_escape">"\\\\"</string>
+ <string name="escaped_label">"a\\bc"</string>
+ <string name="escaped_label_at_beginning">"\\abc"</string>
+ <string name="escaped_label_at_end">"abc\\"</string>
+ <string name="escaped_label_with_comma">"a\\,c"</string>
+ <string name="escaped_label_with_comma_at_beginning">"\\,bc"</string>
+ <string name="escaped_label_with_comma_at_end">"ab\\,"</string>
+ <string name="escaped_label_with_successive">"\\,\\\\bc"</string>
+ <string name="escaped_label_with_escape">"a\\\\c"</string>
+ <string name="multiple_chars">"a,b,c"</string>
+ <string name="multiple_chars_surrounded_by_spaces">" a , b , c "</string>
+ <string name="multiple_labels">"abc,def,ghi"</string>
+ <string name="multiple_labels_surrounded_by_spaces">" abc , def , ghi "</string>
+ <string name="multiple_chars_with_comma">"a,\\,,c"</string>
+ <string name="multiple_chars_with_comma_surrounded_by_spaces">" a , \\, , c "</string>
+ <string name="multiple_labels_with_escape">"\\abc,d\\ef,gh\\i"</string>
+ <string name="multiple_labels_with_escape_surrounded_by_spaces">" \\abc , d\\ef , gh\\i "</string>
+ <string name="multiple_labels_with_comma_and_escape">"ab\\\\,d\\\\\\,,g\\,i"</string>
+ <string name="multiple_labels_with_comma_and_escape_surrounded_by_spaces">" ab\\\\ , d\\\\\\, , g\\,i "</string>
+ <string name="indirect_string">@string/multiple_chars</string>
+ <string name="indirect_string_with_literal">x,@string/multiple_chars,y</string>
+ <string name="infinite_indirection">infinite,@string/infinite_indirection,loop</string>
+</resources>
diff --git a/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
deleted file mode 100644
index a143bbad5..000000000
--- a/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
+++ /dev/null
@@ -1,1416 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard;
-
-import com.android.inputmethod.keyboard.MiniKeyboard.Builder.MiniKeyboardParams;
-
-import android.test.AndroidTestCase;
-
-public class MiniKeyboardBuilderTests extends AndroidTestCase {
- private static final int MAX_COLUMNS = 5;
- private static final int WIDTH = 10;
- private static final int HEIGHT = 10;
-
- private static final int KEYBOARD_WIDTH = WIDTH * 10;
- private static final int XPOS_L0 = WIDTH * 0;
- private static final int XPOS_L1 = WIDTH * 1;
- private static final int XPOS_L2 = WIDTH * 2;
- private static final int XPOS_M0 = WIDTH * 5;
- private static final int XPOS_R3 = WIDTH * 6;
- private static final int XPOS_R2 = WIDTH * 7;
- private static final int XPOS_R1 = WIDTH * 8;
- private static final int XPOS_R0 = WIDTH * 9;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- }
-
- public void testLayoutError() {
- MiniKeyboardParams params = null;
- try {
- params = new MiniKeyboardParams(10, MAX_COLUMNS + 1, WIDTH, HEIGHT, WIDTH * 2,
- WIDTH * MAX_COLUMNS);
- fail("Should throw IllegalArgumentException");
- } catch (IllegalArgumentException e) {
- // Too small keyboard to hold mini keyboard.
- }
- assertNull("Too small keyboard to hold mini keyboard", params);
- }
-
- // Mini keyboard layout test.
- // "[n]" represents n-th key position in mini keyboard.
- // "[1]" is the default key.
-
- // [1]
- public void testLayout1KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("1 key M0 columns", 1, params.mNumColumns);
- assertEquals("1 key M0 rows", 1, params.mNumRows);
- assertEquals("1 key M0 left", 0, params.mLeftKeys);
- assertEquals("1 key M0 right", 1, params.mRightKeys);
- assertEquals("1 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |[1]
- public void testLayout1KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("1 key L0 columns", 1, params.mNumColumns);
- assertEquals("1 key L0 rows", 1, params.mNumRows);
- assertEquals("1 key L0 left", 0, params.mLeftKeys);
- assertEquals("1 key L0 right", 1, params.mRightKeys);
- assertEquals("1 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [1]
- public void testLayout1KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("1 key L1 columns", 1, params.mNumColumns);
- assertEquals("1 key L1 rows", 1, params.mNumRows);
- assertEquals("1 key L1 left", 0, params.mLeftKeys);
- assertEquals("1 key L1 right", 1, params.mRightKeys);
- assertEquals("1 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [1]
- public void testLayout1KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("1 key L2 columns", 1, params.mNumColumns);
- assertEquals("1 key L2 rows", 1, params.mNumRows);
- assertEquals("1 key L2 left", 0, params.mLeftKeys);
- assertEquals("1 key L2 right", 1, params.mRightKeys);
- assertEquals("1 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [1]|
- public void testLayout1KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("1 key R0 columns", 1, params.mNumColumns);
- assertEquals("1 key R0 rows", 1, params.mNumRows);
- assertEquals("1 key R0 left", 0, params.mLeftKeys);
- assertEquals("1 key R0 right", 1, params.mRightKeys);
- assertEquals("1 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key R0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [1] ___|
- public void testLayout1KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("1 key R1 columns", 1, params.mNumColumns);
- assertEquals("1 key R1 rows", 1, params.mNumRows);
- assertEquals("1 key R1 left", 0, params.mLeftKeys);
- assertEquals("1 key R1 right", 1, params.mRightKeys);
- assertEquals("1 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key R1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [1] ___ ___|
- public void testLayout1KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(1, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("1 key R2 columns", 1, params.mNumColumns);
- assertEquals("1 key R2 rows", 1, params.mNumRows);
- assertEquals("1 key R2 left", 0, params.mLeftKeys);
- assertEquals("1 key R2 right", 1, params.mRightKeys);
- assertEquals("1 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("1 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("1 key R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [1] [2]
- public void testLayout2KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("2 key M0 columns", 2, params.mNumColumns);
- assertEquals("2 key M0 rows", 1, params.mNumRows);
- assertEquals("2 key M0 left", 0, params.mLeftKeys);
- assertEquals("2 key M0 right", 2, params.mRightKeys);
- assertEquals("2 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("2 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |[1] [2]
- public void testLayout2KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("2 key L0 columns", 2, params.mNumColumns);
- assertEquals("2 key L0 rows", 1, params.mNumRows);
- assertEquals("2 key L0 left", 0, params.mLeftKeys);
- assertEquals("2 key L0 right", 2, params.mRightKeys);
- assertEquals("2 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("2 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [1] [2]
- public void testLayout2KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("2 key L1 columns", 2, params.mNumColumns);
- assertEquals("2 key L1 rows", 1, params.mNumRows);
- assertEquals("2 key L1 left", 0, params.mLeftKeys);
- assertEquals("2 key L1 right", 2, params.mRightKeys);
- assertEquals("2 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("2 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [1] [2]
- public void testLayout2KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("2 key L2 columns", 2, params.mNumColumns);
- assertEquals("2 key L2 rows", 1, params.mNumRows);
- assertEquals("2 key L2 left", 0, params.mLeftKeys);
- assertEquals("2 key L2 right", 2, params.mRightKeys);
- assertEquals("2 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("2 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [2] [1]|
- public void testLayout2KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("2 key R0 columns", 2, params.mNumColumns);
- assertEquals("2 key R0 rows", 1, params.mNumRows);
- assertEquals("2 key R0 left", 1, params.mLeftKeys);
- assertEquals("2 key R0 right", 1, params.mRightKeys);
- assertEquals("2 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("2 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [2] [1] ___|
- public void testLayout2KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("2 key R1 columns", 2, params.mNumColumns);
- assertEquals("2 key R1 rows", 1, params.mNumRows);
- assertEquals("2 key R1 left", 1, params.mLeftKeys);
- assertEquals("2 key R1 right", 1, params.mRightKeys);
- assertEquals("2 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("2 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [1] [2] ___ ___|
- public void testLayout2KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(2, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("2 key R2 columns", 2, params.mNumColumns);
- assertEquals("2 key R2 rows", 1, params.mNumRows);
- assertEquals("2 key R2 left", 0, params.mLeftKeys);
- assertEquals("2 key R2 right", 2, params.mRightKeys);
- assertEquals("2 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("2 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("2 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("2 key R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // [3] [1] [2]
- public void testLayout3KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("3 key columns", 3, params.mNumColumns);
- assertEquals("3 key rows", 1, params.mNumRows);
- assertEquals("3 key left", 1, params.mLeftKeys);
- assertEquals("3 key right", 2, params.mRightKeys);
- assertEquals("3 key [1]", 0, params.getColumnPos(0));
- assertEquals("3 key [2]", 1, params.getColumnPos(1));
- assertEquals("3 key [3]", -1, params.getColumnPos(2));
- assertEquals("3 key adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // |[1] [2] [3]
- public void testLayout3KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("3 key L0 columns", 3, params.mNumColumns);
- assertEquals("3 key L0 rows", 1, params.mNumRows);
- assertEquals("3 key L0 left", 0, params.mLeftKeys);
- assertEquals("3 key L0 right", 3, params.mRightKeys);
- assertEquals("3 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("3 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("3 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [1] [2] [3]
- public void testLayout3KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("3 key L1 columns", 3, params.mNumColumns);
- assertEquals("3 key L1 rows", 1, params.mNumRows);
- assertEquals("3 key L1 left", 0, params.mLeftKeys);
- assertEquals("3 key L1 right", 3, params.mRightKeys);
- assertEquals("3 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("3 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("3 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [3] [1] [2]
- public void testLayout3KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("3 key L2 columns", 3, params.mNumColumns);
- assertEquals("3 key L2 rows", 1, params.mNumRows);
- assertEquals("3 key L2 left", 1, params.mLeftKeys);
- assertEquals("3 key L2 right", 2, params.mRightKeys);
- assertEquals("3 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("3 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("3 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [3] [2] [1]|
- public void testLayout3KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("3 key R0 columns", 3, params.mNumColumns);
- assertEquals("3 key R0 rows", 1, params.mNumRows);
- assertEquals("3 key R0 left", 2, params.mLeftKeys);
- assertEquals("3 key R0 right", 1, params.mRightKeys);
- assertEquals("3 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("3 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("3 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [3] [2] [1] ___|
- public void testLayout3KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("3 key R1 columns", 3, params.mNumColumns);
- assertEquals("3 key R1 rows", 1, params.mNumRows);
- assertEquals("3 key R1 left", 2, params.mLeftKeys);
- assertEquals("3 key R1 right", 1, params.mRightKeys);
- assertEquals("3 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("3 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("3 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [3] [1] [2] ___ ___|
- public void testLayout3KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(3, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("3 key R2 columns", 3, params.mNumColumns);
- assertEquals("3 key R2 rows", 1, params.mNumRows);
- assertEquals("3 key R2 left", 1, params.mLeftKeys);
- assertEquals("3 key R2 right", 2, params.mRightKeys);
- assertEquals("3 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("3 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("3 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("3 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("3 key R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [3] [1] [2] [4]
- public void testLayout4KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("4 key columns", 4, params.mNumColumns);
- assertEquals("4 key rows", 1, params.mNumRows);
- assertEquals("4 key left", 1, params.mLeftKeys);
- assertEquals("4 key right", 3, params.mRightKeys);
- assertEquals("4 key [1]", 0, params.getColumnPos(0));
- assertEquals("4 key [2]", 1, params.getColumnPos(1));
- assertEquals("4 key [3]", -1, params.getColumnPos(2));
- assertEquals("4 key [4]", 2, params.getColumnPos(3));
- assertEquals("4 key adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // |[1] [2] [3] [4]
- public void testLayout4KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("4 key L0 columns", 4, params.mNumColumns);
- assertEquals("4 key L0 rows", 1, params.mNumRows);
- assertEquals("4 key L0 left", 0, params.mLeftKeys);
- assertEquals("4 key L0 right", 4, params.mRightKeys);
- assertEquals("4 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("4 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("4 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("4 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [1] [2] [3] [4]
- public void testLayout4KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("4 key L1 columns", 4, params.mNumColumns);
- assertEquals("4 key L1 rows", 1, params.mNumRows);
- assertEquals("4 key L1 left", 0, params.mLeftKeys);
- assertEquals("4 key L1 right", 4, params.mRightKeys);
- assertEquals("4 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("4 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("4 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("4 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [3] [1] [2] [4]
- public void testLayout4KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("4 key L2 columns", 4, params.mNumColumns);
- assertEquals("4 key L2 rows", 1, params.mNumRows);
- assertEquals("4 key L2 left", 1, params.mLeftKeys);
- assertEquals("4 key L2 right", 3, params.mRightKeys);
- assertEquals("4 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("4 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("4 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("4 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [4] [3] [2] [1]|
- public void testLayout4KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("4 key R0 columns", 4, params.mNumColumns);
- assertEquals("4 key R0 rows", 1, params.mNumRows);
- assertEquals("4 key R0 left", 3, params.mLeftKeys);
- assertEquals("4 key R0 right", 1, params.mRightKeys);
- assertEquals("4 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("4 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("4 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("4 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [4] [3] [2] [1] ___|
- public void testLayout4KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("4 key R1 columns", 4, params.mNumColumns);
- assertEquals("4 key R1 rows", 1, params.mNumRows);
- assertEquals("4 key R1 left", 3, params.mLeftKeys);
- assertEquals("4 key R1 right", 1, params.mRightKeys);
- assertEquals("4 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("4 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("4 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("4 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [4] [3] [1] [2] ___ ___|
- public void testLayout4KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(4, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("4 key R2 columns", 4, params.mNumColumns);
- assertEquals("4 key R2 rows", 1, params.mNumRows);
- assertEquals("4 key R2 left", 2, params.mLeftKeys);
- assertEquals("4 key R2 right", 2, params.mRightKeys);
- assertEquals("4 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("4 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("4 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("4 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("4 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("4 key R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [5] [3] [1] [2] [4]
- public void testLayout5KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("5 key columns", 5, params.mNumColumns);
- assertEquals("5 key rows", 1, params.mNumRows);
- assertEquals("5 key left", 2, params.mLeftKeys);
- assertEquals("5 key right", 3, params.mRightKeys);
- assertEquals("5 key [1]", 0, params.getColumnPos(0));
- assertEquals("5 key [2]", 1, params.getColumnPos(1));
- assertEquals("5 key [3]", -1, params.getColumnPos(2));
- assertEquals("5 key [4]", 2, params.getColumnPos(3));
- assertEquals("5 key [5]", -2, params.getColumnPos(4));
- assertEquals("5 key adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // |[1] [2] [3] [4] [5]
- public void testLayout5KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("5 key L0 columns", 5, params.mNumColumns);
- assertEquals("5 key L0 rows", 1, params.mNumRows);
- assertEquals("5 key L0 left", 0, params.mLeftKeys);
- assertEquals("5 key L0 right", 5, params.mRightKeys);
- assertEquals("5 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("5 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("5 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("5 key L0 [5]", 4, params.getColumnPos(4));
- assertEquals("5 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [1] [2] [3] [4] [5]
- public void testLayout5KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("5 key L1 columns", 5, params.mNumColumns);
- assertEquals("5 key L1 rows", 1, params.mNumRows);
- assertEquals("5 key L1 left", 0, params.mLeftKeys);
- assertEquals("5 key L1 right", 5, params.mRightKeys);
- assertEquals("5 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("5 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("5 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("5 key L1 [5]", 4, params.getColumnPos(4));
- assertEquals("5 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [3] [1] [2] [4] [5]
- public void testLayout5KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("5 key L2 columns", 5, params.mNumColumns);
- assertEquals("5 key L2 rows", 1, params.mNumRows);
- assertEquals("5 key L2 left", 1, params.mLeftKeys);
- assertEquals("5 key L2 right", 4, params.mRightKeys);
- assertEquals("5 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("5 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("5 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("5 key L2 [5]", 3, params.getColumnPos(4));
- assertEquals("5 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [5] [4] [3] [2] [1]|
- public void testLayout5KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("5 key R0 columns", 5, params.mNumColumns);
- assertEquals("5 key R0 rows", 1, params.mNumRows);
- assertEquals("5 key R0 left", 4, params.mLeftKeys);
- assertEquals("5 key R0 right", 1, params.mRightKeys);
- assertEquals("5 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("5 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("5 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("5 key R0 [5]", -4, params.getColumnPos(4));
- assertEquals("5 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [5] [4] [3] [2] [1] ___|
- public void testLayout5KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("5 key R1 columns", 5, params.mNumColumns);
- assertEquals("5 key R1 rows", 1, params.mNumRows);
- assertEquals("5 key R1 left", 4, params.mLeftKeys);
- assertEquals("5 key R1 right", 1, params.mRightKeys);
- assertEquals("5 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("5 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("5 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("5 key R1 [5]", -4, params.getColumnPos(4));
- assertEquals("5 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [5] [4] [3] [1] [2] ___ ___|
- public void testLayout5KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(5, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("5 key R2 columns", 5, params.mNumColumns);
- assertEquals("5 key R2 rows", 1, params.mNumRows);
- assertEquals("5 key R2 left", 3, params.mLeftKeys);
- assertEquals("5 key R2 right", 2, params.mRightKeys);
- assertEquals("5 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("5 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("5 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("5 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("5 key R2 [5]", -3, params.getColumnPos(4));
- assertEquals("5 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("5 key R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [6] [4] [5]
- // [3] [1] [2]
- public void testLayout6KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("6 key columns", 3, params.mNumColumns);
- assertEquals("6 key rows", 2, params.mNumRows);
- assertEquals("6 key left", 1, params.mLeftKeys);
- assertEquals("6 key right", 2, params.mRightKeys);
- assertEquals("6 key [1]", 0, params.getColumnPos(0));
- assertEquals("6 key [2]", 1, params.getColumnPos(1));
- assertEquals("6 key [3]", -1, params.getColumnPos(2));
- assertEquals("6 key [4]", 0, params.getColumnPos(3));
- assertEquals("6 key [5]", 1, params.getColumnPos(4));
- assertEquals("6 key [6]", -1, params.getColumnPos(5));
- assertEquals("6 key adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // |[4] [5] [6]
- // |[1] [2] [3]
- public void testLayout6KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("6 key L0 columns", 3, params.mNumColumns);
- assertEquals("6 key L0 rows", 2, params.mNumRows);
- assertEquals("6 key L0 left", 0, params.mLeftKeys);
- assertEquals("6 key L0 right", 3, params.mRightKeys);
- assertEquals("6 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("6 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("6 key L0 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key L0 [5]", 1, params.getColumnPos(4));
- assertEquals("6 key L0 [6]", 2, params.getColumnPos(5));
- assertEquals("6 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [4] [5] [6]
- // |___ [1] [2] [3]
- public void testLayout6KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("6 key L1 columns", 3, params.mNumColumns);
- assertEquals("6 key L1 rows", 2, params.mNumRows);
- assertEquals("6 key L1 left", 0, params.mLeftKeys);
- assertEquals("6 key L1 right", 3, params.mRightKeys);
- assertEquals("6 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("6 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("6 key L1 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key L1 [5]", 1, params.getColumnPos(4));
- assertEquals("6 key L1 [6]", 2, params.getColumnPos(5));
- assertEquals("6 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [6] [4] [5]
- // |___ ___ [3] [1] [2]
- public void testLayout6KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("6 key L2 columns", 3, params.mNumColumns);
- assertEquals("6 key L2 rows", 2, params.mNumRows);
- assertEquals("6 key L2 left", 1, params.mLeftKeys);
- assertEquals("6 key L2 right", 2, params.mRightKeys);
- assertEquals("6 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("6 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("6 key L2 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key L2 [5]", 1, params.getColumnPos(4));
- assertEquals("6 key L2 [6]", -1, params.getColumnPos(5));
- assertEquals("6 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [6] [5] [4]|
- // [3] [2] [1]|
- public void testLayout6KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("6 key R0 columns", 3, params.mNumColumns);
- assertEquals("6 key R0 rows", 2, params.mNumRows);
- assertEquals("6 key R0 left", 2, params.mLeftKeys);
- assertEquals("6 key R0 right", 1, params.mRightKeys);
- assertEquals("6 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("6 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("6 key R0 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key R0 [5]", -1, params.getColumnPos(4));
- assertEquals("6 key R0 [6]", -2, params.getColumnPos(5));
- assertEquals("6 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [6] [5] [4] ___|
- // [3] [2] [1] ___|
- public void testLayout6KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("6 key R1 columns", 3, params.mNumColumns);
- assertEquals("6 key R1 rows", 2, params.mNumRows);
- assertEquals("6 key R1 left", 2, params.mLeftKeys);
- assertEquals("6 key R1 right", 1, params.mRightKeys);
- assertEquals("6 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("6 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("6 key R1 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key R1 [5]", -1, params.getColumnPos(4));
- assertEquals("6 key R1 [6]", -2, params.getColumnPos(5));
- assertEquals("6 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [6] [4] [5] ___ ___|
- // [3] [1] [2] ___ ___|
- public void testLayout6KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(6, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("6 key R2 columns", 3, params.mNumColumns);
- assertEquals("6 key R2 rows", 2, params.mNumRows);
- assertEquals("6 key R2 left", 1, params.mLeftKeys);
- assertEquals("6 key R2 right", 2, params.mRightKeys);
- assertEquals("6 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("6 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("6 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("6 key R2 [4]", 0, params.getColumnPos(3));
- assertEquals("6 key R2 [5]", 1, params.getColumnPos(4));
- assertEquals("6 key R2 [6]", -1, params.getColumnPos(5));
- assertEquals("6 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("6 key R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [7] [5] [6]
- // [3] [1] [2] [4]
- public void testLayout7KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("7 key columns", 4, params.mNumColumns);
- assertEquals("7 key rows", 2, params.mNumRows);
- assertEquals("7 key left", 1, params.mLeftKeys);
- assertEquals("7 key right", 3, params.mRightKeys);
- assertEquals("7 key [1]", 0, params.getColumnPos(0));
- assertEquals("7 key [2]", 1, params.getColumnPos(1));
- assertEquals("7 key [3]", -1, params.getColumnPos(2));
- assertEquals("7 key [4]", 2, params.getColumnPos(3));
- assertEquals("7 key [5]", 0, params.getColumnPos(4));
- assertEquals("7 key [6]", 1, params.getColumnPos(5));
- assertEquals("7 key [7]", -1, params.getColumnPos(6));
- assertEquals("7 key adjust", 1, params.mTopRowAdjustment);
- assertEquals("7 key default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // |[5] [6] [7]
- // |[1] [2] [3] [4]
- public void testLayout7KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("7 key L0 columns", 4, params.mNumColumns);
- assertEquals("7 key L0 rows", 2, params.mNumRows);
- assertEquals("7 key L0 left", 0, params.mLeftKeys);
- assertEquals("7 key L0 right", 4, params.mRightKeys);
- assertEquals("7 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("7 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("7 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("7 key L0 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key L0 [6]", 1, params.getColumnPos(5));
- assertEquals("7 key L0 [7]", 2, params.getColumnPos(6));
- assertEquals("7 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("7 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [5] [6] [7]
- // |___ [1] [2] [3] [4]
- public void testLayout7KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("7 key L1 columns", 4, params.mNumColumns);
- assertEquals("7 key L1 rows", 2, params.mNumRows);
- assertEquals("7 key L1 left", 0, params.mLeftKeys);
- assertEquals("7 key L1 right", 4, params.mRightKeys);
- assertEquals("7 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("7 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("7 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("7 key L1 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key L1 [6]", 1, params.getColumnPos(5));
- assertEquals("7 key L1 [7]", 2, params.getColumnPos(6));
- assertEquals("7 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("7 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [7] [5] [6]
- // |___ ___ [3] [1] [2] [4]
- public void testLayout7KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("7 key L2 columns", 4, params.mNumColumns);
- assertEquals("7 key L2 rows", 2, params.mNumRows);
- assertEquals("7 key L2 left", 1, params.mLeftKeys);
- assertEquals("7 key L2 right", 3, params.mRightKeys);
- assertEquals("7 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("7 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("7 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("7 key L2 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key L2 [6]", 1, params.getColumnPos(5));
- assertEquals("7 key L2 [7]", -1, params.getColumnPos(6));
- assertEquals("7 key L2 adjust", 1, params.mTopRowAdjustment);
- assertEquals("7 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [7] [6] [5]|
- // [4] [3] [2] [1]|
- public void testLayout7KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("7 key R0 columns", 4, params.mNumColumns);
- assertEquals("7 key R0 rows", 2, params.mNumRows);
- assertEquals("7 key R0 left", 3, params.mLeftKeys);
- assertEquals("7 key R0 right", 1, params.mRightKeys);
- assertEquals("7 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("7 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("7 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("7 key R0 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key R0 [6]", -1, params.getColumnPos(5));
- assertEquals("7 key R0 [7]", -2, params.getColumnPos(6));
- assertEquals("7 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("7 key R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [7] [6] [5] ___|
- // [4] [3] [2] [1] ___|
- public void testLayout7KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("7 key R1 columns", 4, params.mNumColumns);
- assertEquals("7 key R1 rows", 2, params.mNumRows);
- assertEquals("7 key R1 left", 3, params.mLeftKeys);
- assertEquals("7 key R1 right", 1, params.mRightKeys);
- assertEquals("7 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("7 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("7 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("7 key R1 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key R1 [6]", -1, params.getColumnPos(5));
- assertEquals("7 key R1 [7]", -2, params.getColumnPos(6));
- assertEquals("7 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("7 key R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [7] [5] [6] ___ ___|
- // [4] [3] [1] [2] ___ ___|
- public void testLayout7KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("7 key R2 columns", 4, params.mNumColumns);
- assertEquals("7 key R2 rows", 2, params.mNumRows);
- assertEquals("7 key R2 left", 2, params.mLeftKeys);
- assertEquals("7 key R2 right", 2, params.mRightKeys);
- assertEquals("7 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("7 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("7 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("7 key R2 [5]", 0, params.getColumnPos(4));
- assertEquals("7 key R2 [6]", 1, params.getColumnPos(5));
- assertEquals("7 key R2 [7]", -1, params.getColumnPos(6));
- assertEquals("7 key R2 adjust", -1, params.mTopRowAdjustment);
- assertEquals("7 key R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [7] [6] [5] [3] [1] [2] [4] ___|
- public void testLayout7KeyR3Max7() {
- MiniKeyboardParams params = new MiniKeyboardParams(7, 7, WIDTH,
- HEIGHT, XPOS_R3, KEYBOARD_WIDTH);
- assertEquals("7 key R2 columns", 7, params.mNumColumns);
- assertEquals("7 key R2 rows", 1, params.mNumRows);
- assertEquals("7 key R2 left", 4, params.mLeftKeys);
- assertEquals("7 key R2 right", 3, params.mRightKeys);
- assertEquals("7 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("7 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("7 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("7 key R2 [4]", 2, params.getColumnPos(3));
- assertEquals("7 key R2 [5]", -2, params.getColumnPos(4));
- assertEquals("7 key R2 [6]", -3, params.getColumnPos(5));
- assertEquals("7 key R2 [7]", -4, params.getColumnPos(6));
- assertEquals("7 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("7 key R2 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [7] [5] [6] [8]
- // [3] [1] [2] [4]
- public void testLayout8KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("8 key M0 columns", 4, params.mNumColumns);
- assertEquals("8 key M0 rows", 2, params.mNumRows);
- assertEquals("8 key M0 left", 1, params.mLeftKeys);
- assertEquals("8 key M0 right", 3, params.mRightKeys);
- assertEquals("8 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("8 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("8 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("8 key M0 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key M0 [6]", 1, params.getColumnPos(5));
- assertEquals("8 key M0 [7]", -1, params.getColumnPos(6));
- assertEquals("8 key M0 [8]", 2, params.getColumnPos(7));
- assertEquals("8 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // |[5] [6] [7] [8]
- // |[1] [2] [3] [4]
- public void testLayout8KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("8 key L0 columns", 4, params.mNumColumns);
- assertEquals("8 key L0 rows", 2, params.mNumRows);
- assertEquals("8 key L0 left", 0, params.mLeftKeys);
- assertEquals("8 key L0 right", 4, params.mRightKeys);
- assertEquals("8 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("8 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("8 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("8 key L0 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key L0 [6]", 1, params.getColumnPos(5));
- assertEquals("8 key L0 [7]", 2, params.getColumnPos(6));
- assertEquals("8 key L0 [8]", 3, params.getColumnPos(7));
- assertEquals("8 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [5] [6] [7] [8]
- // |___ [1] [2] [3] [4]
- public void testLayout8KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("8 key L1 columns", 4, params.mNumColumns);
- assertEquals("8 key L1 rows", 2, params.mNumRows);
- assertEquals("8 key L1 left", 0, params.mLeftKeys);
- assertEquals("8 key L1 right", 4, params.mRightKeys);
- assertEquals("8 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("8 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("8 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("8 key L1 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key L1 [6]", 1, params.getColumnPos(5));
- assertEquals("8 key L1 [7]", 2, params.getColumnPos(6));
- assertEquals("8 key L1 [8]", 3, params.getColumnPos(7));
- assertEquals("8 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [7] [5] [6] [8]
- // |___ ___ [3] [1] [2] [4]
- public void testLayout8KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("8 key L2 columns", 4, params.mNumColumns);
- assertEquals("8 key L2 rows", 2, params.mNumRows);
- assertEquals("8 key L2 left", 1, params.mLeftKeys);
- assertEquals("8 key L2 right", 3, params.mRightKeys);
- assertEquals("8 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("8 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("8 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("8 key L2 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key L2 [6]", 1, params.getColumnPos(5));
- assertEquals("8 key L2 [7]", -1, params.getColumnPos(6));
- assertEquals("8 key L2 [8]", 2, params.getColumnPos(7));
- assertEquals("8 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [8] [7] [6] [5]|
- // [4] [3] [2] [1]|
- public void testLayout8KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("8 key R0 columns", 4, params.mNumColumns);
- assertEquals("8 key R0 rows", 2, params.mNumRows);
- assertEquals("8 key R0 left", 3, params.mLeftKeys);
- assertEquals("8 key R0 right", 1, params.mRightKeys);
- assertEquals("8 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("8 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("8 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("8 key R0 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key R0 [6]", -1, params.getColumnPos(5));
- assertEquals("8 key R0 [7]", -2, params.getColumnPos(6));
- assertEquals("8 key R0 [8]", -3, params.getColumnPos(7));
- assertEquals("8 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [8] [7] [6] [5] ___|
- // [4] [3] [2] [1] ___|
- public void testLayout8KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("8 key R1 columns", 4, params.mNumColumns);
- assertEquals("8 key R1 rows", 2, params.mNumRows);
- assertEquals("8 key R1 left", 3, params.mLeftKeys);
- assertEquals("8 key R1 right", 1, params.mRightKeys);
- assertEquals("8 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("8 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("8 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("8 key R1 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key R1 [6]", -1, params.getColumnPos(5));
- assertEquals("8 key R1 [7]", -2, params.getColumnPos(6));
- assertEquals("8 key R1 [8]", -3, params.getColumnPos(7));
- assertEquals("8 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [8] [7] [5] [6] ___ ___|
- // [4] [3] [1] [2] ___ ___|
- public void testLayout8KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(8, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("8 key R2 columns", 4, params.mNumColumns);
- assertEquals("8 key R2 rows", 2, params.mNumRows);
- assertEquals("8 key R2 left", 2, params.mLeftKeys);
- assertEquals("8 key R2 right", 2, params.mRightKeys);
- assertEquals("8 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("8 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("8 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("8 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("8 key R2 [5]", 0, params.getColumnPos(4));
- assertEquals("8 key R2 [6]", 1, params.getColumnPos(5));
- assertEquals("8 key R2 [7]", -1, params.getColumnPos(6));
- assertEquals("8 key R2 [8]", -2, params.getColumnPos(7));
- assertEquals("8 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("8 key R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // [8] [6] [7] [9]
- // [5] [3] [1] [2] [4]
- public void testLayout9KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("9 key M0 columns", 5, params.mNumColumns);
- assertEquals("9 key M0 rows", 2, params.mNumRows);
- assertEquals("9 key M0 left", 2, params.mLeftKeys);
- assertEquals("9 key M0 right", 3, params.mRightKeys);
- assertEquals("9 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("9 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("9 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("9 key M0 [5]", -2, params.getColumnPos(4));
- assertEquals("9 key M0 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key M0 [7]", 1, params.getColumnPos(6));
- assertEquals("9 key M0 [8]", -1, params.getColumnPos(7));
- assertEquals("9 key M0 [9]", 2, params.getColumnPos(8));
- assertEquals("9 key M0 adjust", -1, params.mTopRowAdjustment);
- assertEquals("9 key M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // |[6] [7] [8] [9]
- // |[1] [2] [3] [4] [5]
- public void testLayout9KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("9 key L0 columns", 5, params.mNumColumns);
- assertEquals("9 key L0 rows", 2, params.mNumRows);
- assertEquals("9 key L0 left", 0, params.mLeftKeys);
- assertEquals("9 key L0 right", 5, params.mRightKeys);
- assertEquals("9 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("9 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("9 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("9 key L0 [5]", 4, params.getColumnPos(4));
- assertEquals("9 key L0 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key L0 [7]", 1, params.getColumnPos(6));
- assertEquals("9 key L0 [8]", 2, params.getColumnPos(7));
- assertEquals("9 key L0 [9]", 3, params.getColumnPos(8));
- assertEquals("9 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("9 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [6] [7] [8] [9]
- // |___ [1] [2] [3] [4] [5]
- public void testLayout9KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("9 key L1 columns", 5, params.mNumColumns);
- assertEquals("9 key L1 rows", 2, params.mNumRows);
- assertEquals("9 key L1 left", 0, params.mLeftKeys);
- assertEquals("9 key L1 right", 5, params.mRightKeys);
- assertEquals("9 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("9 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("9 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("9 key L1 [5]", 4, params.getColumnPos(4));
- assertEquals("9 key L1 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key L1 [7]", 1, params.getColumnPos(6));
- assertEquals("9 key L1 [8]", 2, params.getColumnPos(7));
- assertEquals("9 key L1 [9]", 3, params.getColumnPos(8));
- assertEquals("9 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("9 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [8] [6] [7] [9]
- // |___ ___ [3] [1] [2] [4] [5]
- public void testLayout9KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("9 key L2 columns", 5, params.mNumColumns);
- assertEquals("9 key L2 rows", 2, params.mNumRows);
- assertEquals("9 key L2 left", 1, params.mLeftKeys);
- assertEquals("9 key L2 right", 4, params.mRightKeys);
- assertEquals("9 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("9 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("9 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("9 key L2 [5]", 3, params.getColumnPos(4));
- assertEquals("9 key L2 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key L2 [7]", 1, params.getColumnPos(6));
- assertEquals("9 key L2 [8]", -1, params.getColumnPos(7));
- assertEquals("9 key L2 [9]", 2, params.getColumnPos(8));
- assertEquals("9 key L2 adjust", 1, params.mTopRowAdjustment);
- assertEquals("9 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [9] [8] [7] [6]|
- // [5] [4] [3] [2] [1]|
- public void testLayout9KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("9 key R0 columns", 5, params.mNumColumns);
- assertEquals("9 key R0 rows", 2, params.mNumRows);
- assertEquals("9 key R0 left", 4, params.mLeftKeys);
- assertEquals("9 key R0 right", 1, params.mRightKeys);
- assertEquals("9 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("9 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("9 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("9 key R0 [5]", -4, params.getColumnPos(4));
- assertEquals("9 key R0 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key R0 [7]", -1, params.getColumnPos(6));
- assertEquals("9 key R0 [8]", -2, params.getColumnPos(7));
- assertEquals("9 key R0 [9]", -3, params.getColumnPos(8));
- assertEquals("9 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("9 key R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [9] [8] [7] [6] ___|
- // [5] [4] [3] [2] [1] ___|
- public void testLayout9KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("9 key R1 columns", 5, params.mNumColumns);
- assertEquals("9 key R1 rows", 2, params.mNumRows);
- assertEquals("9 key R1 left", 4, params.mLeftKeys);
- assertEquals("9 key R1 right", 1, params.mRightKeys);
- assertEquals("9 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("9 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("9 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("9 key R1 [5]", -4, params.getColumnPos(4));
- assertEquals("9 key R1 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key R1 [7]", -1, params.getColumnPos(6));
- assertEquals("9 key R1 [8]", -2, params.getColumnPos(7));
- assertEquals("9 key R1 [9]", -3, params.getColumnPos(8));
- assertEquals("9 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("9 key R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [9] [8] [6] [7] ___ ___|
- // [5] [4] [3] [1] [2] ___ ___|
- public void testLayout9KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(9, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("9 key R2 columns", 5, params.mNumColumns);
- assertEquals("9 key R2 rows", 2, params.mNumRows);
- assertEquals("9 key R2 left", 3, params.mLeftKeys);
- assertEquals("9 key R2 right", 2, params.mRightKeys);
- assertEquals("9 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("9 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("9 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("9 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("9 key R2 [5]", -3, params.getColumnPos(4));
- assertEquals("9 key R2 [6]", 0, params.getColumnPos(5));
- assertEquals("9 key R2 [7]", 1, params.getColumnPos(6));
- assertEquals("9 key R2 [8]", -1, params.getColumnPos(7));
- assertEquals("9 key R2 [9]", -2, params.getColumnPos(8));
- assertEquals("9 key R2 adjust", -1, params.mTopRowAdjustment);
- assertEquals("9 key R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [A] [8] [6] [7] [9]
- // [5] [3] [1] [2] [4]
- public void testLayout10KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("10 key M0 columns", 5, params.mNumColumns);
- assertEquals("10 key M0 rows", 2, params.mNumRows);
- assertEquals("10 key M0 left", 2, params.mLeftKeys);
- assertEquals("10 key M0 right", 3, params.mRightKeys);
- assertEquals("10 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("10 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("10 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("10 key M0 [5]", -2, params.getColumnPos(4));
- assertEquals("10 key M0 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key M0 [7]", 1, params.getColumnPos(6));
- assertEquals("10 key M0 [8]", -1, params.getColumnPos(7));
- assertEquals("10 key M0 [9]", 2, params.getColumnPos(8));
- assertEquals("10 key M0 [A]", -2, params.getColumnPos(9));
- assertEquals("10 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-
- // |[6] [7] [8] [9] [A]
- // |[1] [2] [3] [4] [5]
- public void testLayout10KeyL0() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L0, KEYBOARD_WIDTH);
- assertEquals("10 key L0 columns", 5, params.mNumColumns);
- assertEquals("10 key L0 rows", 2, params.mNumRows);
- assertEquals("10 key L0 left", 0, params.mLeftKeys);
- assertEquals("10 key L0 right", 5, params.mRightKeys);
- assertEquals("10 key L0 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key L0 [2]", 1, params.getColumnPos(1));
- assertEquals("10 key L0 [3]", 2, params.getColumnPos(2));
- assertEquals("10 key L0 [4]", 3, params.getColumnPos(3));
- assertEquals("10 key L0 [5]", 4, params.getColumnPos(4));
- assertEquals("10 key L0 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key L0 [7]", 1, params.getColumnPos(6));
- assertEquals("10 key L0 [8]", 2, params.getColumnPos(7));
- assertEquals("10 key L0 [9]", 3, params.getColumnPos(8));
- assertEquals("10 key L0 [A]", 4, params.getColumnPos(9));
- assertEquals("10 key L0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ [6] [7] [8] [9] [A]
- // |___ [1] [2] [3] [4] [5]
- public void testLayout10KeyL1() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L1, KEYBOARD_WIDTH);
- assertEquals("10 key L1 columns", 5, params.mNumColumns);
- assertEquals("10 key L1 rows", 2, params.mNumRows);
- assertEquals("10 key L1 left", 0, params.mLeftKeys);
- assertEquals("10 key L1 right", 5, params.mRightKeys);
- assertEquals("10 key L1 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key L1 [2]", 1, params.getColumnPos(1));
- assertEquals("10 key L1 [3]", 2, params.getColumnPos(2));
- assertEquals("10 key L1 [4]", 3, params.getColumnPos(3));
- assertEquals("10 key L1 [5]", 4, params.getColumnPos(4));
- assertEquals("10 key L1 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key L1 [7]", 1, params.getColumnPos(6));
- assertEquals("10 key L1 [8]", 2, params.getColumnPos(7));
- assertEquals("10 key L1 [9]", 3, params.getColumnPos(8));
- assertEquals("10 key L1 [A]", 4, params.getColumnPos(9));
- assertEquals("10 key L1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
- }
-
- // |___ ___ [8] [6] [7] [9] [A]
- // |___ ___ [3] [1] [2] [4] [5]
- public void testLayout10KeyL2() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_L2, KEYBOARD_WIDTH);
- assertEquals("10 key L2 columns", 5, params.mNumColumns);
- assertEquals("10 key L2 rows", 2, params.mNumRows);
- assertEquals("10 key L2 left", 1, params.mLeftKeys);
- assertEquals("10 key L2 right", 4, params.mRightKeys);
- assertEquals("10 key L2 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key L2 [2]", 1, params.getColumnPos(1));
- assertEquals("10 key L2 [3]", -1, params.getColumnPos(2));
- assertEquals("10 key L2 [4]", 2, params.getColumnPos(3));
- assertEquals("10 key L2 [5]", 3, params.getColumnPos(4));
- assertEquals("10 key L2 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key L2 [7]", 1, params.getColumnPos(6));
- assertEquals("10 key L2 [8]", -1, params.getColumnPos(7));
- assertEquals("10 key L2 [9]", 2, params.getColumnPos(8));
- assertEquals("10 key L2 [A]", 3, params.getColumnPos(9));
- assertEquals("10 key L2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [A] [9] [8] [7] [6]|
- // [5] [4] [3] [2] [1]|
- public void testLayout10KeyR0() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R0, KEYBOARD_WIDTH);
- assertEquals("10 key R0 columns", 5, params.mNumColumns);
- assertEquals("10 key R0 rows", 2, params.mNumRows);
- assertEquals("10 key R0 left", 4, params.mLeftKeys);
- assertEquals("10 key R0 right", 1, params.mRightKeys);
- assertEquals("10 key R0 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key R0 [2]", -1, params.getColumnPos(1));
- assertEquals("10 key R0 [3]", -2, params.getColumnPos(2));
- assertEquals("10 key R0 [4]", -3, params.getColumnPos(3));
- assertEquals("10 key R0 [5]", -4, params.getColumnPos(4));
- assertEquals("10 key R0 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key R0 [7]", -1, params.getColumnPos(6));
- assertEquals("10 key R0 [8]", -2, params.getColumnPos(7));
- assertEquals("10 key R0 [9]", -3, params.getColumnPos(8));
- assertEquals("10 key R0 [A]", -4, params.getColumnPos(9));
- assertEquals("10 key R0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [A] [9] [8] [7] [6] ___|
- // [5] [4] [3] [2] [1] ___|
- public void testLayout10KeyR1() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R1, KEYBOARD_WIDTH);
- assertEquals("10 key R1 columns", 5, params.mNumColumns);
- assertEquals("10 key R1 rows", 2, params.mNumRows);
- assertEquals("10 key R1 left", 4, params.mLeftKeys);
- assertEquals("10 key R1 right", 1, params.mRightKeys);
- assertEquals("10 key R1 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key R1 [2]", -1, params.getColumnPos(1));
- assertEquals("10 key R1 [3]", -2, params.getColumnPos(2));
- assertEquals("10 key R1 [4]", -3, params.getColumnPos(3));
- assertEquals("10 key R1 [5]", -4, params.getColumnPos(4));
- assertEquals("10 key R1 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key R1 [7]", -1, params.getColumnPos(6));
- assertEquals("10 key R1 [8]", -2, params.getColumnPos(7));
- assertEquals("10 key R1 [9]", -3, params.getColumnPos(8));
- assertEquals("10 key R1 [A]", -4, params.getColumnPos(9));
- assertEquals("10 key R1 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
- }
-
- // [A] [9] [8] [6] [7] ___ ___|
- // [5] [4] [3] [1] [2] ___ ___|
- public void testLayout10KeyR2() {
- MiniKeyboardParams params = new MiniKeyboardParams(10, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_R2, KEYBOARD_WIDTH);
- assertEquals("10 key R2 columns", 5, params.mNumColumns);
- assertEquals("10 key R2 rows", 2, params.mNumRows);
- assertEquals("10 key R2 left", 3, params.mLeftKeys);
- assertEquals("10 key R2 right", 2, params.mRightKeys);
- assertEquals("10 key R2 [1]", 0, params.getColumnPos(0));
- assertEquals("10 key R2 [2]", 1, params.getColumnPos(1));
- assertEquals("10 key R2 [3]", -1, params.getColumnPos(2));
- assertEquals("10 key R2 [4]", -2, params.getColumnPos(3));
- assertEquals("10 key R2 [5]", -3, params.getColumnPos(4));
- assertEquals("10 key R2 [6]", 0, params.getColumnPos(5));
- assertEquals("10 key R2 [7]", 1, params.getColumnPos(6));
- assertEquals("10 key R2 [8]", -1, params.getColumnPos(7));
- assertEquals("10 key R2 [9]", -2, params.getColumnPos(8));
- assertEquals("10 key R2 [A]", -3, params.getColumnPos(9));
- assertEquals("10 key R2 adjust", 0, params.mTopRowAdjustment);
- assertEquals("10 key R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
- }
-
- // [B] [9] [A]
- // [7] [5] [6] [8]
- // [3] [1] [2] [4]
- public void testLayout11KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(11, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("11 key M0 columns", 4, params.mNumColumns);
- assertEquals("11 key M0 rows", 3, params.mNumRows);
- assertEquals("11 key M0 left", 1, params.mLeftKeys);
- assertEquals("11 key M0 right", 3, params.mRightKeys);
- assertEquals("11 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("11 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("11 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("11 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("11 key M0 [5]", 0, params.getColumnPos(4));
- assertEquals("11 key M0 [6]", 1, params.getColumnPos(5));
- assertEquals("11 key M0 [7]", -1, params.getColumnPos(6));
- assertEquals("11 key M0 [8]", 2, params.getColumnPos(7));
- assertEquals("11 key M0 [9]", 0, params.getColumnPos(8));
- assertEquals("11 key M0 [A]", 1, params.getColumnPos(9));
- assertEquals("11 key M0 [B]", -1, params.getColumnPos(10));
- assertEquals("11 key M0 adjust", 1, params.mTopRowAdjustment);
- assertEquals("11 key M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
- // [B] [9] [A] [C]
- // [7] [5] [6] [8]
- // [3] [1] [2] [4]
- public void testLayout12KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(12, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("12 key M0 columns", 4, params.mNumColumns);
- assertEquals("12 key M0 rows", 3, params.mNumRows);
- assertEquals("12 key M0 left", 1, params.mLeftKeys);
- assertEquals("12 key M0 right", 3, params.mRightKeys);
- assertEquals("12 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("12 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("12 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("12 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("12 key M0 [5]", 0, params.getColumnPos(4));
- assertEquals("12 key M0 [6]", 1, params.getColumnPos(5));
- assertEquals("12 key M0 [7]", -1, params.getColumnPos(6));
- assertEquals("12 key M0 [8]", 2, params.getColumnPos(7));
- assertEquals("12 key M0 [9]", 0, params.getColumnPos(8));
- assertEquals("12 key M0 [A]", 1, params.getColumnPos(9));
- assertEquals("12 key M0 [B]", -1, params.getColumnPos(10));
- assertEquals("12 key M0 [C]", 2, params.getColumnPos(11));
- assertEquals("12 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("12 key M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
- }
-
-
- // [D] [B] [C]
- // [A] [8] [6] [7] [9]
- // [5] [3] [1] [2] [4]
- public void testLayout13KeyM0() {
- MiniKeyboardParams params = new MiniKeyboardParams(13, MAX_COLUMNS, WIDTH,
- HEIGHT, XPOS_M0, KEYBOARD_WIDTH);
- assertEquals("13 key M0 columns", 5, params.mNumColumns);
- assertEquals("13 key M0 rows", 3, params.mNumRows);
- assertEquals("13 key M0 left", 2, params.mLeftKeys);
- assertEquals("13 key M0 right", 3, params.mRightKeys);
- assertEquals("13 key M0 [1]", 0, params.getColumnPos(0));
- assertEquals("13 key M0 [2]", 1, params.getColumnPos(1));
- assertEquals("13 key M0 [3]", -1, params.getColumnPos(2));
- assertEquals("13 key M0 [4]", 2, params.getColumnPos(3));
- assertEquals("13 key M0 [5]", -2, params.getColumnPos(4));
- assertEquals("13 key M0 [6]", 0, params.getColumnPos(5));
- assertEquals("13 key M0 [7]", 1, params.getColumnPos(6));
- assertEquals("13 key M0 [8]", -1, params.getColumnPos(7));
- assertEquals("13 key M0 [9]", 2, params.getColumnPos(8));
- assertEquals("13 key M0 [A]", -2, params.getColumnPos(9));
- assertEquals("13 key M0 [B]", 0, params.getColumnPos(10));
- assertEquals("13 key M0 [C]", 1, params.getColumnPos(11));
- assertEquals("13 key M0 [D]", -1, params.getColumnPos(12));
- assertEquals("13 key M0 adjust", 0, params.mTopRowAdjustment);
- assertEquals("13 key M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
- }
-}
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
new file mode 100644
index 000000000..1a1d643fd
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
@@ -0,0 +1,1616 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard;
+
+import android.test.AndroidTestCase;
+
+import com.android.inputmethod.keyboard.MoreKeysKeyboard.Builder.MoreKeysKeyboardParams;
+
+public class MoreKeysKeyboardBuilderTests extends AndroidTestCase {
+ private static final int WIDTH = 10;
+ private static final int HEIGHT = 10;
+
+ private static final int KEYBOARD_WIDTH = WIDTH * 10;
+ private static final int XPOS_L0 = WIDTH * 0 + WIDTH / 2;
+ private static final int XPOS_L1 = WIDTH * 1 + WIDTH / 2;
+ private static final int XPOS_L2 = WIDTH * 2 + WIDTH / 2;
+ private static final int XPOS_L3 = WIDTH * 3 + WIDTH / 2;
+ private static final int XPOS_M0 = WIDTH * 4 + WIDTH / 2;
+ private static final int XPOS_M1 = WIDTH * 5 + WIDTH / 2;
+ private static final int XPOS_R3 = WIDTH * 6 + WIDTH / 2;
+ private static final int XPOS_R2 = WIDTH * 7 + WIDTH / 2;
+ private static final int XPOS_R1 = WIDTH * 8 + WIDTH / 2;
+ private static final int XPOS_R0 = WIDTH * 9 + WIDTH / 2;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ private static MoreKeysKeyboardParams createParams(int numKeys, int maxColumns,
+ int coordXInParnet) {
+ return new MoreKeysKeyboardParams(numKeys, maxColumns, WIDTH, HEIGHT, coordXInParnet,
+ KEYBOARD_WIDTH);
+ }
+
+ public void testLayoutError() {
+ MoreKeysKeyboardParams params = null;
+ try {
+ final int maxColumns = KEYBOARD_WIDTH / WIDTH;
+ params = createParams(10, maxColumns + 1, HEIGHT);
+ fail("Should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Too small keyboard to hold more keys keyboard.
+ }
+ assertNull("Too small keyboard to hold more keys keyboard", params);
+ }
+
+ // More keys keyboard layout test.
+ // "[n]" represents n-th key position in more keys keyboard.
+ // "[1]" is the default key.
+
+ // [1]
+ public void testLayout1KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0);
+ assertEquals("1 key max 5 M0 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 M0 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 M0 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 M0 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |[1]
+ public void testLayout1KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0);
+ assertEquals("1 key max 5 L0 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 L0 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 L0 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1]
+ public void testLayout1KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1);
+ assertEquals("1 key max 5 L1 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 L1 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 L1 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [1]
+ public void testLayout1KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2);
+ assertEquals("1 key max 5 L2 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 L2 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 L2 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 L2 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [1]|
+ public void testLayout1KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0);
+ assertEquals("1 key max 5 R0 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 R0 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 R0 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 R0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [1] ___|
+ public void testLayout1KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1);
+ assertEquals("1 key max 5 R1 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 R1 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 R1 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 R1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [1] ___ ___|
+ public void testLayout1KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2);
+ assertEquals("1 key max 5 R2 columns", 1, params.mNumColumns);
+ assertEquals("1 key max 5 R2 rows", 1, params.mNumRows);
+ assertEquals("1 key max 5 R2 left", 0, params.mLeftKeys);
+ assertEquals("1 key max 5 R2 right", 1, params.mRightKeys);
+ assertEquals("1 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("1 key max 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [1] [2]
+ public void testLayout2KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0);
+ assertEquals("2 key max 5 M0 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 M0 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 M0 left", 0, params.mLeftKeys);
+ assertEquals("2 key max 5 M0 right", 2, params.mRightKeys);
+ assertEquals("2 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |[1] [2]
+ public void testLayout2KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0);
+ assertEquals("2 key max 5 L0 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 L0 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("2 key max 5 L0 right", 2, params.mRightKeys);
+ assertEquals("2 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1] [2]
+ public void testLayout2KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1);
+ assertEquals("2 key max 5 L1 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 L1 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("2 key max 5 L1 right", 2, params.mRightKeys);
+ assertEquals("2 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [1] [2]
+ public void testLayout2KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2);
+ assertEquals("2 key max 5 L2 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 L2 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 L2 left", 0, params.mLeftKeys);
+ assertEquals("2 key max 5 L2 right", 2, params.mRightKeys);
+ assertEquals("2 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [2] [1]|
+ public void testLayout2KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0);
+ assertEquals("2 key max 5 R0 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 R0 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 R0 left", 1, params.mLeftKeys);
+ assertEquals("2 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("2 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("2 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [2] [1] ___|
+ public void testLayout2KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1);
+ assertEquals("2 key max 5 R1 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 R1 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 R1 left", 1, params.mLeftKeys);
+ assertEquals("2 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("2 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("2 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [1] [2] ___|
+ public void testLayout2KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2);
+ assertEquals("2 key max 5 R2 columns", 2, params.mNumColumns);
+ assertEquals("2 key max 5 R2 rows", 1, params.mNumRows);
+ assertEquals("2 key max 5 R2 left", 0, params.mLeftKeys);
+ assertEquals("2 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("2 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("2 key max 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [1] [2]
+ public void testLayout3KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0);
+ assertEquals("3 key columns", 3, params.mNumColumns);
+ assertEquals("3 key rows", 1, params.mNumRows);
+ assertEquals("3 key left", 1, params.mLeftKeys);
+ assertEquals("3 key right", 2, params.mRightKeys);
+ assertEquals("3 key [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key [3]", -1, params.getColumnPos(2));
+ assertEquals("3 key adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // |[1] [2] [3]
+ public void testLayout3KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0);
+ assertEquals("3 key max 5 L0 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 L0 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 5 L0 right", 3, params.mRightKeys);
+ assertEquals("3 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("3 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1] [2] [3]
+ public void testLayout3KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1);
+ assertEquals("3 key max 5 L1 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 L1 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 5 L1 right", 3, params.mRightKeys);
+ assertEquals("3 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("3 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [3] [1] [2]
+ public void testLayout3KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2);
+ assertEquals("3 key max 5 L2 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 L2 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("3 key max 5 L2 right", 2, params.mRightKeys);
+ assertEquals("3 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("3 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [2] [1]|
+ public void testLayout3KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0);
+ assertEquals("3 key max 5 R0 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 R0 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 R0 left", 2, params.mLeftKeys);
+ assertEquals("3 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("3 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("3 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("3 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [2] [1] ___|
+ public void testLayout3KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1);
+ assertEquals("3 key max 5 R1 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 R1 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 R1 left", 2, params.mLeftKeys);
+ assertEquals("3 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("3 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("3 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("3 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [1] [2] ___|
+ public void testLayout3KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2);
+ assertEquals("3 key max 5 R2 columns", 3, params.mNumColumns);
+ assertEquals("3 key max 5 R2 rows", 1, params.mNumRows);
+ assertEquals("3 key max 5 R2 left", 1, params.mLeftKeys);
+ assertEquals("3 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("3 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("3 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("3 key max 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [3]
+ // [1] [2]
+ public void testLayout3KeyMax2M0() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0);
+ assertEquals("3 key max 2 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 2 right", 2, params.mRightKeys);
+ assertEquals("3 key max 2 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 2 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // | [3]
+ // |[1] [2]
+ public void testLayout3KeyMax2L0() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0);
+ assertEquals("3 key max 2 L0 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 L0 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 L0 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 2 L0 right", 2, params.mRightKeys);
+ assertEquals("3 key max 2 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 2 L0 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 L0 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [3]
+ // |___ [1] [2]
+ public void testLayout3KeyMax2L1() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1);
+ assertEquals("3 key max 2 L1 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 L1 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 L1 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 2 L1 right", 2, params.mRightKeys);
+ assertEquals("3 key max 2 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 2 L1 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 L1 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // | [3]
+ // |___ ___ [1] [2]
+ public void testLayout3KeyMax2L2() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2);
+ assertEquals("3 key max 2 L2 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 L2 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 L2 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 2 L2 right", 2, params.mRightKeys);
+ assertEquals("3 key max 2 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 2 L2 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 L2 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [3] |
+ // [2] [1]|
+ public void testLayout3KeyMax2R0() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0);
+ assertEquals("3 key max 2 R0 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 R0 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 R0 left", 1, params.mLeftKeys);
+ assertEquals("3 key max 2 R0 right", 1, params.mRightKeys);
+ assertEquals("3 key max 2 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("3 key max 2 R0 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 R0 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [3] |
+ // [2] [1] ___|
+ public void testLayout3KeyMax2R1() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1);
+ assertEquals("3 key max 2 R1 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 R1 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 R1 left", 1, params.mLeftKeys);
+ assertEquals("3 key max 2 R1 right", 1, params.mRightKeys);
+ assertEquals("3 key max 2 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("3 key max 2 R1 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 R1 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [3] |
+ // [1] [2] ___|
+ public void testLayout3KeyMax2R2() {
+ MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2);
+ assertEquals("3 key max 2 R2 columns", 2, params.mNumColumns);
+ assertEquals("3 key max 2 R2 rows", 2, params.mNumRows);
+ assertEquals("3 key max 2 R2 left", 0, params.mLeftKeys);
+ assertEquals("3 key max 2 R2 right", 2, params.mRightKeys);
+ assertEquals("3 key max 2 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key max 2 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key max 2 R2 [3]", 0, params.getColumnPos(2));
+ assertEquals("3 key max 2 R2 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("3 key max 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [1] [2] [4]
+ public void testLayout4KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
+ assertEquals("4 key columns", 4, params.mNumColumns);
+ assertEquals("4 key rows", 1, params.mNumRows);
+ assertEquals("4 key left", 1, params.mLeftKeys);
+ assertEquals("4 key right", 3, params.mRightKeys);
+ assertEquals("4 key [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key [3]", -1, params.getColumnPos(2));
+ assertEquals("4 key [4]", 2, params.getColumnPos(3));
+ assertEquals("4 key adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // |[1] [2] [3] [4]
+ public void testLayout4KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0);
+ assertEquals("4 key max 5 L0 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 L0 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("4 key max 5 L0 right", 4, params.mRightKeys);
+ assertEquals("4 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("4 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("4 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1] [2] [3] [4]
+ public void testLayout4KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1);
+ assertEquals("4 key max 5 L1 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 L1 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("4 key max 5 L1 right", 4, params.mRightKeys);
+ assertEquals("4 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("4 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("4 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [3] [1] [2] [4]
+ public void testLayout4KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2);
+ assertEquals("4 key max 5 L2 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 L2 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("4 key max 5 L2 right", 3, params.mRightKeys);
+ assertEquals("4 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("4 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("4 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [4] [3] [2] [1]|
+ public void testLayout4KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0);
+ assertEquals("4 key max 5 R0 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 R0 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 R0 left", 3, params.mLeftKeys);
+ assertEquals("4 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("4 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("4 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("4 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("4 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [4] [3] [2] [1] ___|
+ public void testLayout4KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1);
+ assertEquals("4 key max 5 R1 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 R1 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 R1 left", 3, params.mLeftKeys);
+ assertEquals("4 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("4 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("4 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("4 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("4 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [4] [3] [1] [2] ___|
+ public void testLayout4KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2);
+ assertEquals("4 key max 5 R2 columns", 4, params.mNumColumns);
+ assertEquals("4 key max 5 R2 rows", 1, params.mNumRows);
+ assertEquals("4 key max 5 R2 left", 2, params.mLeftKeys);
+ assertEquals("4 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("4 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("4 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("4 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("4 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [5] [3] [1] [2] [4]
+ public void testLayout5KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
+ assertEquals("5 key columns", 5, params.mNumColumns);
+ assertEquals("5 key rows", 1, params.mNumRows);
+ assertEquals("5 key left", 2, params.mLeftKeys);
+ assertEquals("5 key right", 3, params.mRightKeys);
+ assertEquals("5 key [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key [3]", -1, params.getColumnPos(2));
+ assertEquals("5 key [4]", 2, params.getColumnPos(3));
+ assertEquals("5 key [5]", -2, params.getColumnPos(4));
+ assertEquals("5 key adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // |[1] [2] [3] [4] [5]
+ public void testLayout5KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0);
+ assertEquals("5 key max 5 L0 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 L0 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("5 key max 5 L0 right", 5, params.mRightKeys);
+ assertEquals("5 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("5 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("5 key max 5 L0 [5]", 4, params.getColumnPos(4));
+ assertEquals("5 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1] [2] [3] [4] [5]
+ public void testLayout5KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1);
+ assertEquals("5 key max 5 L1 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 L1 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("5 key max 5 L1 right", 5, params.mRightKeys);
+ assertEquals("5 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("5 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("5 key max 5 L1 [5]", 4, params.getColumnPos(4));
+ assertEquals("5 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [3] [1] [2] [4] [5]
+ public void testLayout5KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2);
+ assertEquals("5 key max 5 L2 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 L2 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("5 key max 5 L2 right", 4, params.mRightKeys);
+ assertEquals("5 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("5 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("5 key max 5 L2 [5]", 3, params.getColumnPos(4));
+ assertEquals("5 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [5] [4] [3] [2] [1]|
+ public void testLayout5KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0);
+ assertEquals("5 key max 5 R0 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 R0 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 R0 left", 4, params.mLeftKeys);
+ assertEquals("5 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("5 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("5 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("5 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("5 key max 5 R0 [5]", -4, params.getColumnPos(4));
+ assertEquals("5 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [5] [4] [3] [2] [1] ___|
+ public void testLayout5KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1);
+ assertEquals("5 key max 5 R1 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 R1 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 R1 left", 4, params.mLeftKeys);
+ assertEquals("5 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("5 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("5 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("5 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("5 key max 5 R1 [5]", -4, params.getColumnPos(4));
+ assertEquals("5 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [5] [4] [3] [1] [2] ___|
+ public void testLayout5KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2);
+ assertEquals("5 key max 5 R2 columns", 5, params.mNumColumns);
+ assertEquals("5 key max 5 R2 rows", 1, params.mNumRows);
+ assertEquals("5 key max 5 R2 left", 3, params.mLeftKeys);
+ assertEquals("5 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("5 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("5 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("5 key max 5 R2 [5]", -3, params.getColumnPos(4));
+ assertEquals("5 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("5 key max 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [6] [4] [5]
+ // [3] [1] [2]
+ public void testLayout6KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
+ assertEquals("6 key columns", 3, params.mNumColumns);
+ assertEquals("6 key rows", 2, params.mNumRows);
+ assertEquals("6 key left", 1, params.mLeftKeys);
+ assertEquals("6 key right", 2, params.mRightKeys);
+ assertEquals("6 key [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key [3]", -1, params.getColumnPos(2));
+ assertEquals("6 key [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key [5]", 1, params.getColumnPos(4));
+ assertEquals("6 key [6]", -1, params.getColumnPos(5));
+ assertEquals("6 key adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // |[4] [5] [6]
+ // |[1] [2] [3]
+ public void testLayout6KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0);
+ assertEquals("6 key max 5 L0 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 L0 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("6 key max 5 L0 right", 3, params.mRightKeys);
+ assertEquals("6 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("6 key max 5 L0 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 L0 [5]", 1, params.getColumnPos(4));
+ assertEquals("6 key max 5 L0 [6]", 2, params.getColumnPos(5));
+ assertEquals("6 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [4] [5] [6]
+ // |___ [1] [2] [3]
+ public void testLayout6KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1);
+ assertEquals("6 key max 5 L1 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 L1 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("6 key max 5 L1 right", 3, params.mRightKeys);
+ assertEquals("6 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("6 key max 5 L1 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 L1 [5]", 1, params.getColumnPos(4));
+ assertEquals("6 key max 5 L1 [6]", 2, params.getColumnPos(5));
+ assertEquals("6 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [6] [4] [5]
+ // |___ [3] [1] [2]
+ public void testLayout6KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2);
+ assertEquals("6 key max 5 L2 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 L2 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("6 key max 5 L2 right", 2, params.mRightKeys);
+ assertEquals("6 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("6 key max 5 L2 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 L2 [5]", 1, params.getColumnPos(4));
+ assertEquals("6 key max 5 L2 [6]", -1, params.getColumnPos(5));
+ assertEquals("6 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [6] [5] [4]|
+ // [3] [2] [1]|
+ public void testLayout6KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0);
+ assertEquals("6 key max 5 R0 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 R0 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 R0 left", 2, params.mLeftKeys);
+ assertEquals("6 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("6 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("6 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("6 key max 5 R0 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 R0 [5]", -1, params.getColumnPos(4));
+ assertEquals("6 key max 5 R0 [6]", -2, params.getColumnPos(5));
+ assertEquals("6 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [6] [5] [4] ___|
+ // [3] [2] [1] ___|
+ public void testLayout6KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1);
+ assertEquals("6 key max 5 R1 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 R1 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 R1 left", 2, params.mLeftKeys);
+ assertEquals("6 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("6 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("6 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("6 key max 5 R1 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 R1 [5]", -1, params.getColumnPos(4));
+ assertEquals("6 key max 5 R1 [6]", -2, params.getColumnPos(5));
+ assertEquals("6 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [6] [4] [5] ___|
+ // [3] [1] [2] ___|
+ public void testLayout6KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2);
+ assertEquals("6 key max 5 R2 columns", 3, params.mNumColumns);
+ assertEquals("6 key max 5 R2 rows", 2, params.mNumRows);
+ assertEquals("6 key max 5 R2 left", 1, params.mLeftKeys);
+ assertEquals("6 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("6 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("6 key max 5 R2 [4]", 0, params.getColumnPos(3));
+ assertEquals("6 key max 5 R2 [5]", 1, params.getColumnPos(4));
+ assertEquals("6 key max 5 R2 [6]", -1, params.getColumnPos(5));
+ assertEquals("6 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("6 key max 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [7] [5] [6]
+ // [3] [1] [2] [4]
+ public void testLayout7KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
+ assertEquals("7 key columns", 4, params.mNumColumns);
+ assertEquals("7 key rows", 2, params.mNumRows);
+ assertEquals("7 key left", 1, params.mLeftKeys);
+ assertEquals("7 key right", 3, params.mRightKeys);
+ assertEquals("7 key [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key [6]", 1, params.getColumnPos(5));
+ assertEquals("7 key [7]", -1, params.getColumnPos(6));
+ assertEquals("7 key adjust", 1, params.mTopRowAdjustment);
+ assertEquals("7 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // | [5] [6] [7]
+ // |[1] [2] [3] [4]
+ public void testLayout7KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
+ assertEquals("7 key max 5 L0 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 L0 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("7 key max 5 L0 right", 4, params.mRightKeys);
+ assertEquals("7 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("7 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("7 key max 5 L0 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 L0 [6]", 1, params.getColumnPos(5));
+ assertEquals("7 key max 5 L0 [7]", 2, params.getColumnPos(6));
+ assertEquals("7 key max 5 L0 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [5] [6] [7]
+ // |___ [1] [2] [3] [4]
+ public void testLayout7KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
+ assertEquals("7 key max 5 L1 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 L1 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("7 key max 5 L1 right", 4, params.mRightKeys);
+ assertEquals("7 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("7 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("7 key max 5 L1 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 L1 [6]", 1, params.getColumnPos(5));
+ assertEquals("7 key max 5 L1 [7]", 2, params.getColumnPos(6));
+ assertEquals("7 key max 5 L1 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [7] [5] [6]
+ // |___ [3] [1] [2] [4]
+ public void testLayout7KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
+ assertEquals("7 key max 5 L2 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 L2 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("7 key max 5 L2 right", 3, params.mRightKeys);
+ assertEquals("7 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 5 L2 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 L2 [6]", 1, params.getColumnPos(5));
+ assertEquals("7 key max 5 L2 [7]", -1, params.getColumnPos(6));
+ assertEquals("7 key max 5 L2 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [7] [6] [5] |
+ // [4] [3] [2] [1]|
+ public void testLayout7KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
+ assertEquals("7 key max 5 R0 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 R0 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 R0 left", 3, params.mLeftKeys);
+ assertEquals("7 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("7 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("7 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("7 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("7 key max 5 R0 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 R0 [6]", -1, params.getColumnPos(5));
+ assertEquals("7 key max 5 R0 [7]", -2, params.getColumnPos(6));
+ assertEquals("7 key max 5 R0 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [7] [6] [5] ___|
+ // [4] [3] [2] [1] ___|
+ public void testLayout7KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
+ assertEquals("7 key max 5 R1 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 R1 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 R1 left", 3, params.mLeftKeys);
+ assertEquals("7 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("7 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("7 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("7 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("7 key max 5 R1 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 R1 [6]", -1, params.getColumnPos(5));
+ assertEquals("7 key max 5 R1 [7]", -2, params.getColumnPos(6));
+ assertEquals("7 key max 5 R1 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [7] [5] [6] ___|
+ // [4] [3] [1] [2] ___|
+ public void testLayout7KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
+ assertEquals("7 key max 5 R2 columns", 4, params.mNumColumns);
+ assertEquals("7 key max 5 R2 rows", 2, params.mNumRows);
+ assertEquals("7 key max 5 R2 left", 2, params.mLeftKeys);
+ assertEquals("7 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("7 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("7 key max 5 R2 [5]", 0, params.getColumnPos(4));
+ assertEquals("7 key max 5 R2 [6]", 1, params.getColumnPos(5));
+ assertEquals("7 key max 5 R2 [7]", -1, params.getColumnPos(6));
+ assertEquals("7 key max 5 R2 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("7 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // |[1] [2] [3] [4] [5] [6] [7] ___ ___ ___|
+ public void testLayout7KeyMax7L0() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0);
+ assertEquals("7 key max 7 L0 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 L0 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 L0 left", 0, params.mLeftKeys);
+ assertEquals("7 key max 7 L0 right", 7, params.mRightKeys);
+ assertEquals("7 key max 7 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("7 key max 7 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("7 key max 7 L0 [5]", 4, params.getColumnPos(4));
+ assertEquals("7 key max 7 L0 [6]", 5, params.getColumnPos(5));
+ assertEquals("7 key max 7 L0 [7]", 6, params.getColumnPos(6));
+ assertEquals("7 key max 7 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [1] [2] [3] [4] [5] [6] [7] ___ ___|
+ public void testLayout7KeyMax7L1() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1);
+ assertEquals("7 key max 7 L1 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 L1 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 L1 left", 0, params.mLeftKeys);
+ assertEquals("7 key max 7 L1 right", 7, params.mRightKeys);
+ assertEquals("7 key max 7 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("7 key max 7 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("7 key max 7 L1 [5]", 4, params.getColumnPos(4));
+ assertEquals("7 key max 7 L1 [6]", 5, params.getColumnPos(5));
+ assertEquals("7 key max 7 L1 [7]", 6, params.getColumnPos(6));
+ assertEquals("7 key max 7 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [3] [1] [2] [4] [5] [6] [7] ___ ___|
+ public void testLayout7KeyMax7L2() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2);
+ assertEquals("7 key max 7 L2 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 L2 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 L2 left", 1, params.mLeftKeys);
+ assertEquals("7 key max 7 L2 right", 6, params.mRightKeys);
+ assertEquals("7 key max 7 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 7 L2 [5]", 3, params.getColumnPos(4));
+ assertEquals("7 key max 7 L2 [6]", 4, params.getColumnPos(5));
+ assertEquals("7 key max 7 L2 [7]", 5, params.getColumnPos(6));
+ assertEquals("7 key max 7 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [5] [3] [1] [2] [4] [6] [7] ___ ___|
+ public void testLayout7KeyMax7L3() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3);
+ assertEquals("7 key max 7 L3 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 L3 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 L3 left", 2, params.mLeftKeys);
+ assertEquals("7 key max 7 L3 right", 5, params.mRightKeys);
+ assertEquals("7 key max 7 L3 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 L3 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 L3 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 L3 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 7 L3 [5]", -2, params.getColumnPos(4));
+ assertEquals("7 key max 7 L3 [6]", 3, params.getColumnPos(5));
+ assertEquals("7 key max 7 L3 [7]", 4, params.getColumnPos(6));
+ assertEquals("7 key max 7 L3 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 L3 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [7] [5] [3] [1] [2] [4] [6] ___ ___|
+ public void testLayout7KeyMax7M0() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0);
+ assertEquals("7 key max 7 M0 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 M0 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 M0 left", 3, params.mLeftKeys);
+ assertEquals("7 key max 7 M0 right", 4, params.mRightKeys);
+ assertEquals("7 key max 7 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 7 M0 [5]", -2, params.getColumnPos(4));
+ assertEquals("7 key max 7 M0 [6]", 3, params.getColumnPos(5));
+ assertEquals("7 key max 7 M0 [7]", -3, params.getColumnPos(6));
+ assertEquals("7 key max 7 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 M0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [7] [5] [3] [1] [2] [4] [6] ___|
+ public void testLayout7KeyMax7M1() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1);
+ assertEquals("7 key max 7 M1 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 M1 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 M1 left", 3, params.mLeftKeys);
+ assertEquals("7 key max 7 M1 right", 4, params.mRightKeys);
+ assertEquals("7 key max 7 M1 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 M1 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 M1 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 M1 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 7 M1 [5]", -2, params.getColumnPos(4));
+ assertEquals("7 key max 7 M1 [6]", 3, params.getColumnPos(5));
+ assertEquals("7 key max 7 M1 [7]", -3, params.getColumnPos(6));
+ assertEquals("7 key max 7 M1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 M1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [7] [6] [5] [3] [1] [2] [4] ___|
+ public void testLayout7KeyMax7R3() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3);
+ assertEquals("7 key max 7 R3 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 R3 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 R3 left", 4, params.mLeftKeys);
+ assertEquals("7 key max 7 R3 right", 3, params.mRightKeys);
+ assertEquals("7 key max 7 R3 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 R3 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 R3 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 R3 [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key max 7 R3 [5]", -2, params.getColumnPos(4));
+ assertEquals("7 key max 7 R3 [6]", -3, params.getColumnPos(5));
+ assertEquals("7 key max 7 R3 [7]", -4, params.getColumnPos(6));
+ assertEquals("7 key max 7 R3 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 R3 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [7] [6] [5] [4] [3] [1] [2] ___|
+ public void testLayout7KeyMax7R2() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2);
+ assertEquals("7 key max 7 R2 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 R2 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 R2 left", 5, params.mLeftKeys);
+ assertEquals("7 key max 7 R2 right", 2, params.mRightKeys);
+ assertEquals("7 key max 7 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key max 7 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key max 7 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("7 key max 7 R2 [5]", -3, params.getColumnPos(4));
+ assertEquals("7 key max 7 R2 [6]", -4, params.getColumnPos(5));
+ assertEquals("7 key max 7 R2 [7]", -5, params.getColumnPos(6));
+ assertEquals("7 key max 7 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 R2 default", WIDTH * 5, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [7] [6] [5] [4] [3] [2] [1] ___|
+ public void testLayout7KeyMax7R1() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1);
+ assertEquals("7 key max 7 R1 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 R1 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 R1 left", 6, params.mLeftKeys);
+ assertEquals("7 key max 7 R1 right", 1, params.mRightKeys);
+ assertEquals("7 key max 7 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("7 key max 7 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("7 key max 7 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("7 key max 7 R1 [5]", -4, params.getColumnPos(4));
+ assertEquals("7 key max 7 R1 [6]", -5, params.getColumnPos(5));
+ assertEquals("7 key max 7 R1 [7]", -6, params.getColumnPos(6));
+ assertEquals("7 key max 7 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 R1 default", WIDTH * 6, params.getDefaultKeyCoordX());
+ }
+
+ // |___ ___ [7] [6] [5] [4] [3] [2] [1]|
+ public void testLayout7KeyMax7R0() {
+ MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0);
+ assertEquals("7 key max 7 R0 columns", 7, params.mNumColumns);
+ assertEquals("7 key max 7 R0 rows", 1, params.mNumRows);
+ assertEquals("7 key max 7 R0 left", 6, params.mLeftKeys);
+ assertEquals("7 key max 7 R0 right", 1, params.mRightKeys);
+ assertEquals("7 key max 7 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key max 7 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("7 key max 7 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("7 key max 7 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("7 key max 7 R0 [5]", -4, params.getColumnPos(4));
+ assertEquals("7 key max 7 R0 [6]", -5, params.getColumnPos(5));
+ assertEquals("7 key max 7 R0 [7]", -6, params.getColumnPos(6));
+ assertEquals("7 key max 7 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("7 key max 7 R0 default", WIDTH * 6, params.getDefaultKeyCoordX());
+ }
+
+ // [7] [5] [6] [8]
+ // [3] [1] [2] [4]
+ public void testLayout8KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0);
+ assertEquals("8 key max 5 M0 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 M0 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 M0 left", 1, params.mLeftKeys);
+ assertEquals("8 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("8 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("8 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("8 key max 5 M0 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 M0 [6]", 1, params.getColumnPos(5));
+ assertEquals("8 key max 5 M0 [7]", -1, params.getColumnPos(6));
+ assertEquals("8 key max 5 M0 [8]", 2, params.getColumnPos(7));
+ assertEquals("8 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // |[5] [6] [7] [8]
+ // |[1] [2] [3] [4]
+ public void testLayout8KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0);
+ assertEquals("8 key max 5 L0 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 L0 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("8 key max 5 L0 right", 4, params.mRightKeys);
+ assertEquals("8 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("8 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("8 key max 5 L0 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 L0 [6]", 1, params.getColumnPos(5));
+ assertEquals("8 key max 5 L0 [7]", 2, params.getColumnPos(6));
+ assertEquals("8 key max 5 L0 [8]", 3, params.getColumnPos(7));
+ assertEquals("8 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [5] [6] [7] [8]
+ // |___ [1] [2] [3] [4]
+ public void testLayout8KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1);
+ assertEquals("8 key max 5 L1 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 L1 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("8 key max 5 L1 right", 4, params.mRightKeys);
+ assertEquals("8 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("8 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("8 key max 5 L1 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 L1 [6]", 1, params.getColumnPos(5));
+ assertEquals("8 key max 5 L1 [7]", 2, params.getColumnPos(6));
+ assertEquals("8 key max 5 L1 [8]", 3, params.getColumnPos(7));
+ assertEquals("8 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [7] [5] [6] [8]
+ // |___ [3] [1] [2] [4]
+ public void testLayout8KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2);
+ assertEquals("8 key max 5 L2 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 L2 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("8 key max 5 L2 right", 3, params.mRightKeys);
+ assertEquals("8 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("8 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("8 key max 5 L2 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 L2 [6]", 1, params.getColumnPos(5));
+ assertEquals("8 key max 5 L2 [7]", -1, params.getColumnPos(6));
+ assertEquals("8 key max 5 L2 [8]", 2, params.getColumnPos(7));
+ assertEquals("8 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [7] [6] [5]|
+ // [4] [3] [2] [1]|
+ public void testLayout8KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0);
+ assertEquals("8 key max 5 R0 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 R0 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 R0 left", 3, params.mLeftKeys);
+ assertEquals("8 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("8 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("8 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("8 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("8 key max 5 R0 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 R0 [6]", -1, params.getColumnPos(5));
+ assertEquals("8 key max 5 R0 [7]", -2, params.getColumnPos(6));
+ assertEquals("8 key max 5 R0 [8]", -3, params.getColumnPos(7));
+ assertEquals("8 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [7] [6] [5] ___|
+ // [4] [3] [2] [1] ___|
+ public void testLayout8KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1);
+ assertEquals("8 key max 5 R1 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 R1 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 R1 left", 3, params.mLeftKeys);
+ assertEquals("8 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("8 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("8 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("8 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("8 key max 5 R1 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 R1 [6]", -1, params.getColumnPos(5));
+ assertEquals("8 key max 5 R1 [7]", -2, params.getColumnPos(6));
+ assertEquals("8 key max 5 R1 [8]", -3, params.getColumnPos(7));
+ assertEquals("8 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [7] [5] [6] ___|
+ // [4] [3] [1] [2] ___|
+ public void testLayout8KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2);
+ assertEquals("8 key max 5 R2 columns", 4, params.mNumColumns);
+ assertEquals("8 key max 5 R2 rows", 2, params.mNumRows);
+ assertEquals("8 key max 5 R2 left", 2, params.mLeftKeys);
+ assertEquals("8 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("8 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("8 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("8 key max 5 R2 [5]", 0, params.getColumnPos(4));
+ assertEquals("8 key max 5 R2 [6]", 1, params.getColumnPos(5));
+ assertEquals("8 key max 5 R2 [7]", -1, params.getColumnPos(6));
+ assertEquals("8 key max 5 R2 [8]", -2, params.getColumnPos(7));
+ assertEquals("8 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("8 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [6] [7] [9]
+ // [5] [3] [1] [2] [4]
+ public void testLayout9KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0);
+ assertEquals("9 key max 5 M0 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 M0 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 M0 left", 2, params.mLeftKeys);
+ assertEquals("9 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("9 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("9 key max 5 M0 [5]", -2, params.getColumnPos(4));
+ assertEquals("9 key max 5 M0 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 M0 [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key max 5 M0 [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key max 5 M0 [9]", 2, params.getColumnPos(8));
+ assertEquals("9 key max 5 M0 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // | [6] [7] [8] [9]
+ // |[1] [2] [3] [4] [5]
+ public void testLayout9KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0);
+ assertEquals("9 key max 5 L0 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 L0 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("9 key max 5 L0 right", 5, params.mRightKeys);
+ assertEquals("9 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("9 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("9 key max 5 L0 [5]", 4, params.getColumnPos(4));
+ assertEquals("9 key max 5 L0 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 L0 [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key max 5 L0 [8]", 2, params.getColumnPos(7));
+ assertEquals("9 key max 5 L0 [9]", 3, params.getColumnPos(8));
+ assertEquals("9 key max 5 L0 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [6] [7] [8] [9]
+ // |___ [1] [2] [3] [4] [5]
+ public void testLayout9KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1);
+ assertEquals("9 key max 5 L1 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 L1 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("9 key max 5 L1 right", 5, params.mRightKeys);
+ assertEquals("9 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("9 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("9 key max 5 L1 [5]", 4, params.getColumnPos(4));
+ assertEquals("9 key max 5 L1 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 L1 [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key max 5 L1 [8]", 2, params.getColumnPos(7));
+ assertEquals("9 key max 5 L1 [9]", 3, params.getColumnPos(8));
+ assertEquals("9 key max 5 L1 adjust",1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [8] [6] [7] [9]
+ // |___ [3] [1] [2] [4] [5]
+ public void testLayout9KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2);
+ assertEquals("9 key max 5 L2 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 L2 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("9 key max 5 L2 right", 4, params.mRightKeys);
+ assertEquals("9 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("9 key max 5 L2 [5]", 3, params.getColumnPos(4));
+ assertEquals("9 key max 5 L2 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 L2 [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key max 5 L2 [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key max 5 L2 [9]", 2, params.getColumnPos(8));
+ assertEquals("9 key max 5 L2 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [9] [8] [7] [6] |
+ // [5] [4] [3] [2] [1]|
+ public void testLayout9KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0);
+ assertEquals("9 key max 5 R0 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 R0 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 R0 left", 4, params.mLeftKeys);
+ assertEquals("9 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("9 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("9 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("9 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("9 key max 5 R0 [5]", -4, params.getColumnPos(4));
+ assertEquals("9 key max 5 R0 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 R0 [7]", -1, params.getColumnPos(6));
+ assertEquals("9 key max 5 R0 [8]", -2, params.getColumnPos(7));
+ assertEquals("9 key max 5 R0 [9]", -3, params.getColumnPos(8));
+ assertEquals("9 key max 5 R0 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [9] [8] [7] [6] ___|
+ // [5] [4] [3] [2] [1] ___|
+ public void testLayout9KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1);
+ assertEquals("9 key max 5 R1 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 R1 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 R1 left", 4, params.mLeftKeys);
+ assertEquals("9 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("9 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("9 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("9 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("9 key max 5 R1 [5]", -4, params.getColumnPos(4));
+ assertEquals("9 key max 5 R1 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 R1 [7]", -1, params.getColumnPos(6));
+ assertEquals("9 key max 5 R1 [8]", -2, params.getColumnPos(7));
+ assertEquals("9 key max 5 R1 [9]", -3, params.getColumnPos(8));
+ assertEquals("9 key max 5 R1 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [9] [8] [6] [7] ___|
+ // [5] [4] [3] [1] [2] ___|
+ public void testLayout9KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2);
+ assertEquals("9 key max 5 R2 columns", 5, params.mNumColumns);
+ assertEquals("9 key max 5 R2 rows", 2, params.mNumRows);
+ assertEquals("9 key max 5 R2 left", 3, params.mLeftKeys);
+ assertEquals("9 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("9 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("9 key max 5 R2 [5]", -3, params.getColumnPos(4));
+ assertEquals("9 key max 5 R2 [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key max 5 R2 [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key max 5 R2 [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key max 5 R2 [9]", -2, params.getColumnPos(8));
+ assertEquals("9 key max 5 R2 adjust", -1, params.mTopRowAdjustment);
+ assertEquals("9 key max 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [A] [8] [6] [7] [9]
+ // [5] [3] [1] [2] [4]
+ public void testLayout10KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0);
+ assertEquals("10 key max 5 M0 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 M0 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 M0 left", 2, params.mLeftKeys);
+ assertEquals("10 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("10 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("10 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("10 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("10 key max 5 M0 [5]", -2, params.getColumnPos(4));
+ assertEquals("10 key max 5 M0 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 M0 [7]", 1, params.getColumnPos(6));
+ assertEquals("10 key max 5 M0 [8]", -1, params.getColumnPos(7));
+ assertEquals("10 key max 5 M0 [9]", 2, params.getColumnPos(8));
+ assertEquals("10 key max 5 M0 [A]", -2, params.getColumnPos(9));
+ assertEquals("10 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // |[6] [7] [8] [9] [A]
+ // |[1] [2] [3] [4] [5]
+ public void testLayout10KeyMax5L0() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0);
+ assertEquals("10 key max 5 L0 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 L0 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 L0 left", 0, params.mLeftKeys);
+ assertEquals("10 key max 5 L0 right", 5, params.mRightKeys);
+ assertEquals("10 key max 5 L0 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 L0 [2]", 1, params.getColumnPos(1));
+ assertEquals("10 key max 5 L0 [3]", 2, params.getColumnPos(2));
+ assertEquals("10 key max 5 L0 [4]", 3, params.getColumnPos(3));
+ assertEquals("10 key max 5 L0 [5]", 4, params.getColumnPos(4));
+ assertEquals("10 key max 5 L0 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 L0 [7]", 1, params.getColumnPos(6));
+ assertEquals("10 key max 5 L0 [8]", 2, params.getColumnPos(7));
+ assertEquals("10 key max 5 L0 [9]", 3, params.getColumnPos(8));
+ assertEquals("10 key max 5 L0 [A]", 4, params.getColumnPos(9));
+ assertEquals("10 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [6] [7] [8] [9] [A]
+ // |___ [1] [2] [3] [4] [5]
+ public void testLayout10KeyMax5L1() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1);
+ assertEquals("10 key max 5 L1 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 L1 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 L1 left", 0, params.mLeftKeys);
+ assertEquals("10 key max 5 L1 right", 5, params.mRightKeys);
+ assertEquals("10 key max 5 L1 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 L1 [2]", 1, params.getColumnPos(1));
+ assertEquals("10 key max 5 L1 [3]", 2, params.getColumnPos(2));
+ assertEquals("10 key max 5 L1 [4]", 3, params.getColumnPos(3));
+ assertEquals("10 key max 5 L1 [5]", 4, params.getColumnPos(4));
+ assertEquals("10 key max 5 L1 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 L1 [7]", 1, params.getColumnPos(6));
+ assertEquals("10 key max 5 L1 [8]", 2, params.getColumnPos(7));
+ assertEquals("10 key max 5 L1 [9]", 3, params.getColumnPos(8));
+ assertEquals("10 key max 5 L1 [A]", 4, params.getColumnPos(9));
+ assertEquals("10 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+ }
+
+ // |___ [8] [6] [7] [9] [A]
+ // |___ [3] [1] [2] [4] [5]
+ public void testLayout10KeyMax5L2() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2);
+ assertEquals("10 key max 5 L2 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 L2 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 L2 left", 1, params.mLeftKeys);
+ assertEquals("10 key max 5 L2 right", 4, params.mRightKeys);
+ assertEquals("10 key max 5 L2 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 L2 [2]", 1, params.getColumnPos(1));
+ assertEquals("10 key max 5 L2 [3]", -1, params.getColumnPos(2));
+ assertEquals("10 key max 5 L2 [4]", 2, params.getColumnPos(3));
+ assertEquals("10 key max 5 L2 [5]", 3, params.getColumnPos(4));
+ assertEquals("10 key max 5 L2 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 L2 [7]", 1, params.getColumnPos(6));
+ assertEquals("10 key max 5 L2 [8]", -1, params.getColumnPos(7));
+ assertEquals("10 key max 5 L2 [9]", 2, params.getColumnPos(8));
+ assertEquals("10 key max 5 L2 [A]", 3, params.getColumnPos(9));
+ assertEquals("10 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [A] [9] [8] [7] [6]|
+ // [5] [4] [3] [2] [1]|
+ public void testLayout10KeyMax5R0() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0);
+ assertEquals("10 key max 5 R0 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 R0 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 R0 left", 4, params.mLeftKeys);
+ assertEquals("10 key max 5 R0 right", 1, params.mRightKeys);
+ assertEquals("10 key max 5 R0 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 R0 [2]", -1, params.getColumnPos(1));
+ assertEquals("10 key max 5 R0 [3]", -2, params.getColumnPos(2));
+ assertEquals("10 key max 5 R0 [4]", -3, params.getColumnPos(3));
+ assertEquals("10 key max 5 R0 [5]", -4, params.getColumnPos(4));
+ assertEquals("10 key max 5 R0 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 R0 [7]", -1, params.getColumnPos(6));
+ assertEquals("10 key max 5 R0 [8]", -2, params.getColumnPos(7));
+ assertEquals("10 key max 5 R0 [9]", -3, params.getColumnPos(8));
+ assertEquals("10 key max 5 R0 [A]", -4, params.getColumnPos(9));
+ assertEquals("10 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [A] [9] [8] [7] [6] ___|
+ // [5] [4] [3] [2] [1] ___|
+ public void testLayout10KeyMax5R1() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1);
+ assertEquals("10 key max 5 R1 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 R1 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 R1 left", 4, params.mLeftKeys);
+ assertEquals("10 key max 5 R1 right", 1, params.mRightKeys);
+ assertEquals("10 key max 5 R1 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 R1 [2]", -1, params.getColumnPos(1));
+ assertEquals("10 key max 5 R1 [3]", -2, params.getColumnPos(2));
+ assertEquals("10 key max 5 R1 [4]", -3, params.getColumnPos(3));
+ assertEquals("10 key max 5 R1 [5]", -4, params.getColumnPos(4));
+ assertEquals("10 key max 5 R1 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 R1 [7]", -1, params.getColumnPos(6));
+ assertEquals("10 key max 5 R1 [8]", -2, params.getColumnPos(7));
+ assertEquals("10 key max 5 R1 [9]", -3, params.getColumnPos(8));
+ assertEquals("10 key max 5 R1 [A]", -4, params.getColumnPos(9));
+ assertEquals("10 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // [A] [9] [8] [6] [7] ___|
+ // [5] [4] [3] [1] [2] ___|
+ public void testLayout10KeyMax5R2() {
+ MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2);
+ assertEquals("10 key max 5 R2 columns", 5, params.mNumColumns);
+ assertEquals("10 key max 5 R2 rows", 2, params.mNumRows);
+ assertEquals("10 key max 5 R2 left", 3, params.mLeftKeys);
+ assertEquals("10 key max 5 R2 right", 2, params.mRightKeys);
+ assertEquals("10 key max 5 R2 [1]", 0, params.getColumnPos(0));
+ assertEquals("10 key max 5 R2 [2]", 1, params.getColumnPos(1));
+ assertEquals("10 key max 5 R2 [3]", -1, params.getColumnPos(2));
+ assertEquals("10 key max 5 R2 [4]", -2, params.getColumnPos(3));
+ assertEquals("10 key max 5 R2 [5]", -3, params.getColumnPos(4));
+ assertEquals("10 key max 5 R2 [6]", 0, params.getColumnPos(5));
+ assertEquals("10 key max 5 R2 [7]", 1, params.getColumnPos(6));
+ assertEquals("10 key max 5 R2 [8]", -1, params.getColumnPos(7));
+ assertEquals("10 key max 5 R2 [9]", -2, params.getColumnPos(8));
+ assertEquals("10 key max 5 R2 [A]", -3, params.getColumnPos(9));
+ assertEquals("10 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("10 key max 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+
+ // [B] [9] [A]
+ // [7] [5] [6] [8]
+ // [3] [1] [2] [4]
+ public void testLayout11KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0);
+ assertEquals("11 key max 5 M0 columns", 4, params.mNumColumns);
+ assertEquals("11 key max 5 M0 rows", 3, params.mNumRows);
+ assertEquals("11 key max 5 M0 left", 1, params.mLeftKeys);
+ assertEquals("11 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("11 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("11 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("11 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("11 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("11 key max 5 M0 [5]", 0, params.getColumnPos(4));
+ assertEquals("11 key max 5 M0 [6]", 1, params.getColumnPos(5));
+ assertEquals("11 key max 5 M0 [7]", -1, params.getColumnPos(6));
+ assertEquals("11 key max 5 M0 [8]", 2, params.getColumnPos(7));
+ assertEquals("11 key max 5 M0 [9]", 0, params.getColumnPos(8));
+ assertEquals("11 key max 5 M0 [A]", 1, params.getColumnPos(9));
+ assertEquals("11 key max 5 M0 [B]", -1, params.getColumnPos(10));
+ assertEquals("11 key max 5 M0 adjust", 1, params.mTopRowAdjustment);
+ assertEquals("11 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+ // [B] [9] [A] [C]
+ // [7] [5] [6] [8]
+ // [3] [1] [2] [4]
+ public void testLayout12KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0);
+ assertEquals("12 key max 5 M0 columns", 4, params.mNumColumns);
+ assertEquals("12 key max 5 M0 rows", 3, params.mNumRows);
+ assertEquals("12 key max 5 M0 left", 1, params.mLeftKeys);
+ assertEquals("12 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("12 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("12 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("12 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("12 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("12 key max 5 M0 [5]", 0, params.getColumnPos(4));
+ assertEquals("12 key max 5 M0 [6]", 1, params.getColumnPos(5));
+ assertEquals("12 key max 5 M0 [7]", -1, params.getColumnPos(6));
+ assertEquals("12 key max 5 M0 [8]", 2, params.getColumnPos(7));
+ assertEquals("12 key max 5 M0 [9]", 0, params.getColumnPos(8));
+ assertEquals("12 key max 5 M0 [A]", 1, params.getColumnPos(9));
+ assertEquals("12 key max 5 M0 [B]", -1, params.getColumnPos(10));
+ assertEquals("12 key max 5 M0 [C]", 2, params.getColumnPos(11));
+ assertEquals("12 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("12 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+ }
+
+
+ // [D] [B] [C]
+ // [A] [8] [6] [7] [9]
+ // [5] [3] [1] [2] [4]
+ public void testLayout13KeyMax5M0() {
+ MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0);
+ assertEquals("13 key max 5 M0 columns", 5, params.mNumColumns);
+ assertEquals("13 key max 5 M0 rows", 3, params.mNumRows);
+ assertEquals("13 key max 5 M0 left", 2, params.mLeftKeys);
+ assertEquals("13 key max 5 M0 right", 3, params.mRightKeys);
+ assertEquals("13 key max 5 M0 [1]", 0, params.getColumnPos(0));
+ assertEquals("13 key max 5 M0 [2]", 1, params.getColumnPos(1));
+ assertEquals("13 key max 5 M0 [3]", -1, params.getColumnPos(2));
+ assertEquals("13 key max 5 M0 [4]", 2, params.getColumnPos(3));
+ assertEquals("13 key max 5 M0 [5]", -2, params.getColumnPos(4));
+ assertEquals("13 key max 5 M0 [6]", 0, params.getColumnPos(5));
+ assertEquals("13 key max 5 M0 [7]", 1, params.getColumnPos(6));
+ assertEquals("13 key max 5 M0 [8]", -1, params.getColumnPos(7));
+ assertEquals("13 key max 5 M0 [9]", 2, params.getColumnPos(8));
+ assertEquals("13 key max 5 M0 [A]", -2, params.getColumnPos(9));
+ assertEquals("13 key max 5 M0 [B]", 0, params.getColumnPos(10));
+ assertEquals("13 key max 5 M0 [C]", 1, params.getColumnPos(11));
+ assertEquals("13 key max 5 M0 [D]", -1, params.getColumnPos(12));
+ assertEquals("13 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+ assertEquals("13 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java
new file mode 100644
index 000000000..e090031e4
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserCsvTests.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.content.res.Resources;
+import android.test.AndroidTestCase;
+import android.text.TextUtils;
+
+import com.android.inputmethod.latin.tests.R;
+
+import java.util.Arrays;
+
+public class KeySpecParserCsvTests extends AndroidTestCase {
+ private Resources mTestResources;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mTestResources = getTestContext().getResources();
+ }
+
+ private static String format(String message, Object expected, Object actual) {
+ return message + " expected:<" + expected + "> but was:<" + actual + ">";
+ }
+
+ private void assertTextArray(String message, String value, String ... expected) {
+ final String actual[] = KeySpecParser.parseCsvString(value, mTestResources,
+ R.string.empty_string);
+ if (expected.length == 0) {
+ assertNull(message + ": expected=null actual=" + Arrays.toString(actual),
+ actual);
+ return;
+ }
+ assertEquals(message + ": expected=" + Arrays.toString(expected)
+ + " actual=" + Arrays.toString(actual)
+ + ": result length", expected.length, actual.length);
+ for (int i = 0; i < actual.length; i++) {
+ final boolean equals = TextUtils.equals(expected[i], actual[i]);
+ assertTrue(format(message + ": result at " + i + ":", expected[i], actual[i]), equals);
+ }
+ }
+
+ private void assertError(String message, String value, String ... expected) {
+ try {
+ assertTextArray(message, value, expected);
+ fail(message);
+ } catch (Exception pcpe) {
+ // success.
+ }
+ }
+
+ // \U001d11e: MUSICAL SYMBOL G CLEF
+ private static final String PAIR1 = "\ud834\udd1e";
+ // \U001d122: MUSICAL SYMBOL F CLEF
+ private static final String PAIR2 = "\ud834\udd22";
+ // \U002f8a6: CJK COMPATIBILITY IDEOGRAPH-2F8A6; variant character of \u6148.
+ private static final String PAIR3 = "\ud87e\udca6";
+ private static final String SURROGATE1 = PAIR1 + PAIR2;
+ private static final String SURROGATE2 = PAIR1 + PAIR2 + PAIR3;
+
+ public void testParseCsvTextZero() {
+ assertTextArray("Empty string", "");
+ assertTextArray("Empty entry", ",");
+ assertTextArray("Empty entry at beginning", ",a", "a");
+ assertTextArray("Empty entry at end", "a,", "a");
+ assertTextArray("Empty entry at middle", "a,,b", "a", "b");
+ assertTextArray("Empty entries with escape", ",a,b\\,c,,d,", "a", "b\\,c", "d");
+ }
+
+ public void testParseCsvTextSingle() {
+ assertTextArray("Single char", "a", "a");
+ assertTextArray("Surrogate pair", PAIR1, PAIR1);
+ assertTextArray("Single escape", "\\", "\\");
+ assertTextArray("Space", " ", " ");
+ assertTextArray("Single label", "abc", "abc");
+ assertTextArray("Single surrogate pairs label", SURROGATE2, SURROGATE2);
+ assertTextArray("Spaces", " ", " ");
+ assertTextArray("Spaces in label", "a b c", "a b c");
+ assertTextArray("Spaces at beginning of label", " abc", " abc");
+ assertTextArray("Spaces at end of label", "abc ", "abc ");
+ assertTextArray("Label surrounded by spaces", " abc ", " abc ");
+ assertTextArray("Surrogate pair surrounded by space",
+ " " + PAIR1 + " ",
+ " " + PAIR1 + " ");
+ assertTextArray("Surrogate pair within characters",
+ "ab" + PAIR2 + "cd",
+ "ab" + PAIR2 + "cd");
+ assertTextArray("Surrogate pairs within characters",
+ "ab" + SURROGATE1 + "cd",
+ "ab" + SURROGATE1 + "cd");
+
+ assertTextArray("Incomplete resource reference 1", "string", "string");
+ assertTextArray("Incomplete resource reference 2", "@string", "@string");
+ assertTextArray("Incomplete resource reference 3", "string/", "string/");
+ assertTextArray("Incomplete resource reference 4", "@" + SURROGATE2, "@" + SURROGATE2);
+ }
+
+ public void testParseCsvTextSingleEscaped() {
+ assertTextArray("Escaped char", "\\a", "\\a");
+ assertTextArray("Escaped surrogate pair", "\\" + PAIR1, "\\" + PAIR1);
+ assertTextArray("Escaped comma", "\\,", "\\,");
+ assertTextArray("Escaped comma escape", "a\\,\\", "a\\,\\");
+ assertTextArray("Escaped escape", "\\\\", "\\\\");
+ assertTextArray("Escaped label", "a\\bc", "a\\bc");
+ assertTextArray("Escaped surrogate", "a\\" + PAIR1 + "c", "a\\" + PAIR1 + "c");
+ assertTextArray("Escaped label at beginning", "\\abc", "\\abc");
+ assertTextArray("Escaped surrogate at beginning", "\\" + SURROGATE2, "\\" + SURROGATE2);
+ assertTextArray("Escaped label at end", "abc\\", "abc\\");
+ assertTextArray("Escaped surrogate at end", SURROGATE2 + "\\", SURROGATE2 + "\\");
+ assertTextArray("Escaped label with comma", "a\\,c", "a\\,c");
+ assertTextArray("Escaped surrogate with comma",
+ PAIR1 + "\\," + PAIR2, PAIR1 + "\\," + PAIR2);
+ assertTextArray("Escaped label with comma at beginning", "\\,bc", "\\,bc");
+ assertTextArray("Escaped surrogate with comma at beginning",
+ "\\," + SURROGATE1, "\\," + SURROGATE1);
+ assertTextArray("Escaped label with comma at end", "ab\\,", "ab\\,");
+ assertTextArray("Escaped surrogate with comma at end",
+ SURROGATE2 + "\\,", SURROGATE2 + "\\,");
+ assertTextArray("Escaped label with successive", "\\,\\\\bc", "\\,\\\\bc");
+ assertTextArray("Escaped surrogate with successive",
+ "\\,\\\\" + SURROGATE1, "\\,\\\\" + SURROGATE1);
+ assertTextArray("Escaped label with escape", "a\\\\c", "a\\\\c");
+ assertTextArray("Escaped surrogate with escape",
+ PAIR1 + "\\\\" + PAIR2, PAIR1 + "\\\\" + PAIR2);
+
+ assertTextArray("Escaped @string", "\\@string", "\\@string");
+ assertTextArray("Escaped @string/", "\\@string/", "\\@string/");
+ assertTextArray("Escaped @string/", "\\@string/empty_string", "\\@string/empty_string");
+ }
+
+ public void testParseCsvTextMulti() {
+ assertTextArray("Multiple chars", "a,b,c", "a", "b", "c");
+ assertTextArray("Multiple chars", "a,b,\\c", "a", "b", "\\c");
+ assertTextArray("Multiple chars and escape at beginning and end",
+ "\\a,b,\\c\\", "\\a", "b", "\\c\\");
+ assertTextArray("Multiple surrogates", PAIR1 + "," + PAIR2 + "," + PAIR3,
+ PAIR1, PAIR2, PAIR3);
+ assertTextArray("Multiple chars surrounded by spaces", " a , b , c ", " a ", " b ", " c ");
+ assertTextArray("Multiple labels", "abc,def,ghi", "abc", "def", "ghi");
+ assertTextArray("Multiple surrogated", SURROGATE1 + "," + SURROGATE2,
+ SURROGATE1, SURROGATE2);
+ assertTextArray("Multiple labels surrounded by spaces", " abc , def , ghi ",
+ " abc ", " def ", " ghi ");
+ }
+
+ public void testParseCsvTextMultiEscaped() {
+ assertTextArray("Multiple chars with comma", "a,\\,,c", "a", "\\,", "c");
+ assertTextArray("Multiple chars with comma surrounded by spaces", " a , \\, , c ",
+ " a ", " \\, ", " c ");
+ assertTextArray("Multiple labels with escape",
+ "\\abc,d\\ef,gh\\i", "\\abc", "d\\ef", "gh\\i");
+ assertTextArray("Multiple labels with escape surrounded by spaces",
+ " \\abc , d\\ef , gh\\i ", " \\abc ", " d\\ef ", " gh\\i ");
+ assertTextArray("Multiple labels with comma and escape",
+ "ab\\\\,d\\\\\\,,g\\,i", "ab\\\\", "d\\\\\\,", "g\\,i");
+ assertTextArray("Multiple labels with comma and escape surrounded by spaces",
+ " ab\\\\ , d\\\\\\, , g\\,i ", " ab\\\\ ", " d\\\\\\, ", " g\\,i ");
+
+ assertTextArray("Multiple escaped @string", "\\@,\\@string/empty_string",
+ "\\@", "\\@string/empty_string");
+ }
+
+ public void testParseCsvResourceError() {
+ assertError("Incomplete resource name", "@string/", "@string/");
+ assertError("Non existing resource", "@string/non_existing");
+ }
+
+ public void testParseCsvResourceZero() {
+ assertTextArray("Empty string",
+ "@string/empty_string");
+ }
+
+ public void testParseCsvResourceSingle() {
+ assertTextArray("Single char",
+ "@string/single_char", "a");
+ assertTextArray("Space",
+ "@string/space", " ");
+ assertTextArray("Single label",
+ "@string/single_label", "abc");
+ assertTextArray("Spaces",
+ "@string/spaces", " ");
+ assertTextArray("Spaces in label",
+ "@string/spaces_in_label", "a b c");
+ assertTextArray("Spaces at beginning of label",
+ "@string/spaces_at_beginning_of_label", " abc");
+ assertTextArray("Spaces at end of label",
+ "@string/spaces_at_end_of_label", "abc ");
+ assertTextArray("label surrounded by spaces",
+ "@string/label_surrounded_by_spaces", " abc ");
+
+ assertTextArray("Escape and single char",
+ "\\\\@string/single_char", "\\\\a");
+ }
+
+ public void testParseCsvResourceSingleEscaped() {
+ assertTextArray("Escaped char",
+ "@string/escaped_char", "\\a");
+ assertTextArray("Escaped comma",
+ "@string/escaped_comma", "\\,");
+ assertTextArray("Escaped comma escape",
+ "@string/escaped_comma_escape", "a\\,\\");
+ assertTextArray("Escaped escape",
+ "@string/escaped_escape", "\\\\");
+ assertTextArray("Escaped label",
+ "@string/escaped_label", "a\\bc");
+ assertTextArray("Escaped label at beginning",
+ "@string/escaped_label_at_beginning", "\\abc");
+ assertTextArray("Escaped label at end",
+ "@string/escaped_label_at_end", "abc\\");
+ assertTextArray("Escaped label with comma",
+ "@string/escaped_label_with_comma", "a\\,c");
+ assertTextArray("Escaped label with comma at beginning",
+ "@string/escaped_label_with_comma_at_beginning", "\\,bc");
+ assertTextArray("Escaped label with comma at end",
+ "@string/escaped_label_with_comma_at_end", "ab\\,");
+ assertTextArray("Escaped label with successive",
+ "@string/escaped_label_with_successive", "\\,\\\\bc");
+ assertTextArray("Escaped label with escape",
+ "@string/escaped_label_with_escape", "a\\\\c");
+ }
+
+ public void testParseCsvResourceMulti() {
+ assertTextArray("Multiple chars",
+ "@string/multiple_chars", "a", "b", "c");
+ assertTextArray("Multiple chars surrounded by spaces",
+ "@string/multiple_chars_surrounded_by_spaces",
+ " a ", " b ", " c ");
+ assertTextArray("Multiple labels",
+ "@string/multiple_labels", "abc", "def", "ghi");
+ assertTextArray("Multiple labels surrounded by spaces",
+ "@string/multiple_labels_surrounded_by_spaces", " abc ", " def ", " ghi ");
+ }
+
+ public void testParseCsvResourcetMultiEscaped() {
+ assertTextArray("Multiple chars with comma",
+ "@string/multiple_chars_with_comma",
+ "a", "\\,", "c");
+ assertTextArray("Multiple chars with comma surrounded by spaces",
+ "@string/multiple_chars_with_comma_surrounded_by_spaces",
+ " a ", " \\, ", " c ");
+ assertTextArray("Multiple labels with escape",
+ "@string/multiple_labels_with_escape",
+ "\\abc", "d\\ef", "gh\\i");
+ assertTextArray("Multiple labels with escape surrounded by spaces",
+ "@string/multiple_labels_with_escape_surrounded_by_spaces",
+ " \\abc ", " d\\ef ", " gh\\i ");
+ assertTextArray("Multiple labels with comma and escape",
+ "@string/multiple_labels_with_comma_and_escape",
+ "ab\\\\", "d\\\\\\,", "g\\,i");
+ assertTextArray("Multiple labels with comma and escape surrounded by spaces",
+ "@string/multiple_labels_with_comma_and_escape_surrounded_by_spaces",
+ " ab\\\\ ", " d\\\\\\, ", " g\\,i ");
+ }
+
+ public void testParseMultipleResources() {
+ assertTextArray("Literals and resources",
+ "1,@string/multiple_chars,z", "1", "a", "b", "c", "z");
+ assertTextArray("Literals and resources and escape at end",
+ "\\1,@string/multiple_chars,z\\", "\\1", "a", "b", "c", "z\\");
+ assertTextArray("Multiple single resource chars and labels",
+ "@string/single_char,@string/single_label,@string/escaped_comma",
+ "a", "abc", "\\,");
+ assertTextArray("Multiple single resource chars and labels 2",
+ "@string/single_char,@string/single_label,@string/escaped_comma_escape",
+ "a", "abc", "a\\,\\");
+ assertTextArray("Multiple multiple resource chars and labels",
+ "@string/multiple_chars,@string/multiple_labels,@string/multiple_chars_with_comma",
+ "a", "b", "c", "abc", "def", "ghi", "a", "\\,", "c");
+ assertTextArray("Concatenated resources",
+ "@string/multiple_chars@string/multiple_labels@string/multiple_chars_with_comma",
+ "a", "b", "cabc", "def", "ghia", "\\,", "c");
+ assertTextArray("Concatenated resource and literal",
+ "abc@string/multiple_labels",
+ "abcabc", "def", "ghi");
+ }
+
+ public void testParseIndirectReference() {
+ assertTextArray("Indirect",
+ "@string/indirect_string", "a", "b", "c");
+ assertTextArray("Indirect with literal",
+ "1,@string/indirect_string_with_literal,2", "1", "x", "a", "b", "c", "y", "2");
+ }
+
+ public void testParseInfiniteIndirectReference() {
+ assertError("Infinite indirection",
+ "1,@string/infinite_indirection,2", "1", "infinite", "<infinite>", "loop", "2");
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
new file mode 100644
index 000000000..07f5848b2
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java
@@ -0,0 +1,469 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.content.res.Resources;
+import android.test.AndroidTestCase;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.latin.R;
+
+import java.util.Arrays;
+
+public class KeySpecParserTests extends AndroidTestCase {
+ private Resources mRes;
+
+ private static final int ICON_UNDEFINED = KeyboardIconsSet.ICON_UNDEFINED;
+
+ private static final String CODE_SETTINGS_RES = "integer/key_settings";
+ private static final String ICON_SETTINGS_NAME = "settingsKey";
+
+ private static final String CODE_SETTINGS = "@" + CODE_SETTINGS_RES;
+ private static final String ICON_SETTINGS = "@icon/" + ICON_SETTINGS_NAME;
+ private static final String CODE_NON_EXISTING = "@integer/non_existing";
+ private static final String ICON_NON_EXISTING = "@icon/non_existing";
+
+ private int mCodeSettings;
+ private int mSettingsIconId;
+
+ @Override
+ protected void setUp() {
+ Resources res = getContext().getResources();
+ mRes = res;
+
+ final String packageName = res.getResourcePackageName(R.string.english_ime_name);
+ final int codeId = res.getIdentifier(CODE_SETTINGS_RES, null, packageName);
+ mCodeSettings = res.getInteger(codeId);
+ mSettingsIconId = KeyboardIconsSet.getIconId(ICON_SETTINGS_NAME);
+ }
+
+ private void assertParser(String message, String moreKeySpec, String expectedLabel,
+ String expectedOutputText, int expectedIcon, int expectedCode) {
+ String actualLabel = KeySpecParser.getLabel(moreKeySpec);
+ assertEquals(message + ": label:", expectedLabel, actualLabel);
+
+ String actualOutputText = KeySpecParser.getOutputText(moreKeySpec);
+ assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
+
+ int actualIcon = KeySpecParser.getIconId(moreKeySpec);
+ assertEquals(message + ": icon:", expectedIcon, actualIcon);
+
+ int actualCode = KeySpecParser.getCode(mRes, moreKeySpec);
+ assertEquals(message + ": codes value:", expectedCode, actualCode);
+ }
+
+ private void assertParserError(String message, String moreKeySpec, String expectedLabel,
+ String expectedOutputText, int expectedIcon, int expectedCode) {
+ try {
+ assertParser(message, moreKeySpec, expectedLabel, expectedOutputText, expectedIcon,
+ expectedCode);
+ fail(message);
+ } catch (Exception pcpe) {
+ // success.
+ }
+ }
+
+ // \U001d11e: MUSICAL SYMBOL G CLEF
+ private static final String PAIR1 = "\ud834\udd1e";
+ private static final int CODE1 = PAIR1.codePointAt(0);
+ // \U001d122: MUSICAL SYMBOL F CLEF
+ private static final String PAIR2 = "\ud834\udd22";
+ private static final int CODE2 = PAIR2.codePointAt(0);
+ // \U002f8a6: CJK COMPATIBILITY IDEOGRAPH-2F8A6; variant character of \u6148.
+ private static final String PAIR3 = "\ud87e\udca6";
+ private static final String SURROGATE1 = PAIR1 + PAIR2;
+ private static final String SURROGATE2 = PAIR1 + PAIR2 + PAIR3;
+
+ public void testSingleLetter() {
+ assertParser("Single letter", "a",
+ "a", null, ICON_UNDEFINED, 'a');
+ assertParser("Single surrogate", PAIR1,
+ PAIR1, null, ICON_UNDEFINED, CODE1);
+ assertParser("Single escaped bar", "\\|",
+ "|", null, ICON_UNDEFINED, '|');
+ assertParser("Single escaped escape", "\\\\",
+ "\\", null, ICON_UNDEFINED, '\\');
+ assertParser("Single comma", ",",
+ ",", null, ICON_UNDEFINED, ',');
+ assertParser("Single escaped comma", "\\,",
+ ",", null, ICON_UNDEFINED, ',');
+ assertParser("Single escaped letter", "\\a",
+ "a", null, ICON_UNDEFINED, 'a');
+ assertParser("Single escaped surrogate", "\\" + PAIR2,
+ PAIR2, null, ICON_UNDEFINED, CODE2);
+ assertParser("Single at", "@",
+ "@", null, ICON_UNDEFINED, '@');
+ assertParser("Single escaped at", "\\@",
+ "@", null, ICON_UNDEFINED, '@');
+ assertParser("Single output text letter", "a|a",
+ "a", null, ICON_UNDEFINED, 'a');
+ assertParser("Single surrogate pair outputText", "G Clef|" + PAIR1,
+ "G Clef", null, ICON_UNDEFINED, CODE1);
+ assertParser("Single letter with outputText", "a|abc",
+ "a", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with surrogate outputText", "a|" + SURROGATE1,
+ "a", SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single surrogate with outputText", PAIR3 + "|abc",
+ PAIR3, "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with escaped outputText", "a|a\\|c",
+ "a", "a|c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with escaped surrogate outputText",
+ "a|" + PAIR1 + "\\|" + PAIR2,
+ "a", PAIR1 + "|" + PAIR2, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with comma outputText", "a|a,b",
+ "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with escaped comma outputText", "a|a\\,b",
+ "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with outputText starts with at", "a|@bc",
+ "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with surrogate outputText starts with at", "a|@" + SURROGATE2,
+ "a", "@" + SURROGATE2, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with outputText contains at", "a|a@c",
+ "a", "a@c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single letter with escaped at outputText", "a|\\@bc",
+ "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Single escaped escape with single outputText", "\\\\|\\\\",
+ "\\", null, ICON_UNDEFINED, '\\');
+ assertParser("Single escaped bar with single outputText", "\\||\\|",
+ "|", null, ICON_UNDEFINED, '|');
+ assertParser("Single letter with code", "a|" + CODE_SETTINGS,
+ "a", null, ICON_UNDEFINED, mCodeSettings);
+ }
+
+ public void testLabel() {
+ assertParser("Simple label", "abc",
+ "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Simple surrogate label", SURROGATE1,
+ SURROGATE1, SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped bar", "a\\|c",
+ "a|c", "a|c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Surrogate label with escaped bar", PAIR1 + "\\|" + PAIR2,
+ PAIR1 + "|" + PAIR2, PAIR1 + "|" + PAIR2,
+ ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped escape", "a\\\\c",
+ "a\\c", "a\\c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with comma", "a,c",
+ "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped comma", "a\\,c",
+ "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label starts with at", "@bc",
+ "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Surrogate label starts with at", "@" + SURROGATE1,
+ "@" + SURROGATE1, "@" + SURROGATE1, ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label contains at", "a@c",
+ "a@c", "a@c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped at", "\\@bc",
+ "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped letter", "\\abc",
+ "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with outputText", "abc|def",
+ "abc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with comma and outputText", "a,c|def",
+ "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Escaped comma label with outputText", "a\\,c|def",
+ "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Escaped label with outputText", "a\\|c|def",
+ "a|c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped bar outputText", "abc|d\\|f",
+ "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Escaped escape label with outputText", "a\\\\|def",
+ "a\\", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label starts with at and outputText", "@bc|def",
+ "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label contains at label and outputText", "a@c|def",
+ "a@c", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Escaped at label with outputText", "\\@bc|def",
+ "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with comma outputText", "abc|a,b",
+ "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped comma outputText", "abc|a\\,b",
+ "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with outputText starts with at", "abc|@bc",
+ "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with outputText contains at", "abc|a@c",
+ "abc", "a@c", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped at outputText", "abc|\\@bc",
+ "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with escaped bar outputText", "abc|d\\|f",
+ "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Escaped bar label with escaped bar outputText", "a\\|c|d\\|f",
+ "a|c", "d|f", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label with code", "abc|" + CODE_SETTINGS,
+ "abc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped label with code", "a\\|c|" + CODE_SETTINGS,
+ "a|c", null, ICON_UNDEFINED, mCodeSettings);
+ }
+
+ public void testIconAndCode() {
+ assertParser("Icon with outputText", ICON_SETTINGS + "|abc",
+ null, "abc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Icon with outputText starts with at", ICON_SETTINGS + "|@bc",
+ null, "@bc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Icon with outputText contains at", ICON_SETTINGS + "|a@c",
+ null, "a@c", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Icon with escaped at outputText", ICON_SETTINGS + "|\\@bc",
+ null, "@bc", mSettingsIconId, Keyboard.CODE_OUTPUT_TEXT);
+ assertParser("Label starts with at and code", "@bc|" + CODE_SETTINGS,
+ "@bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Label contains at and code", "a@c|" + CODE_SETTINGS,
+ "a@c", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Escaped at label with code", "\\@bc|" + CODE_SETTINGS,
+ "@bc", null, ICON_UNDEFINED, mCodeSettings);
+ assertParser("Icon with code", ICON_SETTINGS + "|" + CODE_SETTINGS,
+ null, null, mSettingsIconId, mCodeSettings);
+ }
+
+ public void testFormatError() {
+ assertParserError("Empty spec", "", null,
+ null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty label with outputText", "|a",
+ null, "a", ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty label with code", "|" + CODE_SETTINGS,
+ null, null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Empty outputText with label", "a|",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty outputText with icon", ICON_SETTINGS + "|",
+ null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Empty icon and code", "|",
+ null, null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Icon without code", ICON_SETTINGS,
+ null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Non existing icon", ICON_NON_EXISTING + "|abc",
+ null, "abc", ICON_UNDEFINED, Keyboard.CODE_OUTPUT_TEXT);
+ assertParserError("Non existing code", "abc|" + CODE_NON_EXISTING,
+ "abc", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Third bar at end", "a|b|",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar", "a|b|c",
+ "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar with label and code", "a|" + CODE_SETTINGS + "|c",
+ "a", null, ICON_UNDEFINED, mCodeSettings);
+ assertParserError("Multiple bar with icon and outputText", ICON_SETTINGS + "|b|c",
+ null, null, mSettingsIconId, Keyboard.CODE_UNSPECIFIED);
+ assertParserError("Multiple bar with icon and code",
+ ICON_SETTINGS + "|" + CODE_SETTINGS + "|c",
+ null, null, mSettingsIconId, mCodeSettings);
+ }
+
+ private static void assertMoreKeys(String message, String[] moreKeys,
+ String[] additionalMoreKeys, String[] expected) {
+ final String[] actual = KeySpecParser.insertAddtionalMoreKeys(
+ moreKeys, additionalMoreKeys);
+ if (expected == null && actual == null) {
+ return;
+ }
+ if (expected == null || actual == null) {
+ assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+ } else {
+ if (expected.length != actual.length) {
+ assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+ }
+ for (int i = 0; i < expected.length; i++) {
+ if (!actual[i].equals(expected[i])) {
+ assertEquals(message, Arrays.toString(expected), Arrays.toString(actual));
+ }
+ }
+ }
+ }
+
+ public void testInsertAdditionalMoreKeys() {
+ // Escaped marker.
+ assertMoreKeys("escaped marker",
+ new String[] { "\\%", "%-)" },
+ new String[] { "1", "2" },
+ new String[] { "1", "2", "\\%", "%-)" });
+
+ // 0 more key.
+ assertMoreKeys("null & null", null, null, null);
+ assertMoreKeys("null & 1 additional",
+ null,
+ new String[] { "1" },
+ new String[] { "1" });
+ assertMoreKeys("null & 2 additionals",
+ null,
+ new String[] { "1", "2" },
+ new String[] { "1", "2" });
+
+ // 0 additional more key.
+ assertMoreKeys("1 more key & null",
+ new String[] { "A" },
+ null,
+ new String[] { "A" });
+ assertMoreKeys("2 more keys & null",
+ new String[] { "A", "B" },
+ null,
+ new String[] { "A", "B" });
+
+ // No marker.
+ assertMoreKeys("1 more key & 1 addtional & no marker",
+ new String[] { "A" },
+ new String[] { "1" },
+ new String[] { "1", "A" });
+ assertMoreKeys("1 more key & 2 addtionals & no marker",
+ new String[] { "A" },
+ new String[] { "1", "2" },
+ new String[] { "1", "2", "A" });
+ assertMoreKeys("2 more keys & 1 addtional & no marker",
+ new String[] { "A", "B" },
+ new String[] { "1" },
+ new String[] { "1", "A", "B" });
+ assertMoreKeys("2 more keys & 2 addtionals & no marker",
+ new String[] { "A", "B" },
+ new String[] { "1", "2" },
+ new String[] { "1", "2", "A", "B" });
+
+ // 1 marker.
+ assertMoreKeys("1 more key & 1 additional & marker at head",
+ new String[] { "%", "A" },
+ new String[] { "1" },
+ new String[] { "1", "A" });
+ assertMoreKeys("1 more key & 1 additional & marker at tail",
+ new String[] { "A", "%" },
+ new String[] { "1" },
+ new String[] { "A", "1" });
+ assertMoreKeys("2 more keys & 1 additional & marker at middle",
+ new String[] { "A", "%", "B" },
+ new String[] { "1" },
+ new String[] { "A", "1", "B" });
+
+ // 1 marker & excess additional more keys.
+ assertMoreKeys("1 more key & 2 additionals & marker at head",
+ new String[] { "%", "A", "B" },
+ new String[] { "1", "2" },
+ new String[] { "1", "A", "B", "2" });
+ assertMoreKeys("1 more key & 2 additionals & marker at tail",
+ new String[] { "A", "B", "%" },
+ new String[] { "1", "2" },
+ new String[] { "A", "B", "1", "2" });
+ assertMoreKeys("2 more keys & 2 additionals & marker at middle",
+ new String[] { "A", "%", "B" },
+ new String[] { "1", "2" },
+ new String[] { "A", "1", "B", "2" });
+
+ // 2 markers.
+ assertMoreKeys("0 more key & 2 addtional & 2 markers",
+ new String[] { "%", "%" },
+ new String[] { "1", "2" },
+ new String[] { "1", "2" });
+ assertMoreKeys("1 more key & 2 addtional & 2 markers at head",
+ new String[] { "%", "%", "A" },
+ new String[] { "1", "2" },
+ new String[] { "1", "2", "A" });
+ assertMoreKeys("1 more key & 2 addtional & 2 markers at tail",
+ new String[] { "A", "%", "%" },
+ new String[] { "1", "2" },
+ new String[] { "A", "1", "2" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
+ new String[] { "A", "%", "%", "B" },
+ new String[] { "1", "2" },
+ new String[] { "A", "1", "2", "B" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
+ new String[] { "%", "A", "%", "B" },
+ new String[] { "1", "2" },
+ new String[] { "1", "A", "2", "B" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
+ new String[] { "%", "A", "B", "%" },
+ new String[] { "1", "2" },
+ new String[] { "1", "A", "B", "2" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
+ new String[] { "A", "%", "B", "%" },
+ new String[] { "1", "2" },
+ new String[] { "A", "1", "B", "2" });
+
+ // 2 markers & excess additional keys.
+ assertMoreKeys("0 more key & 2 addtional & 2 markers",
+ new String[] { "%", "%" },
+ new String[] { "1", "2", "3" },
+ new String[] { "1", "2", "3" });
+ assertMoreKeys("1 more key & 2 addtional & 2 markers at head",
+ new String[] { "%", "%", "A" },
+ new String[] { "1", "2", "3" },
+ new String[] { "1", "2", "A", "3" });
+ assertMoreKeys("1 more key & 2 addtional & 2 markers at tail",
+ new String[] { "A", "%", "%" },
+ new String[] { "1", "2", "3" },
+ new String[] { "A", "1", "2", "3" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle",
+ new String[] { "A", "%", "%", "B" },
+ new String[] { "1", "2", "3" },
+ new String[] { "A", "1", "2", "B", "3" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & middle",
+ new String[] { "%", "A", "%", "B" },
+ new String[] { "1", "2", "3" },
+ new String[] { "1", "A", "2", "B", "3" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at head & tail",
+ new String[] { "%", "A", "B", "%" },
+ new String[] { "1", "2", "3" },
+ new String[] { "1", "A", "B", "2", "3" });
+ assertMoreKeys("2 more keys & 2 addtional & 2 markers at middle & tail",
+ new String[] { "A", "%", "B", "%" },
+ new String[] { "1", "2", "3" },
+ new String[] { "A", "1", "B", "2", "3" });
+
+ // 0 addtional more key and excess markers.
+ assertMoreKeys("0 more key & null & excess marker",
+ new String[] { "%" },
+ null,
+ null);
+ assertMoreKeys("1 more key & null & excess marker at head",
+ new String[] { "%", "A" },
+ null,
+ new String[] { "A" });
+ assertMoreKeys("1 more key & null & excess marker at tail",
+ new String[] { "A", "%" },
+ null,
+ new String[] { "A" });
+ assertMoreKeys("2 more keys & null & excess marker at middle",
+ new String[] { "A", "%", "B" },
+ null,
+ new String[] { "A", "B" });
+ assertMoreKeys("2 more keys & null & excess markers",
+ new String[] { "%", "A", "%", "B", "%" },
+ null,
+ new String[] { "A", "B" });
+
+ // Excess markers.
+ assertMoreKeys("0 more key & 1 addtional & excess marker",
+ new String[] { "%", "%" },
+ new String[] { "1" },
+ new String[] { "1" });
+ assertMoreKeys("1 more key & 1 addtional & excess marker at head",
+ new String[] { "%", "%", "A" },
+ new String[] { "1" },
+ new String[] { "1", "A" });
+ assertMoreKeys("1 more key & 1 addtional & excess marker at tail",
+ new String[] { "A", "%", "%" },
+ new String[] { "1" },
+ new String[] { "A", "1" });
+ assertMoreKeys("2 more keys & 1 addtional & excess marker at middle",
+ new String[] { "A", "%", "%", "B" },
+ new String[] { "1" },
+ new String[] { "A", "1", "B" });
+ assertMoreKeys("2 more keys & 1 addtional & excess markers",
+ new String[] { "%", "A", "%", "B", "%" },
+ new String[] { "1" },
+ new String[] { "1", "A", "B" });
+ assertMoreKeys("2 more keys & 2 addtionals & excess markers",
+ new String[] { "%", "A", "%", "B", "%" },
+ new String[] { "1", "2" },
+ new String[] { "1", "A", "2", "B" });
+ assertMoreKeys("2 more keys & 3 addtionals & excess markers",
+ new String[] { "%", "A", "%", "%", "B", "%" },
+ new String[] { "1", "2", "3" },
+ new String[] { "1", "A", "2", "3", "B" });
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
deleted file mode 100644
index 4050a7123..000000000
--- a/tests/src/com/android/inputmethod/keyboard/internal/KeyStylesTests.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard.internal;
-
-import com.android.inputmethod.keyboard.internal.KeyStyles.EmptyKeyStyle;
-
-import android.test.AndroidTestCase;
-import android.text.TextUtils;
-
-public class KeyStylesTests extends AndroidTestCase {
- private static String format(String message, Object expected, Object actual) {
- return message + " expected:<" + expected + "> but was:<" + actual + ">";
- }
-
- private static void assertTextArray(String message, CharSequence value,
- CharSequence ... expected) {
- final CharSequence actual[] = EmptyKeyStyle.parseCsvText(value);
- if (expected.length == 0) {
- assertNull(message, actual);
- return;
- }
- assertSame(message + ": result length", expected.length, actual.length);
- for (int i = 0; i < actual.length; i++) {
- final boolean equals = TextUtils.equals(expected[i], actual[i]);
- assertTrue(format(message + ": result at " + i + ":", expected[i], actual[i]), equals);
- }
- }
-
- public void testParseCsvTextZero() {
- assertTextArray("Empty string", "");
- }
-
- public void testParseCsvTextSingle() {
- assertTextArray("Single char", "a", "a");
- assertTextArray("Space", " ", " ");
- assertTextArray("Single label", "abc", "abc");
- assertTextArray("Spaces", " ", " ");
- assertTextArray("Spaces in label", "a b c", "a b c");
- assertTextArray("Spaces at beginning of label", " abc", " abc");
- assertTextArray("Spaces at end of label", "abc ", "abc ");
- assertTextArray("label surrounded by spaces", " abc ", " abc ");
- }
-
- public void testParseCsvTextSingleEscaped() {
- assertTextArray("Escaped char", "\\a", "a");
- assertTextArray("Escaped comma", "\\,", ",");
- assertTextArray("Escaped escape", "\\\\", "\\");
- assertTextArray("Escaped label", "a\\bc", "abc");
- assertTextArray("Escaped label at begininng", "\\abc", "abc");
- assertTextArray("Escaped label with comma", "a\\,c", "a,c");
- assertTextArray("Escaped label with comma at beginning", "\\,bc", ",bc");
- assertTextArray("Escaped label with successive", "\\,\\\\bc", ",\\bc");
- assertTextArray("Escaped label with escape", "a\\\\c", "a\\c");
- }
-
- public void testParseCsvTextMulti() {
- assertTextArray("Multiple chars", "a,b,c", "a", "b", "c");
- assertTextArray("Multiple chars surrounded by spaces", " a , b , c ", " a ", " b ", " c ");
- assertTextArray("Multiple labels", "abc,def,ghi", "abc", "def", "ghi");
- assertTextArray("Multiple labels surrounded by spaces", " abc , def , ghi ",
- " abc ", " def ", " ghi ");
- }
-
- public void testParseCsvTextMultiEscaped() {
- assertTextArray("Multiple chars with comma", "a,\\,,c", "a", ",", "c");
- assertTextArray("Multiple chars with comma surrounded by spaces", " a , \\, , c ",
- " a ", " , ", " c ");
- assertTextArray("Multiple labels with escape", "\\abc,d\\ef,gh\\i", "abc", "def", "ghi");
- assertTextArray("Multiple labels with escape surrounded by spaces",
- " \\abc , d\\ef , gh\\i ", " abc ", " def ", " ghi ");
- assertTextArray("Multiple labels with comma and escape",
- "ab\\\\,d\\\\\\,,g\\,i", "ab\\", "d\\,", "g,i");
- assertTextArray("Multiple labels with comma and escape surrounded by spaces",
- " ab\\\\ , d\\\\\\, , g\\,i ", " ab\\ ", " d\\, ", " g,i ");
- }
-}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
new file mode 100644
index 000000000..e9f37afee
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase {
+ // Chording input in alphabet.
+ public void testChordingAlphabet() {
+ // Press shift key and hold, enter into choring shift state.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Release shift key, switch back to alphabet.
+ releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+
+ // Press "?123" key and hold, enter into choring symbols state.
+ pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "ABC" key, switch back to alphabet.
+ releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ }
+
+ // Chording input in shift locked.
+ public void testChordingShiftLocked() {
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press shift key and hold, enter into choring shift state.
+ pressKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('Z', ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCK_SHIFTED);
+ // Release shift key, switch back to alphabet shift locked.
+ releaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED);
+
+ // Press "?123" key and hold, enter into choring symbols state.
+ pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "123?" key, switch back to alphabet shift locked.
+ releaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Chording input in symbols.
+ public void testChordingSymbols() {
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Press "=\<" key and hold, enter into choring symbols shifted state.
+ pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Release "=\<" key, switch back to symbols.
+ releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+
+ // Press "ABC" key and hold, enter into choring alphabet state.
+ pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Release "ABC" key, switch back to symbols.
+ releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+
+ // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols
+ // -> alphabet.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press "ABC" key, enter into chording alphabet state.
+ pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ // Enter/release letter key.
+ chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Release "ABC" key, switch back to symbols.
+ releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press "ABC" key, enter into chording alphabet shift locked.
+ pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
+ // Enter/release letter key.
+ chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Release "ABC" key, switch back to symbols.
+ releaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols -> "=\<" key + letter -> symbols ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press "=\<" key, enter into symbols shifted chording state.
+ pressKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+ // Enter/release symbols shift letter key.
+ chordingPressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Release "=\<" key, switch back to symbols.
+ releaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Chording input in symbol shifted.
+ public void testChordingSymbolsShifted() {
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+
+ // Press "?123" key and hold, enter into chording symbols state.
+ pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "=\<" key, switch back to symbols shifted state.
+ releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+
+ // Press "ABC" key and hold, enter into choring alphabet state.
+ pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Release "ABC" key, switch back to symbols.
+ releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
+
+ // Alphabet shifted -> symbols shifted -> "ABC" key + letter -> symbols shifted ->
+ // alphabet.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press "ABC" key, enter into chording alphabet state.
+ pressKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ // Enter/release letter key.
+ chordingPressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Release "ABC" key, switch back to symbols shifted.
+ releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shift locked -> symbols shifted -> "ABC" key + letter -> symbols shifted
+ // -> alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press "ABC" key, enter into chording alphabet shift locked.
+ pressKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED);
+ // Enter/release letter key.
+ chordingPressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Release "ABC" key, switch back to symbols shifted.
+ releaseKey(CODE_SYMBOL, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols shifted -> "=\<" key + letter -> symbols shifted
+ // -> alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press "=\<" key, enter into symbols chording state.
+ pressKey(CODE_SHIFT, SYMBOLS_UNSHIFTED);
+ // Enter/release symbols letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "=\<" key, switch back to symbols shifted.
+ releaseKey(CODE_SHIFT, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Chording input in automatic upper case.
+ public void testChordingAutomaticUpperCase() {
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+ // Press shift key and hold, enter into chording shift state.
+ pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED);
+ // Press/release letter key.
+ chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Release shift key, switch back to alphabet.
+ releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED);
+
+ // Update shift state with auto caps enabled.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+ // Press "123?" key and hold, enter into chording symbols state.
+ pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key.
+ chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Release "123?" key, switch back to alphabet.
+ releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
new file mode 100644
index 000000000..8c53fb5c8
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java
@@ -0,0 +1,690 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase {
+ // Shift key in alphabet.
+ public void testShiftAlphabet() {
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release letter key, switch back to alphabet.
+ pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Shift key in symbols.
+ public void testShiftSymbols() {
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+
+ // Press/release "?123" key, back to symbols.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release symbol letter key, remain in symbols shifted.
+ pressAndReleaseKey('1', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ }
+
+ // Switching between alphabet and symbols.
+ public void testAlphabetAndSymbols() {
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, back to alphabet.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, back to alphabet.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release "?123" key, back to symbols (not symbols shifted).
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ }
+
+ // Switching between alphabet shifted and symbols.
+ public void testAlphabetShiftedAndSymbols() {
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, back to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release shift key, enter into alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\< key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, back to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Switching between alphabet shift locked and symbols.
+ public void testAlphabetShiftLockedAndSymbols() {
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, back to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, back to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, back to symbols (not symbols shifted).
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ }
+
+ // Automatic switch back to alphabet by space key.
+ public void testSwitchBackBySpace() {
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter symbol letter.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter space, switch back to alphabet.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter symbol shift letter.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter space, switch back to alphabet.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Automatic switch back to alphabet shift locked test by space key.
+ public void testSwitchBackBySpaceShiftLocked() {
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter symbol letter.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter space, switch back to alphabet shift locked.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter symbol shift letter.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter space, switch back to alphabet shift locked.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Automatic switch back to alphabet by registered letters.
+ public void testSwitchBackChar() {
+ // Set switch back chars.
+ final String switchBackSymbols = "'";
+ final int switchBackCode = switchBackSymbols.codePointAt(0);
+ setLayoutSwitchBackSymbols(switchBackSymbols);
+ loadKeyboard(ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter symbol letter.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter switch back letter, switch back to alphabet.
+ pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter symbol shift letter.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter switch abck letter, switch back to alphabet.
+ pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Automatic switch back to alphabet shift locked by registered letters.
+ public void testSwitchBackCharShiftLocked() {
+ // Set switch back chars.
+ final String switchBackSymbols = "'";
+ final int switchBackCode = switchBackSymbols.codePointAt(0);
+ setLayoutSwitchBackSymbols(switchBackSymbols);
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter symbol letter.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter switch back letter, switch back to alphabet shift locked.
+ pressAndReleaseKey(switchBackCode, SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter symbol shift letter.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter switch back letter, switch back to alphabet shift locked.
+ pressAndReleaseKey(switchBackCode, SYMBOLS_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Automatic upper case test
+ public void testAutomaticUpperCase() {
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+ // Load keyboard, should be in automatic shifted.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release letter key, switch to alphabet.
+ pressAndReleaseKey('A', ALPHABET_AUTOMATIC_SHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release auto caps trigger letter, should be in automatic shifted.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release letter key, remain in alphabet.
+ pressAndReleaseKey('a', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release auto caps trigger letter, should be in automatic shifted.
+ pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release symbol letter key, remain in symbols.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release space, switch back to automatic shifted.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release symbol shift letter key, remain in symbols shifted.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release space, switch back to automatic shifted.
+ pressAndReleaseKey(CODE_SPACE, SYMBOLS_SHIFTED, ALPHABET_AUTOMATIC_SHIFTED);
+ }
+
+ // Long press shift key.
+ public void testLongPressShift() {
+ // Set auto caps mode off.
+ setAutoCapsMode(NO_AUTO_CAPS);
+ // Load keyboard, should be in alphabet.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release letter key, remain in shift locked.
+ pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Press/release word separator, remain in shift locked.
+ pressAndReleaseKey(CODE_SPACE, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Long press shift key, back to alphabet.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+ // Load keyboard, should be in automatic shifted.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release shift key, back to alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Double tap shift key.
+ public void testDoubleTapShift() {
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release shift key, enter alphabet manual shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+ // Load keyboard, should be in automatic shifted.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // First shift key tap.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+ // Second shift key tap.
+ secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ }
+
+ // Update shift state.
+ public void testUpdateShiftState() {
+ // Set auto caps mode off.
+ setAutoCapsMode(NO_AUTO_CAPS);
+ // Load keyboard, should be in alphabet.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Update shift state, remained in alphabet.
+ updateShiftState(ALPHABET_UNSHIFTED);
+
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Update shift state, back to alphabet.
+ updateShiftState(ALPHABET_UNSHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Update shift state, remained in alphabet shift locked.
+ updateShiftState(ALPHABET_SHIFT_LOCKED);
+ // Long press shift key, back to alphabet.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Update shift state, remained in symbols.
+ updateShiftState(SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Update shift state, remained in symbols shifted.
+ updateShiftState(SYMBOLS_SHIFTED);
+
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+ // Load keyboard, should be in automatic shifted.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+ // Update shift state, remained in automatic shifted.
+ updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release shift key, enter alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Update shift state, enter to automatic shifted (not alphabet shifted).
+ updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Update shift state, remained in alphabet shift locked (not automatic shifted).
+ updateShiftState(ALPHABET_SHIFT_LOCKED);
+ // Long press shift key, back to alphabet.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Load keyboard, should be in automatic shifted.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Update shift state, remained in symbols.
+ updateShiftState(SYMBOLS_UNSHIFTED);
+
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Update shift state, remained in symbols shifted.
+ updateShiftState(SYMBOLS_SHIFTED);
+ }
+
+ // Sliding input in alphabet.
+ public void testSlidingAlphabet() {
+ // Alphabet -> shift key + letter -> alphabet.
+ // Press and slide from shift key, enter alphabet shifted.
+ pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Enter/release letter key, switch back to alphabet.
+ pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet -> "?123" key + letter -> alphabet.
+ // Press and slide from "123?" key, enter symbols.
+ pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter/release into symbol letter key, switch back to alphabet.
+ pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shifted -> shift key + letter -> alphabet.
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press and slide from shift key, remain alphabet shifted.
+ pressAndSlideFromKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Enter/release letter key, switch back to alphabet (not alphabet shifted).
+ pressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shifted -> "?123" key + letter -> alphabet.
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press and slide from "123?" key, enter symbols.
+ pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter/release into symbol letter key, switch back to alphabet (not alphabet shifted).
+ pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shift locked -> shift key + letter -> alphabet shift locked.
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press and slide from "123?" key, enter symbols.
+ pressAndSlideFromKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter/release into symbol letter key, switch back to alphabet shift locked.
+ pressAndReleaseKey('!', SYMBOLS_UNSHIFTED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> "?123" key + letter -> alphabet shift locked.
+ // Press and slide from shift key, enter alphabet shifted.
+ pressAndSlideFromKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Enter/release letter key, switch back to shift locked.
+ pressAndReleaseKey('Z', ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Sliding input in symbols.
+ public void testSlidingSymbols() {
+ // Symbols -> "=\<" key + letter -> symbols.
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press and slide from shift key, enter symols shifted.
+ pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter/release symbol shifted letter key, switch back to symbols.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Symbols -> "ABC" key + letter -> Symbols.
+ // Press and slide from "ABC" key, enter alphabet.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Enter/release letter key, switch back to symbols.
+ pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shifted -> symbols -> "ABC" key + letter -> symbols ->
+ // alphabet.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press and slide from "ABC" key.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Enter/release letter key, switch back to symbols.
+ pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shift locked -> symbols -> "ABC" key + letter -> symbols ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press and slide from "ABC" key, enter alphabet shift locked.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Enter/release letter key, switch back to symbols.
+ pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols -> "=\<" key + letter -> symbols ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press and slide from "=\<" key, enter symbols shifted.
+ pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Enter/release symbols shift letter key, switch back to symbols.
+ pressAndReleaseKey('~', SYMBOLS_SHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Sliding input in symbols shifted.
+ public void testSlidingSymbolsShifted() {
+ // Symbols shifted -> "?123" + letter -> symbols shifted.
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press and slide from shift key, enter symbols.
+ pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter/release symbol letter key, switch back to symbols shifted.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
+
+ // Symbols shifted -> "ABC" key + letter -> symbols shifted.
+ // Press and slide from "ABC" key, enter alphabet.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Enter/release letter key, switch back to symbols shifted.
+ pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shifted -> symbols shifted -> "ABC" + letter -> symbols shifted ->
+ // alphabet.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press and slide from "ABC" key.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Enter/release letter key, switch back to symbols shifted.
+ pressAndReleaseKey('a', ALPHABET_UNSHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet (not alphabet shifted).
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+
+ // Alphabet shift locked -> symbols shifted -> "ABC" + letter -> symbols shifted ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press and slide from "ABC" key.
+ pressAndSlideFromKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Enter/release letter key, switch back to symbols shifted.
+ pressAndReleaseKey('A', ALPHABET_SHIFT_LOCKED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols shifted -> "?123" + letter -> symbols shifted ->
+ // alphabet shift locked.
+ // Load keyboard
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter into symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter into symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press and slide from "?123" key.
+ pressAndSlideFromKey(CODE_SHIFT, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Enter/release symbol letter key, switch back to symbols shifted.
+ pressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, switch to alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ }
+
+ // Change focus to new text field.
+ public void testChangeFocus() {
+ // Press/release shift key.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+
+ // Press/release "?123" key.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ }
+
+ // Change focus to auto caps text field.
+ public void testChangeFocusAutoCaps() {
+ // Set auto caps mode on.
+ setAutoCapsMode(AUTO_CAPS);
+
+ // Update shift state.
+ updateShiftState(ALPHABET_AUTOMATIC_SHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release shift key, enter alphabet.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release "?123" key.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+
+ // Press/release "?123" key.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Change focus to new text field.
+ loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED);
+ }
+
+ // Change orientation.
+ public void testChangeOrientation() {
+ // Alphabet -> rotate -> alphabet.
+ updateShiftState(ALPHABET_UNSHIFTED);
+ // Rotate device, remain in alphabet.
+ rotateDevice(ALPHABET_UNSHIFTED);
+
+ // Alphabet shifted -> rotate -> alphabet shifted.
+ // Press/release shift key, enter alphabet shifted.
+ pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED);
+ // Rotate device, remain in alphabet shifted.
+ rotateDevice(ALPHABET_MANUAL_SHIFTED);
+
+ // Alphabet shift locked -> rotate -> alphabet shift locked.
+ // Long press shift key, enter alphabet shift locked.
+ longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED);
+ // Rotate device, remain in alphabet shift locked.
+ rotateDevice(ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols -> rotate -> symbols ->
+ // Alphabet shift locked.
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Rotate device, remain in symbols,
+ rotateDevice(SYMBOLS_UNSHIFTED);
+ // Press/release "ABC" key, alphabet shift locked state should be maintained.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols shifted -> rotate -> symbols shifted ->
+ // Alphabet shift locked.
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Rotate device, remain in symbols shifted.
+ rotateDevice(SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, alphabet shift locked state should be maintained.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+
+ // Alphabet shift locked -> symbols shifted -> alphabet shift locked -> rotate ->
+ // Alphabet shift locked -> symbols.
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, enter alphabet shift locked.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_SHIFT_LOCKED, ALPHABET_SHIFT_LOCKED);
+ // Rotate device, remain in alphabet shift locked.
+ rotateDevice(ALPHABET_SHIFT_LOCKED);
+ // Press/release "?123" key, enter symbols (not symbols shifted).
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+
+ // Alphabet -> symbols shifted -> alphabet -> rotate ->
+ // Alphabet -> symbols.
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ // Press/release "?123" key, enter symbols.
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ // Press/release "=\<" key, enter symbols shifted.
+ pressAndReleaseKey(CODE_SHIFT, SYMBOLS_SHIFTED, SYMBOLS_SHIFTED);
+ // Press/release "ABC" key, enter alphabet.
+ pressAndReleaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED);
+ // Rotate device, remain in alphabet shift locked.
+ rotateDevice(ALPHABET_UNSHIFTED);
+ // Press/release "?123" key, enter symbols (not symbols shifted).
+ pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
new file mode 100644
index 000000000..96a54668c
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.test.AndroidTestCase;
+
+public class KeyboardStateTestsBase extends AndroidTestCase
+ implements MockKeyboardSwitcher.Constants {
+ protected MockKeyboardSwitcher mSwitcher;
+
+ private String mLayoutSwitchBackSymbols = "";
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mSwitcher = new MockKeyboardSwitcher();
+ mSwitcher.setAutoCapsMode(NO_AUTO_CAPS);
+
+ loadKeyboard(ALPHABET_UNSHIFTED);
+ }
+
+ public void setAutoCapsMode(boolean autoCaps) {
+ mSwitcher.setAutoCapsMode(autoCaps);
+ }
+
+ public void setLayoutSwitchBackSymbols(String switchBackSymbols) {
+ mLayoutSwitchBackSymbols = switchBackSymbols;
+ }
+
+ private static void assertLayout(int expected, int actual) {
+ assertTrue("expected=" + MockKeyboardSwitcher.getLayoutName(expected)
+ + " actual=" + MockKeyboardSwitcher.getLayoutName(actual),
+ expected == actual);
+ }
+
+ public void updateShiftState(int afterUpdate) {
+ mSwitcher.updateShiftState();
+ assertLayout(afterUpdate, mSwitcher.getLayoutId());
+ }
+
+ public void loadKeyboard(int afterLoad) {
+ mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
+ updateShiftState(afterLoad);
+ }
+
+ public void rotateDevice(int afterRotate) {
+ mSwitcher.saveKeyboardState();
+ mSwitcher.loadKeyboard(mLayoutSwitchBackSymbols);
+ assertLayout(afterRotate, mSwitcher.getLayoutId());
+ }
+
+ private void pressKeyWithoutTimerExpire(int code, int afterPress) {
+ mSwitcher.onPressKey(code);
+ assertLayout(afterPress, mSwitcher.getLayoutId());
+ }
+
+ public void pressKey(int code, int afterPress) {
+ mSwitcher.expireDoubleTapTimeout();
+ pressKeyWithoutTimerExpire(code, afterPress);
+ }
+
+ public void releaseKey(int code, int afterRelease) {
+ mSwitcher.onCodeInput(code, SINGLE);
+ mSwitcher.onReleaseKey(code, NOT_SLIDING);
+ assertLayout(afterRelease, mSwitcher.getLayoutId());
+ }
+
+ public void pressAndReleaseKey(int code, int afterPress, int afterRelease) {
+ pressKey(code, afterPress);
+ releaseKey(code, afterRelease);
+ }
+
+ public void chordingPressKey(int code, int afterPress) {
+ pressKey(code, afterPress);
+ }
+
+ public void chordingReleaseKey(int code, int afterRelease) {
+ mSwitcher.onCodeInput(code, MULTI);
+ mSwitcher.onReleaseKey(code, NOT_SLIDING);
+ assertLayout(afterRelease, mSwitcher.getLayoutId());
+ }
+
+ public void chordingPressAndReleaseKey(int code, int afterPress, int afterRelease) {
+ chordingPressKey(code, afterPress);
+ chordingReleaseKey(code, afterRelease);
+ }
+
+ public void pressAndSlideFromKey(int code, int afterPress, int afterSlide) {
+ pressKey(code, afterPress);
+ mSwitcher.onReleaseKey(code, SLIDING);
+ assertLayout(afterSlide, mSwitcher.getLayoutId());
+ }
+
+ public void longPressAndReleaseKey(int code, int afterPress, int afterLongPress) {
+ pressKey(code, afterPress);
+ mSwitcher.onLongPressTimeout(code);
+ assertLayout(afterLongPress, mSwitcher.getLayoutId());
+ releaseKey(code, afterLongPress);
+ }
+
+ public void secondPressAndReleaseKey(int code, int afterPress, int afterRelease) {
+ pressKeyWithoutTimerExpire(code, afterPress);
+ releaseKey(code, afterRelease);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
new file mode 100644
index 000000000..a01b69cc1
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import com.android.inputmethod.keyboard.Keyboard;
+
+public class MockKeyboardSwitcher implements KeyboardState.SwitchActions {
+ public interface Constants {
+ // Argument for {@link KeyboardState#onPressKey} and {@link KeyboardState#onReleaseKey}.
+ public static final boolean NOT_SLIDING = false;
+ public static final boolean SLIDING = true;
+ // Argument for {@link KeyboardState#onCodeInput}.
+ public static final boolean SINGLE = true;
+ public static final boolean MULTI = false;
+ public static final boolean NO_AUTO_CAPS = false;
+ public static final boolean AUTO_CAPS = true;
+
+ public static final int CODE_SHIFT = Keyboard.CODE_SHIFT;
+ public static final int CODE_SYMBOL = Keyboard.CODE_SWITCH_ALPHA_SYMBOL;
+ public static final int CODE_SPACE = Keyboard.CODE_SPACE;
+ public static final int CODE_AUTO_CAPS_TRIGGER = Keyboard.CODE_SPACE;
+
+ public static final int ALPHABET_UNSHIFTED = 0;
+ public static final int ALPHABET_MANUAL_SHIFTED = 1;
+ public static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
+ public static final int ALPHABET_SHIFT_LOCKED = 3;
+ public static final int ALPHABET_SHIFT_LOCK_SHIFTED = 4;
+ public static final int SYMBOLS_UNSHIFTED = 5;
+ public static final int SYMBOLS_SHIFTED = 6;
+ }
+
+ private int mLayout = Constants.ALPHABET_UNSHIFTED;
+
+ private boolean mAutoCapsMode = Constants.NO_AUTO_CAPS;
+ // Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS.
+ private boolean mAutoCapsState = true;
+
+ private boolean mIsInDoubleTapTimeout;
+ private int mLongPressTimeoutCode;
+
+ private final KeyboardState mState = new KeyboardState(this);
+
+ public int getLayoutId() {
+ return mLayout;
+ }
+
+ public static String getLayoutName(int layoutId) {
+ switch (layoutId) {
+ case Constants.ALPHABET_UNSHIFTED: return "ALPHABET_UNSHIFTED";
+ case Constants.ALPHABET_MANUAL_SHIFTED: return "ALPHABET_MANUAL_SHIFTED";
+ case Constants.ALPHABET_AUTOMATIC_SHIFTED: return "ALPHABET_AUTOMATIC_SHIFTED";
+ case Constants.ALPHABET_SHIFT_LOCKED: return "ALPHABET_SHIFT_LOCKED";
+ case Constants.ALPHABET_SHIFT_LOCK_SHIFTED: return "ALPHABET_SHIFT_LOCK_SHIFTED";
+ case Constants.SYMBOLS_UNSHIFTED: return "SYMBOLS_UNSHIFTED";
+ case Constants.SYMBOLS_SHIFTED: return "SYMBOLS_SHIFTED";
+ default: return "UNKNOWN<" + layoutId + ">";
+ }
+ }
+
+ public void setAutoCapsMode(boolean autoCaps) {
+ mAutoCapsMode = autoCaps;
+ }
+
+ public void expireDoubleTapTimeout() {
+ mIsInDoubleTapTimeout = false;
+ }
+
+ @Override
+ public void setAlphabetKeyboard() {
+ mLayout = Constants.ALPHABET_UNSHIFTED;
+ }
+
+ @Override
+ public void setAlphabetManualShiftedKeyboard() {
+ mLayout = Constants.ALPHABET_MANUAL_SHIFTED;
+ }
+
+ @Override
+ public void setAlphabetAutomaticShiftedKeyboard() {
+ mLayout = Constants.ALPHABET_AUTOMATIC_SHIFTED;
+ }
+
+ @Override
+ public void setAlphabetShiftLockedKeyboard() {
+ mLayout = Constants.ALPHABET_SHIFT_LOCKED;
+ }
+
+ @Override
+ public void setAlphabetShiftLockShiftedKeyboard() {
+ mLayout = Constants.ALPHABET_SHIFT_LOCK_SHIFTED;
+ }
+
+ @Override
+ public void setSymbolsKeyboard() {
+ mLayout = Constants.SYMBOLS_UNSHIFTED;
+ }
+
+ @Override
+ public void setSymbolsShiftedKeyboard() {
+ mLayout = Constants.SYMBOLS_SHIFTED;
+ }
+
+ @Override
+ public void requestUpdatingShiftState() {
+ mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
+ }
+
+ @Override
+ public void startDoubleTapTimer() {
+ mIsInDoubleTapTimeout = true;
+ }
+
+ @Override
+ public boolean isInDoubleTapTimeout() {
+ return mIsInDoubleTapTimeout;
+ }
+
+ @Override
+ public void startLongPressTimer(int code) {
+ mLongPressTimeoutCode = code;
+ }
+
+ @Override
+ public void hapticAndAudioFeedback(int code) {
+ // Nothing to do.
+ }
+
+ public void onLongPressTimeout(int code) {
+ // TODO: Handle simultaneous long presses.
+ if (mLongPressTimeoutCode == code) {
+ mLongPressTimeoutCode = 0;
+ mState.onLongPressTimeout(code);
+ }
+ }
+
+ public void updateShiftState() {
+ mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState);
+ }
+
+ public void loadKeyboard(String layoutSwitchBackSymbols) {
+ mState.onLoadKeyboard(layoutSwitchBackSymbols);
+ }
+
+ public void saveKeyboardState() {
+ mState.onSaveKeyboardState();
+ }
+
+ public void onPressKey(int code) {
+ mState.onPressKey(code);
+ }
+
+ public void onReleaseKey(int code, boolean withSliding) {
+ mState.onReleaseKey(code, withSliding);
+ if (mLongPressTimeoutCode == code) {
+ mLongPressTimeoutCode = 0;
+ }
+ }
+
+ public void onCodeInput(int code, boolean isSinglePointer) {
+ if (Keyboard.isLetterCode(code)) {
+ mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER);
+ }
+ mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState);
+ }
+
+ public void onCancelInput(boolean isSinglePointer) {
+ mState.onCancelInput(isSinglePointer);
+ }
+} \ No newline at end of file
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java b/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
deleted file mode 100644
index 798fca0f5..000000000
--- a/tests/src/com/android/inputmethod/keyboard/internal/MoreKeySpecParserTests.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.keyboard.internal;
-
-import android.content.res.Resources;
-import android.test.AndroidTestCase;
-
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.latin.R;
-
-public class MoreKeySpecParserTests extends AndroidTestCase {
- private Resources mRes;
-
- private static final int ICON_SETTINGS_KEY = 5;
- private static final int ICON_UNDEFINED = KeyboardIconsSet.ICON_UNDEFINED;
-
- private static final String CODE_SETTINGS = "@integer/key_settings";
- private static final String ICON_SETTINGS = "@icon/" + ICON_SETTINGS_KEY;
- private static final String CODE_NON_EXISTING = "@integer/non_existing";
- private static final String ICON_NON_EXISTING = "@icon/non_existing";
-
- private int mCodeSettings;
-
- @Override
- protected void setUp() {
- Resources res = getContext().getResources();
- mRes = res;
-
- final String packageName = res.getResourcePackageName(R.string.english_ime_name);
- final int codeId = res.getIdentifier(CODE_SETTINGS.substring(1), null, packageName);
- mCodeSettings = res.getInteger(codeId);
- }
-
- private void assertParser(String message, String moreKeySpec, String expectedLabel,
- String expectedOutputText, int expectedIcon, int expectedCode) {
- String actualLabel = MoreKeySpecParser.getLabel(moreKeySpec);
- assertEquals(message + ": label:", expectedLabel, actualLabel);
-
- String actualOutputText = MoreKeySpecParser.getOutputText(moreKeySpec);
- assertEquals(message + ": ouptputText:", expectedOutputText, actualOutputText);
-
- int actualIcon = MoreKeySpecParser.getIconId(moreKeySpec);
- assertEquals(message + ": icon:", expectedIcon, actualIcon);
-
- int actualCode = MoreKeySpecParser.getCode(mRes, moreKeySpec);
- assertEquals(message + ": codes value:", expectedCode, actualCode);
- }
-
- private void assertParserError(String message, String moreKeySpec, String expectedLabel,
- String expectedOutputText, int expectedIcon, int expectedCode) {
- try {
- assertParser(message, moreKeySpec, expectedLabel, expectedOutputText, expectedIcon,
- expectedCode);
- fail(message);
- } catch (MoreKeySpecParser.MoreKeySpecParserError pcpe) {
- // success.
- }
- }
-
- public void testSingleLetter() {
- assertParser("Single letter", "a",
- "a", null, ICON_UNDEFINED, 'a');
- assertParser("Single escaped bar", "\\|",
- "|", null, ICON_UNDEFINED, '|');
- assertParser("Single escaped escape", "\\\\",
- "\\", null, ICON_UNDEFINED, '\\');
- assertParser("Single comma", ",",
- ",", null, ICON_UNDEFINED, ',');
- assertParser("Single escaped comma", "\\,",
- ",", null, ICON_UNDEFINED, ',');
- assertParser("Single escaped letter", "\\a",
- "a", null, ICON_UNDEFINED, 'a');
- assertParser("Single at", "@",
- "@", null, ICON_UNDEFINED, '@');
- assertParser("Single escaped at", "\\@",
- "@", null, ICON_UNDEFINED, '@');
- assertParser("Single letter with outputText", "a|abc",
- "a", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped outputText", "a|a\\|c",
- "a", "a|c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with comma outputText", "a|a,b",
- "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped comma outputText", "a|a\\,b",
- "a", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with outputText starts with at", "a|@bc",
- "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with outputText contains at", "a|a@c",
- "a", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with escaped at outputText", "a|\\@bc",
- "a", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single escaped escape with outputText", "\\\\|\\\\",
- "\\", "\\", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single escaped bar with outputText", "\\||\\|",
- "|", "|", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Single letter with code", "a|" + CODE_SETTINGS,
- "a", null, ICON_UNDEFINED, mCodeSettings);
- }
-
- public void testLabel() {
- assertParser("Simple label", "abc",
- "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar", "a\\|c",
- "a|c", "a|c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped escape", "a\\\\c",
- "a\\c", "a\\c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with comma", "a,c",
- "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped comma", "a\\,c",
- "a,c", "a,c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label starts with at", "@bc",
- "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label contains at", "a@c",
- "a@c", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped at", "\\@bc",
- "@bc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped letter", "\\abc",
- "abc", "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with outputText", "abc|def",
- "abc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with comma and outputText", "a,c|def",
- "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Escaped comma label with outputText", "a\\,c|def",
- "a,c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Escaped label with outputText", "a\\|c|def",
- "a|c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar outputText", "abc|d\\|f",
- "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Escaped escape label with outputText", "a\\\\|def",
- "a\\", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label starts with at and outputText", "@bc|def",
- "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label contains at label and outputText", "a@c|def",
- "a@c", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Escaped at label with outputText", "\\@bc|def",
- "@bc", "def", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with comma outputText", "abc|a,b",
- "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped comma outputText", "abc|a\\,b",
- "abc", "a,b", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with outputText starts with at", "abc|@bc",
- "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with outputText contains at", "abc|a@c",
- "abc", "a@c", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped at outputText", "abc|\\@bc",
- "abc", "@bc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with escaped bar outputText", "abc|d\\|f",
- "abc", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Escaped bar label with escaped bar outputText", "a\\|c|d\\|f",
- "a|c", "d|f", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParser("Label with code", "abc|" + CODE_SETTINGS,
- "abc", null, ICON_UNDEFINED, mCodeSettings);
- assertParser("Escaped label with code", "a\\|c|" + CODE_SETTINGS,
- "a|c", null, ICON_UNDEFINED, mCodeSettings);
- }
-
- public void testIconAndCode() {
- assertParser("Icon with outputText", ICON_SETTINGS + "|abc",
- null, "abc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
- assertParser("Icon with outputText starts with at", ICON_SETTINGS + "|@bc",
- null, "@bc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
- assertParser("Icon with outputText contains at", ICON_SETTINGS + "|a@c",
- null, "a@c", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
- assertParser("Icon with escaped at outputText", ICON_SETTINGS + "|\\@bc",
- null, "@bc", ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
- assertParser("Label starts with at and code", "@bc|" + CODE_SETTINGS,
- "@bc", null, ICON_UNDEFINED, mCodeSettings);
- assertParser("Label contains at and code", "a@c|" + CODE_SETTINGS,
- "a@c", null, ICON_UNDEFINED, mCodeSettings);
- assertParser("Escaped at label with code", "\\@bc|" + CODE_SETTINGS,
- "@bc", null, ICON_UNDEFINED, mCodeSettings);
- assertParser("Icon with code", ICON_SETTINGS + "|" + CODE_SETTINGS,
- null, null, ICON_SETTINGS_KEY, mCodeSettings);
- }
-
- public void testFormatError() {
- assertParserError("Empty spec", "", null,
- null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty label with outputText", "|a",
- null, "a", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParserError("Empty label with code", "|" + CODE_SETTINGS,
- null, null, ICON_UNDEFINED, mCodeSettings);
- assertParserError("Empty outputText with label", "a|",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty outputText with icon", ICON_SETTINGS + "|",
- null, null, ICON_SETTINGS_KEY, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Empty icon and code", "|",
- null, null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Icon without code", ICON_SETTINGS,
- null, null, ICON_SETTINGS_KEY, Keyboard.CODE_DUMMY);
- assertParser("Non existing icon", ICON_NON_EXISTING + "|abc",
- null, "abc", ICON_UNDEFINED, Keyboard.CODE_DUMMY);
- assertParserError("Non existing code", "abc|" + CODE_NON_EXISTING,
- "abc", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Third bar at end", "a|b|",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar", "a|b|c",
- "a", null, ICON_UNDEFINED, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar with label and code", "a|" + CODE_SETTINGS + "|c",
- "a", null, ICON_UNDEFINED, mCodeSettings);
- assertParserError("Multiple bar with icon and outputText", ICON_SETTINGS + "|b|c",
- null, null, ICON_SETTINGS_KEY, Keyboard.CODE_UNSPECIFIED);
- assertParserError("Multiple bar with icon and code",
- ICON_SETTINGS + "|" + CODE_SETTINGS + "|c",
- null, null, ICON_SETTINGS_KEY, mCodeSettings);
- }
-}
diff --git a/tests/src/com/android/inputmethod/latin/EditDistanceTests.java b/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
index 75bd04938..c053a49e5 100644
--- a/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
+++ b/tests/src/com/android/inputmethod/latin/EditDistanceTests.java
@@ -37,7 +37,7 @@ public class EditDistanceTests extends AndroidTestCase {
* sitting
*/
public void testExample1() {
- final int dist = Utils.editDistance("kitten", "sitting");
+ final int dist = BinaryDictionary.editDistance("kitten", "sitting");
assertEquals("edit distance between 'kitten' and 'sitting' is 3",
3, dist);
}
@@ -50,26 +50,26 @@ public class EditDistanceTests extends AndroidTestCase {
* S--unday
*/
public void testExample2() {
- final int dist = Utils.editDistance("Saturday", "Sunday");
+ final int dist = BinaryDictionary.editDistance("Saturday", "Sunday");
assertEquals("edit distance between 'Saturday' and 'Sunday' is 3",
3, dist);
}
public void testBothEmpty() {
- final int dist = Utils.editDistance("", "");
+ final int dist = BinaryDictionary.editDistance("", "");
assertEquals("when both string are empty, no edits are needed",
0, dist);
}
public void testFirstArgIsEmpty() {
- final int dist = Utils.editDistance("", "aaaa");
+ final int dist = BinaryDictionary.editDistance("", "aaaa");
assertEquals("when only one string of the arguments is empty,"
+ " the edit distance is the length of the other.",
4, dist);
}
public void testSecoondArgIsEmpty() {
- final int dist = Utils.editDistance("aaaa", "");
+ final int dist = BinaryDictionary.editDistance("aaaa", "");
assertEquals("when only one string of the arguments is empty,"
+ " the edit distance is the length of the other.",
4, dist);
@@ -78,27 +78,27 @@ public class EditDistanceTests extends AndroidTestCase {
public void testSameStrings() {
final String arg1 = "The quick brown fox jumps over the lazy dog.";
final String arg2 = "The quick brown fox jumps over the lazy dog.";
- final int dist = Utils.editDistance(arg1, arg2);
+ final int dist = BinaryDictionary.editDistance(arg1, arg2);
assertEquals("when same strings are passed, distance equals 0.",
0, dist);
}
public void testSameReference() {
final String arg = "The quick brown fox jumps over the lazy dog.";
- final int dist = Utils.editDistance(arg, arg);
+ final int dist = BinaryDictionary.editDistance(arg, arg);
assertEquals("when same string references are passed, the distance equals 0.",
0, dist);
}
public void testNullArg() {
try {
- Utils.editDistance(null, "aaa");
+ BinaryDictionary.editDistance(null, "aaa");
fail("IllegalArgumentException should be thrown.");
} catch (Exception e) {
assertTrue(e instanceof IllegalArgumentException);
}
try {
- Utils.editDistance("aaa", null);
+ BinaryDictionary.editDistance("aaa", null);
fail("IllegalArgumentException should be thrown.");
} catch (Exception e) {
assertTrue(e instanceof IllegalArgumentException);
diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
new file mode 100644
index 000000000..9d886da3b
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java
@@ -0,0 +1,399 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.test.ServiceTestCase;
+import android.text.InputType;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+import android.view.View;
+import android.view.inputmethod.BaseInputConnection;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputConnection;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
+import com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService; // for proximity info
+import com.android.inputmethod.latin.spellcheck.SpellCheckerProximityInfo;
+
+import java.util.Arrays;
+import java.util.HashMap;
+
+public class InputLogicTests extends ServiceTestCase<LatinIME> {
+
+ private static final String PREF_DEBUG_MODE = "debug_mode";
+
+ private LatinIME mLatinIME;
+ private TextView mTextView;
+ private InputConnection mInputConnection;
+ private HashMap<Integer, int[]> mProximity;
+
+ public InputLogicTests() {
+ super(LatinIME.class);
+ mProximity = createProximity();
+ }
+
+ private static HashMap<Integer, int[]> createProximity() {
+ final HashMap<Integer, int[]> proximity = new HashMap<Integer, int[]>();
+ final int[] testProximity = SpellCheckerProximityInfo.getProximityForScript(
+ AndroidSpellCheckerService.SCRIPT_LATIN);
+ final int ROW_SIZE = SpellCheckerProximityInfo.ROW_SIZE;
+ final int NUL = SpellCheckerProximityInfo.NUL;
+ for (int row = 0; row * ROW_SIZE < testProximity.length; ++row) {
+ final int rowBase = row * ROW_SIZE;
+ int column;
+ for (column = 1; NUL != testProximity[rowBase + column]; ++column) {
+ // Do nothing, just search for a NUL element
+ }
+ proximity.put(testProximity[row * ROW_SIZE],
+ Arrays.copyOfRange(testProximity, rowBase, rowBase + column));
+ }
+ return proximity;
+ }
+
+ // returns the previous setting value
+ private boolean setDebugMode(final boolean mode) {
+ final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
+ final boolean previousDebugSetting = prefs.getBoolean(PREF_DEBUG_MODE, false);
+ final SharedPreferences.Editor editor = prefs.edit();
+ editor.putBoolean(PREF_DEBUG_MODE, true);
+ editor.commit();
+ return previousDebugSetting;
+ }
+
+ @Override
+ protected void setUp() {
+ try {
+ super.setUp();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ mTextView = new TextView(getContext());
+ mTextView.setInputType(InputType.TYPE_CLASS_TEXT);
+ mTextView.setEnabled(true);
+ setupService();
+ mLatinIME = getService();
+ final boolean previousDebugSetting = setDebugMode(true);
+ mLatinIME.onCreate();
+ setDebugMode(previousDebugSetting);
+ final EditorInfo ei = new EditorInfo();
+ ei.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
+ final InputConnection ic = mTextView.onCreateInputConnection(ei);
+ ei.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT;
+ final LayoutInflater inflater =
+ (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ final ViewGroup vg = new FrameLayout(getContext());
+ final View inputView = inflater.inflate(R.layout.input_view, vg);
+ mLatinIME.setInputView(inputView);
+ mLatinIME.onBindInput();
+ mLatinIME.onCreateInputView();
+ mLatinIME.onStartInputView(ei, false);
+ mLatinIME.onCreateInputMethodInterface().startInput(ic, ei);
+ mInputConnection = ic;
+ // Wait for the main dictionary to be loaded (we need it for auto-correction tests)
+ int remainingAttempts = 10;
+ while (remainingAttempts > 0 && !mLatinIME.mSuggest.hasMainDictionary()) {
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ // Don't do much
+ } finally {
+ --remainingAttempts;
+ }
+ }
+ if (!mLatinIME.mSuggest.hasMainDictionary()) {
+ throw new RuntimeException("Can't initialize the main dictionary");
+ }
+ }
+
+ // type(int) and type(String): helper methods to send a code point resp. a string to LatinIME.
+ private void type(final int codePoint) {
+ // onPressKey and onReleaseKey are explicitly deactivated here, but they do happen in the
+ // code (although multitouch/slide input and other factors make the sequencing complicated).
+ // They are supposed to be entirely deconnected from the input logic from LatinIME point of
+ // view and only delegates to the parts of the code that care. So we don't include them here
+ // to keep these tests as pinpoint as possible and avoid bringing it too many dependencies,
+ // but keep them in mind if something breaks. Commenting them out as is should work.
+ //mLatinIME.onPressKey(codePoint);
+ int[] proximityKeys = mProximity.get(codePoint);
+ if (null == proximityKeys) {
+ proximityKeys = new int[] { codePoint };
+ }
+ mLatinIME.onCodeInput(codePoint, proximityKeys,
+ KeyboardActionListener.NOT_A_TOUCH_COORDINATE,
+ KeyboardActionListener.NOT_A_TOUCH_COORDINATE);
+ //mLatinIME.onReleaseKey(codePoint, false);
+ }
+
+ private void type(final String stringToType) {
+ for (int i = 0; i < stringToType.length(); i = stringToType.offsetByCodePoints(i, 1)) {
+ type(stringToType.codePointAt(i));
+ }
+ }
+
+ public void testTypeWord() {
+ final String WORD_TO_TYPE = "abcd";
+ type(WORD_TO_TYPE);
+ assertEquals("type word", WORD_TO_TYPE, mTextView.getText().toString());
+ }
+
+ public void testPickSuggestionThenBackspace() {
+ final String WORD_TO_TYPE = "this";
+ final String EXPECTED_RESULT = "this";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("press suggestion then backspace", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testPickTypedWordOverAutoCorrectionThenBackspace() {
+ final String WORD_TO_TYPE = "tgis";
+ final String EXPECTED_RESULT = "tgis";
+ type(WORD_TO_TYPE);
+ // Choose the typed word, which should be in position 1 (because position 0 should
+ // be occupied by the "this" auto-correction, as checked by testAutoCorrect())
+ mLatinIME.pickSuggestionManually(1, WORD_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testDeleteSelection() {
+ final String STRING_TO_TYPE = "some text delete me some text";
+ final int SELECTION_START = 10;
+ final int SELECTION_END = 19;
+ final String EXPECTED_RESULT = "some text some text";
+ type(STRING_TO_TYPE);
+ // There is no IMF to call onUpdateSelection for us so we must do it by hand.
+ // Send once to simulate the cursor actually responding to the move caused by typing.
+ // This is necessary because LatinIME is bookkeeping to avoid confusing a real cursor
+ // move with a move triggered by LatinIME inputting stuff.
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(SELECTION_START, SELECTION_END);
+ // And now we simulate the user actually selecting some text.
+ mLatinIME.onUpdateSelection(0, 0, SELECTION_START, SELECTION_END, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("delete selection", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testAutoCorrect() {
+ final String STRING_TO_TYPE = "tgis ";
+ final String EXPECTED_RESULT = "this ";
+ type(STRING_TO_TYPE);
+ assertEquals("simple auto-correct", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testDoubleSpace() {
+ final String STRING_TO_TYPE = "this ";
+ final String EXPECTED_RESULT = "this. ";
+ type(STRING_TO_TYPE);
+ assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testCancelDoubleSpace() {
+ final String STRING_TO_TYPE = "this ";
+ final String EXPECTED_RESULT = "this ";
+ type(STRING_TO_TYPE);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testBackspaceAtStartAfterAutocorrect() {
+ final String STRING_TO_TYPE = "tgis ";
+ final String EXPECTED_RESULT = "this ";
+ final int NEW_CURSOR_POSITION = 0;
+ type(STRING_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION);
+ mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("auto correct then move cursor to start of line then backspace",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testAutoCorrectThenMoveCursorThenBackspace() {
+ final String STRING_TO_TYPE = "and tgis ";
+ final String EXPECTED_RESULT = "andthis ";
+ final int NEW_CURSOR_POSITION = STRING_TO_TYPE.indexOf('t');
+ type(STRING_TO_TYPE);
+ mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1);
+ mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION);
+ mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1);
+ type(Keyboard.CODE_DELETE);
+ assertEquals("auto correct then move cursor then backspace",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testNoSpaceAfterManualPick() {
+ final String WORD_TO_TYPE = "this";
+ final String EXPECTED_RESULT = WORD_TO_TYPE;
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ assertEquals("no space after manual pick", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "is";
+ final String EXPECTED_RESULT = "this is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManualPickThenSeparator() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "!";
+ final String EXPECTED_RESULT = "this!";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testWordThenSpaceThenPunctuationFromStripTwice() {
+ final String WORD_TO_TYPE = "this ";
+ final String PUNCTUATION_FROM_STRIP = "!";
+ final String EXPECTED_RESULT = "this!! ";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ assertEquals("type word then type space then punctuation from strip twice", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testWordThenSpaceThenPunctuationFromKeyboardTwice() {
+ final String WORD_TO_TYPE = "this !!";
+ final String EXPECTED_RESULT = "this !!";
+ type(WORD_TO_TYPE);
+ assertEquals("manual pick then space then punctuation from keyboard twice", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenPunctuationFromStripTwiceThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = "is";
+ final String PUNCTUATION_FROM_STRIP = "!";
+ final String EXPECTED_RESULT = "this!! is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
+ type(WORD2_TO_TYPE);
+ assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT,
+ mTextView.getText().toString());
+ }
+
+ public void testManualPickThenSpaceThenType() {
+ final String WORD1_TO_TYPE = "this";
+ final String WORD2_TO_TYPE = " is";
+ final String EXPECTED_RESULT = "this is";
+ type(WORD1_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE);
+ type(WORD2_TO_TYPE);
+ assertEquals("manual pick then space then type", WORD1_TO_TYPE + WORD2_TO_TYPE,
+ mTextView.getText().toString());
+ }
+
+ public void testDeleteWholeComposingWord() {
+ final String WORD_TO_TYPE = "this";
+ type(WORD_TO_TYPE);
+ for (int i = 0; i < WORD_TO_TYPE.length(); ++i) {
+ type(Keyboard.CODE_DELETE);
+ }
+ assertEquals("delete whole composing word", "", mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenColon() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = ":";
+ final String EXPECTED_RESULT = "this:";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then colon",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenOpenParen() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = "(";
+ final String EXPECTED_RESULT = "this (";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then open paren",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenCloseParen() {
+ final String WORD_TO_TYPE = "this";
+ final String PUNCTUATION = ")";
+ final String EXPECTED_RESULT = "this)";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ type(PUNCTUATION);
+ assertEquals("manually pick word then close paren",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenSmiley() {
+ final String WORD_TO_TYPE = "this";
+ final String SPECIAL_KEY = ":-)";
+ final String EXPECTED_RESULT = "this :-)";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("manually pick word then press the smiley key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testManuallyPickedWordThenDotCom() {
+ final String WORD_TO_TYPE = "this";
+ final String SPECIAL_KEY = ".com";
+ final String EXPECTED_RESULT = "this.com";
+ type(WORD_TO_TYPE);
+ mLatinIME.pickSuggestionManually(0, WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("manually pick word then press the .com key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ public void testTypeWordTypeDotThenPressDotCom() {
+ final String WORD_TO_TYPE = "this.";
+ final String SPECIAL_KEY = ".com";
+ final String EXPECTED_RESULT = "this.com";
+ type(WORD_TO_TYPE);
+ mLatinIME.onTextInput(SPECIAL_KEY);
+ assertEquals("type word type dot then press the .com key",
+ EXPECTED_RESULT, mTextView.getText().toString());
+ }
+
+ // TODO: Add some tests for non-BMP characters
+}
diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
index fec3e8ee1..7925d1a49 100644
--- a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
+++ b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java
@@ -16,10 +16,7 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.latin.LocaleUtils;
-
import android.content.Context;
-import android.content.res.Resources;
import android.test.AndroidTestCase;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
@@ -30,24 +27,22 @@ import java.util.List;
import java.util.Locale;
public class SubtypeLocaleTests extends AndroidTestCase {
- private static final String PACKAGE = LatinIME.class.getPackage().getName();
-
- private Resources mRes;
- private List<InputMethodSubtype> mKeyboardSubtypes = new ArrayList<InputMethodSubtype>();
+ private List<InputMethodSubtype> mKeyboardSubtypes;
@Override
protected void setUp() throws Exception {
super.setUp();
final Context context = getContext();
- mRes = context.getResources();
+ final String packageName = context.getApplicationInfo().packageName;
SubtypeLocale.init(context);
final InputMethodManager imm = (InputMethodManager) context.getSystemService(
Context.INPUT_METHOD_SERVICE);
for (final InputMethodInfo imi : imm.getInputMethodList()) {
- if (imi.getPackageName().equals(PACKAGE)) {
+ if (imi.getPackageName().equals(packageName)) {
+ mKeyboardSubtypes = new ArrayList<InputMethodSubtype>();
final int subtypeCount = imi.getSubtypeCount();
for (int i = 0; i < subtypeCount; ++i) {
InputMethodSubtype subtype = imi.getSubtypeAt(i);
@@ -58,37 +53,29 @@ public class SubtypeLocaleTests extends AndroidTestCase {
break;
}
}
- assertNotNull("Can not find input method " + PACKAGE, mKeyboardSubtypes);
+ assertNotNull("Can not find input method " + packageName, mKeyboardSubtypes);
assertTrue("Can not find keyboard subtype", mKeyboardSubtypes.size() > 0);
}
- private String getStringWithLocale(int resId, Locale locale) {
- final Locale savedLocale = Locale.getDefault();
- try {
- Locale.setDefault(locale);
- return mRes.getString(resId);
- } finally {
- Locale.setDefault(savedLocale);
- }
- }
-
public void testSubtypeLocale() {
final StringBuilder messages = new StringBuilder();
int failedCount = 0;
for (final InputMethodSubtype subtype : mKeyboardSubtypes) {
- final String localeCode = subtype.getLocale();
- final Locale locale = LocaleUtils.constructLocaleFromString(localeCode);
- // The locale name which will be displayed on spacebar. For example 'English (US)' or
- // 'Francais (Canada)'. (c=\u008d)
- final String displayName = SubtypeLocale.getFullDisplayName(locale);
- // The subtype name in its locale. For example 'English (US) Keyboard' or
- // 'Clavier Francais (Canada)'. (c=\u008d)
- final String subtypeName = getStringWithLocale(subtype.getNameResId(), locale);
- if (subtypeName.contains(displayName)) {
+ final Locale locale = LocaleUtils.constructLocaleFromString(subtype.getLocale());
+ final String subtypeLocaleString =
+ subtype.containsExtraValueKey(LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
+ ? subtype.getExtraValueOf(LatinIME.SUBTYPE_EXTRA_VALUE_KEYBOARD_LOCALE)
+ : subtype.getLocale();
+ final Locale subtypeLocale = LocaleUtils.constructLocaleFromString(subtypeLocaleString);
+ // The subtype name in its locale. For example 'English (US)' or 'Deutsch (QWERTY)'.
+ final String subtypeName = SubtypeLocale.getFullDisplayName(subtypeLocale);
+ // The locale language name in its locale.
+ final String languageName = locale.getDisplayLanguage(locale);
+ if (!subtypeName.contains(languageName)) {
failedCount++;
messages.append(String.format(
- "subtype name is '%s' and should contain locale '%s' name '%s'\n",
- subtypeName, localeCode, displayName));
+ "subtype name is '%s' and should contain locale '%s' language name '%s'\n",
+ subtypeName, subtypeLocale, languageName));
}
}
assertEquals(messages.toString(), 0, failedCount);
diff --git a/tests/src/com/android/inputmethod/latin/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
index 464930f4c..0c023bd78 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
@@ -19,72 +19,54 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.text.TextUtils;
-import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
+import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.LatinKeyboard;
+import com.android.inputmethod.keyboard.KeyboardSet;
import java.io.File;
import java.util.Locale;
public class SuggestHelper {
protected final Suggest mSuggest;
- protected final LatinKeyboard mKeyboard;
+ protected int mCorrectionMode;
+ protected final Keyboard mKeyboard;
private final KeyDetector mKeyDetector;
- public SuggestHelper(Context context, int dictionaryId, KeyboardId keyboardId) {
+ public SuggestHelper(Context context, int dictionaryId, KeyboardSet keyboardSet) {
// Use null as the locale for Suggest so as to force it to use the internal dictionary
// (and not try to find a dictionary provider for a specified locale)
- mSuggest = new Suggest(context, dictionaryId, null);
- mKeyboard = new LatinKeyboard.Builder(context).load(keyboardId).build();
- mKeyDetector = new KeyDetector(0);
- init();
+ this(new Suggest(context, dictionaryId, null), keyboardSet);
}
protected SuggestHelper(final Context context, final File dictionaryPath,
- final long startOffset, final long length, final KeyboardId keyboardId,
+ final long startOffset, final long length, final KeyboardSet keyboardSet,
final Locale locale) {
- mSuggest = new Suggest(context, dictionaryPath, startOffset, length, null, locale);
- mKeyboard = new LatinKeyboard.Builder(context).load(keyboardId).build();
- mKeyDetector = new KeyDetector(0);
- init();
+ this(new Suggest(context, dictionaryPath, startOffset, length, null, locale), keyboardSet);
}
- private void init() {
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL);
+ private SuggestHelper(final Suggest suggest, final KeyboardSet keyboardSet) {
+ mSuggest = suggest;
+ mKeyboard = keyboardSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
+ mKeyDetector = new KeyDetector(0);
+
+ setCorrectionMode(Suggest.CORRECTION_FULL);
mKeyDetector.setKeyboard(mKeyboard, 0, 0);
mKeyDetector.setProximityCorrectionEnabled(true);
mKeyDetector.setProximityThreshold(mKeyboard.mMostCommonKeyWidth);
}
public void setCorrectionMode(int correctionMode) {
- mSuggest.setCorrectionMode(correctionMode);
+ mCorrectionMode = correctionMode;
}
public boolean hasMainDictionary() {
return mSuggest.hasMainDictionary();
}
- private void addKeyInfo(WordComposer word, char c) {
- for (final Key key : mKeyboard.mKeys) {
- if (key.mCode == c) {
- final int x = key.mX + key.mWidth / 2;
- final int y = key.mY + key.mHeight / 2;
- final int[] codes = mKeyDetector.newCodeArray();
- mKeyDetector.getKeyIndexAndNearbyCodes(x, y, codes);
- word.add(c, codes, x, y);
- return;
- }
- }
- word.add(c, new int[] { c }, WordComposer.NOT_A_COORDINATE, WordComposer.NOT_A_COORDINATE);
- }
-
protected WordComposer createWordComposer(CharSequence s) {
WordComposer word = new WordComposer();
- for (int i = 0; i < s.length(); i++) {
- final char c = s.charAt(i);
- addKeyInfo(word, c);
- }
+ word.setComposingWord(s, mKeyboard, mKeyDetector);
return word;
}
@@ -96,13 +78,13 @@ public class SuggestHelper {
// TODO: This may be slow, but is OK for test so far.
public SuggestedWords getSuggestions(CharSequence typed) {
return mSuggest.getSuggestions(createWordComposer(typed), null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
}
public CharSequence getFirstSuggestion(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -110,7 +92,7 @@ public class SuggestHelper {
public CharSequence getAutoCorrection(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
@@ -119,7 +101,7 @@ public class SuggestHelper {
public int getSuggestIndex(CharSequence typed, CharSequence expected) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
@@ -131,7 +113,8 @@ public class SuggestHelper {
private void getBigramSuggestions(CharSequence previous, CharSequence typed) {
if (!TextUtils.isEmpty(previous) && (typed.length() > 1)) {
WordComposer firstChar = createWordComposer(Character.toString(typed.charAt(0)));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
}
}
@@ -139,7 +122,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -147,7 +130,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
}
@@ -157,7 +140,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
return i;
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTests.java b/tests/src/com/android/inputmethod/latin/SuggestTests.java
index 4080f34be..e12ae58c4 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTests.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTests.java
@@ -33,7 +33,7 @@ public class SuggestTests extends SuggestTestsBase {
final Locale locale = Locale.US;
mHelper = new SuggestHelper(
getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(),
- createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale);
+ createKeyboardSet(locale, Configuration.ORIENTATION_PORTRAIT), locale);
mHelper.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
}
@@ -183,7 +183,8 @@ public class SuggestTests extends SuggestTestsBase {
"part", mHelper.getBigramAutoCorrection("about", "pa"));
// TODO: The following test fails.
// suggested("single: said", "said", mHelper.getAutoCorrection("sa"));
- suggested("bigram: from sa[me]",
- "same", mHelper.getBigramAutoCorrection("from", "sa"));
+ // TODO: The following test fails due to "transpose correction".
+ // suggested("bigram: from sa[me]",
+ // "same", mHelper.getBigramAutoCorrection("from", "sa"));
}
}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
index 058a3e7c0..73e34ba6f 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java
@@ -19,11 +19,12 @@ package com.android.inputmethod.latin;
import android.content.res.AssetFileDescriptor;
import android.content.res.Configuration;
import android.test.AndroidTestCase;
+import android.text.InputType;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.inputmethod.EditorInfo;
-import com.android.inputmethod.keyboard.KeyboardId;
+import com.android.inputmethod.keyboard.KeyboardSet;
import java.io.File;
import java.io.InputStream;
@@ -38,7 +39,12 @@ public class SuggestTestsBase extends AndroidTestCase {
mTestPackageFile = new File(getTestContext().getApplicationInfo().sourceDir);
}
- protected KeyboardId createKeyboardId(Locale locale, int orientation) {
+ protected KeyboardSet createKeyboardSet(Locale locale, int orientation) {
+ return createKeyboardSet(locale, orientation, false);
+ }
+
+ protected KeyboardSet createKeyboardSet(Locale locale, int orientation,
+ boolean touchPositionCorrectionEnabled) {
final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
final int width;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
@@ -50,10 +56,12 @@ public class SuggestTestsBase extends AndroidTestCase {
+ "orientation=" + orientation);
return null;
}
- return new KeyboardId(locale.toString() + " keyboard",
- com.android.inputmethod.latin.R.xml.kbd_qwerty, locale, orientation, width,
- KeyboardId.MODE_TEXT, new EditorInfo(), false, KeyboardId.F2KEY_MODE_NONE,
- false, false, false);
+ final EditorInfo editorInfo = new EditorInfo();
+ editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
+ final KeyboardSet.Builder builder = new KeyboardSet.Builder(getContext(), editorInfo);
+ builder.setScreenGeometry(orientation, width);
+ builder.setSubtype(locale, true, touchPositionCorrectionEnabled);
+ return builder.build();
}
protected InputStream openTestRawResource(int resIdInTest) {
diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
index 023e20a10..74fadf76b 100644
--- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
@@ -16,11 +16,11 @@
package com.android.inputmethod.latin;
-import com.android.inputmethod.keyboard.KeyboardId;
-
import android.content.Context;
import android.text.TextUtils;
+import com.android.inputmethod.keyboard.KeyboardSet;
+
import java.io.File;
import java.util.Locale;
import java.util.StringTokenizer;
@@ -31,14 +31,14 @@ public class UserBigramSuggestHelper extends SuggestHelper {
public UserBigramSuggestHelper(final Context context, final File dictionaryPath,
final long startOffset, final long length, final int userBigramMax,
- final int userBigramDelete, final KeyboardId keyboardId, final Locale locale) {
- super(context, dictionaryPath, startOffset, length, keyboardId, locale);
+ final int userBigramDelete, final KeyboardSet keyboardSet, final Locale locale) {
+ super(context, dictionaryPath, startOffset, length, keyboardSet, locale);
mContext = context;
mUserBigram = new UserBigramDictionary(context, null, locale.toString(),
Suggest.DIC_USER);
mUserBigram.setDatabaseMax(userBigramMax);
mUserBigram.setDatabaseDelete(userBigramDelete);
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
+ setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
mSuggest.setUserBigramDictionary(mUserBigram);
}
@@ -59,7 +59,8 @@ public class UserBigramSuggestHelper extends SuggestHelper {
flushUserBigrams();
if (!TextUtils.isEmpty(previous) && !TextUtils.isEmpty(Character.toString(typed))) {
WordComposer firstChar = createWordComposer(Character.toString(typed));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
boolean reloading = mUserBigram.reloadDictionaryIfRequired();
if (reloading) mUserBigram.waitForDictionaryLoading();
mUserBigram.getBigrams(firstChar, previous, mSuggest);
diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
index 2bc0aabc0..2b88a7ca6 100644
--- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
+++ b/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java
@@ -23,7 +23,7 @@ import com.android.inputmethod.latin.tests.R;
import java.util.Locale;
public class UserBigramSuggestTests extends SuggestTestsBase {
- private static final int SUGGESTION_STARTS = 6;
+ private static final int SUGGESTION_STARTS = 1;
private static final int MAX_DATA = 20;
private static final int DELETE_DATA = 10;
@@ -37,7 +37,7 @@ public class UserBigramSuggestTests extends SuggestTestsBase {
mHelper = new UserBigramSuggestHelper(
getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(),
MAX_DATA, DELETE_DATA,
- createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale);
+ createKeyboardSet(locale, Configuration.ORIENTATION_PORTRAIT), locale);
}
/************************** Tests ************************/
diff --git a/tests/src/com/android/inputmethod/latin/UtilsTests.java b/tests/src/com/android/inputmethod/latin/UtilsTests.java
index 5c0b03a0a..2ef4e2ff5 100644
--- a/tests/src/com/android/inputmethod/latin/UtilsTests.java
+++ b/tests/src/com/android/inputmethod/latin/UtilsTests.java
@@ -18,8 +18,6 @@ package com.android.inputmethod.latin;
import android.test.AndroidTestCase;
-import com.android.inputmethod.latin.tests.R;
-
public class UtilsTests extends AndroidTestCase {
// The following is meant to be a reasonable default for