diff options
Diffstat (limited to 'tests/src')
25 files changed, 7941 insertions, 2541 deletions
diff --git a/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java b/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java deleted file mode 100644 index 93681b616..000000000 --- a/tests/src/com/android/inputmethod/compat/ArraysCompatUtilsTests.java +++ /dev/null @@ -1,103 +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.compat; - -import android.test.AndroidTestCase; - -public class ArraysCompatUtilsTests extends AndroidTestCase { - // See {@link tests.api.java.util.ArraysTest}. - private static final int ARRAY_SIZE = 100; - private final int[] mIntArray = new int[ARRAY_SIZE]; - - @Override - protected void setUp() throws Exception { - super.setUp(); - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - mIntArray[counter] = counter; - } - } - - public void testEmptyArray() { - final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, 0, 0); - assertEquals("empty", ~0, index); - final int compat = ArraysCompatUtils.compatBinarySearch(mIntArray, 0, 0, 0); - assertEquals("empty compat", ~0, compat); - } - - public void testEmptyRangeArray() { - final int mid = ARRAY_SIZE / 3; - final int index = ArraysCompatUtils.binarySearch(mIntArray, mid, mid, 1); - assertEquals("empty", ~mid, index); - final int compat = ArraysCompatUtils.compatBinarySearch(mIntArray, mid, mid, 1); - assertEquals("empty compat", ~mid, compat); - } - - public void testFind() { - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, counter); - assertEquals("found", counter, index); - } - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - final int compat = ArraysCompatUtils.compatBinarySearch( - mIntArray, 0, ARRAY_SIZE, counter); - assertEquals("found compat", counter, compat); - } - } - - public void testFindNegative() { - final int offset = ARRAY_SIZE / 2; - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - mIntArray[counter] -= offset; - } - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - final int index = ArraysCompatUtils.binarySearch( - mIntArray, 0, ARRAY_SIZE, counter - offset); - assertEquals("found", counter, index); - } - for (int counter = 0; counter < ARRAY_SIZE; counter++) { - final int compat = ArraysCompatUtils.compatBinarySearch( - mIntArray, 0, ARRAY_SIZE, counter - offset); - assertEquals("found compat", counter, compat); - } - } - - public void testNotFountAtTop() { - final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, -1); - assertEquals("not found top", ~0, index); - final int compat = ArraysCompatUtils.compatBinarySearch( - mIntArray, 0, ARRAY_SIZE, -1); - assertEquals("not found top compat", ~0, compat); - } - - public void testNotFountAtEnd() { - final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, ARRAY_SIZE); - assertEquals("not found end", ~ARRAY_SIZE, index); - final int compat = ArraysCompatUtils.compatBinarySearch( - mIntArray, 0, ARRAY_SIZE, ARRAY_SIZE); - assertEquals("not found end compat", ~ARRAY_SIZE, compat); - } - - public void testNotFountAtMid() { - final int mid = ARRAY_SIZE / 3; - mIntArray[mid] = mIntArray[mid + 1]; - final int index = ArraysCompatUtils.binarySearch(mIntArray, 0, ARRAY_SIZE, mid); - assertEquals("not found mid", ~mid, index); - final int compat = ArraysCompatUtils.compatBinarySearch( - mIntArray, 0, ARRAY_SIZE, mid); - assertEquals("not found mid compat", ~mid, compat); - } -} 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/MoreKeysKeyboardBuilderFixedOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java new file mode 100644 index 000000000..5c6c83432 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java @@ -0,0 +1,2631 @@ +/* + * 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; + +import android.test.AndroidTestCase; + +import com.android.inputmethod.keyboard.MoreKeysKeyboard.Builder.MoreKeysKeyboardParams; + +public class MoreKeysKeyboardBuilderFixedOrderTests 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 columnNum, + int coordXInParnet) { + final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams(); + params.setParameters(numKeys, columnNum, WIDTH, HEIGHT, coordXInParnet, KEYBOARD_WIDTH, + /* isFixedOrderColumn */true, /* dividerWidth */0); + return params; + } + + public void testLayoutError() { + MoreKeysKeyboardParams params = null; + try { + final int fixColumns = KEYBOARD_WIDTH / WIDTH; + params = createParams(10, fixColumns + 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. + // "<m>" is the default key. + + // <1> + public void testLayout1KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0); + assertEquals("1 key fix 5 M0 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 M0 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 M0 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 M0 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |<1> + public void testLayout1KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0); + assertEquals("1 key fix 5 L0 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 L0 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 L0 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> + public void testLayout1KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1); + assertEquals("1 key fix 5 L1 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 L1 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 L1 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ <1> + public void testLayout1KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2); + assertEquals("1 key fix 5 L2 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 L2 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 L2 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 L2 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1>| + public void testLayout1KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0); + assertEquals("1 key fix 5 R0 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 R0 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 R0 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 R0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> ___| + public void testLayout1KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1); + assertEquals("1 key fix 5 R1 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 R1 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 R1 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 R1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> ___ ___| + public void testLayout1KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2); + assertEquals("1 key fix 5 R2 columns", 1, params.mNumColumns); + assertEquals("1 key fix 5 R2 rows", 1, params.mNumRows); + assertEquals("1 key fix 5 R2 left", 0, params.mLeftKeys); + assertEquals("1 key fix 5 R2 right", 1, params.mRightKeys); + assertEquals("1 key fix 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key fix 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> [2] + public void testLayout2KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0); + assertEquals("2 key fix 5 M0 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 M0 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 M0 left", 0, params.mLeftKeys); + assertEquals("2 key fix 5 M0 right", 2, params.mRightKeys); + assertEquals("2 key fix 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key fix 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |<1> [2] + public void testLayout2KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0); + assertEquals("2 key fix 5 L0 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 L0 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("2 key fix 5 L0 right", 2, params.mRightKeys); + assertEquals("2 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] + public void testLayout2KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1); + assertEquals("2 key fix 5 L1 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 L1 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("2 key fix 5 L1 right", 2, params.mRightKeys); + assertEquals("2 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ <1> [2] + public void testLayout2KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2); + assertEquals("2 key fix 5 L2 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 L2 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 L2 left", 0, params.mLeftKeys); + assertEquals("2 key fix 5 L2 right", 2, params.mRightKeys); + assertEquals("2 key fix 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key fix 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [1] <2>| + public void testLayout2KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0); + assertEquals("2 key fix 5 R0 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 R0 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 R0 left", 1, params.mLeftKeys); + assertEquals("2 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("2 key fix 5 R0 [1]", -1, params.getColumnPos(0)); + assertEquals("2 key fix 5 R0 <2>", 0, params.getColumnPos(1)); + assertEquals("2 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [1] <2> ___| + public void testLayout2KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1); + assertEquals("2 key fix 5 R1 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 R1 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 R1 left", 1, params.mLeftKeys); + assertEquals("2 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("2 key fix 5 R1 [1]", -1, params.getColumnPos(0)); + assertEquals("2 key fix 5 R1 <2>", 0, params.getColumnPos(1)); + assertEquals("2 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // <1> [2] ___| + public void testLayout2KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2); + assertEquals("2 key fix 5 R2 columns", 2, params.mNumColumns); + assertEquals("2 key fix 5 R2 rows", 1, params.mNumRows); + assertEquals("2 key fix 5 R2 left", 0, params.mLeftKeys); + assertEquals("2 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("2 key fix 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key fix 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key fix 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] + // <1> [2] + public void testLayout3KeyFix2M0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0); + assertEquals("3 key fix 2 M0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 M0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 M0 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 M0 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 M0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |[3] + // |<1> [2] + public void testLayout3KeyFix2L0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0); + assertEquals("3 key fix 2 L0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L0 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L0 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] + // |___ <1> [2] + public void testLayout3KeyFix2L1() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1); + assertEquals("3 key fix 2 L1 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L1 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L1 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L1 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L1 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // | [3] + // |___ ___ <1> [2] + public void testLayout3KeyFix2L2() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2); + assertEquals("3 key fix 2 L2 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L2 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L2 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L2 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3]| + // [1] <2>| + public void testLayout3KeyFix2R0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0); + assertEquals("3 key fix 2 R0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R0 left", 1, params.mLeftKeys); + assertEquals("3 key fix 2 R0 right", 1, params.mRightKeys); + assertEquals("3 key fix 2 R0 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 2 R0 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 2 R0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] ___| + // [1] <2> ___| + public void testLayout3KeyFix2R1() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1); + assertEquals("3 key fix 2 R1 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R1 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R1 left", 1, params.mLeftKeys); + assertEquals("3 key fix 2 R1 right", 1, params.mRightKeys); + assertEquals("3 key fix 2 R1 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 2 R1 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 2 R1 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] ___| + // <1> [2] ___| + public void testLayout3KeyFix2R2() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2); + assertEquals("3 key fix 2 R2 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R2 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R2 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 R2 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 R2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] [4] + // <1> [2] + public void testLayout4KeyFix2M0() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_M0); + assertEquals("3 key fix 2 M0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 M0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 M0 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 M0 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 M0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("3 key fix 2 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |[3] [4] + // |<1> [2] + public void testLayout4KeyFix2L0() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L0); + assertEquals("3 key fix 2 L0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L0 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L0 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L0 [4]", 1, params.getColumnPos(3)); + assertEquals("3 key fix 2 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] [4] + // |___ <1> [2] + public void testLayout4KeyFix2L1() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L1); + assertEquals("3 key fix 2 L1 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L1 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L1 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L1 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L1 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L1 [4]", 1, params.getColumnPos(3)); + assertEquals("3 key fix 2 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // | [3] [4] + // |___ ___ <1> [2] + public void testLayout4KeyFix2L2() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_L2); + assertEquals("3 key fix 2 L2 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 L2 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 L2 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 L2 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 L2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 L2 [4]", 1, params.getColumnPos(3)); + assertEquals("3 key fix 2 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] [4]| + // [1] <2>| + public void testLayout4KeyFix2R0() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R0); + assertEquals("3 key fix 2 R0 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R0 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R0 left", 1, params.mLeftKeys); + assertEquals("3 key fix 2 R0 right", 1, params.mRightKeys); + assertEquals("3 key fix 2 R0 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 2 R0 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 2 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key fix 2 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("3 key fix 2 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] [4] ___| + // [1] <2> ___| + public void testLayout4KeyFix2R1() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R1); + assertEquals("3 key fix 2 R1 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R1 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R1 left", 1, params.mLeftKeys); + assertEquals("3 key fix 2 R1 right", 1, params.mRightKeys); + assertEquals("3 key fix 2 R1 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 2 R1 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 2 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key fix 2 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("3 key fix 2 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] [4] ___| + // <1> [2] ___| + public void testLayout4KeyFix2R2() { + MoreKeysKeyboardParams params = createParams(4, 2, XPOS_R2); + assertEquals("3 key fix 2 R2 columns", 2, params.mNumColumns); + assertEquals("3 key fix 2 R2 rows", 2, params.mNumRows); + assertEquals("3 key fix 2 R2 left", 0, params.mLeftKeys); + assertEquals("3 key fix 2 R2 right", 2, params.mRightKeys); + assertEquals("3 key fix 2 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 2 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 2 R2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key fix 2 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("3 key fix 2 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [1] <2> [3] + public void testLayout3KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0); + assertEquals("3 key fix 5 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 left", 1, params.mLeftKeys); + assertEquals("3 key fix 5 right", 2, params.mRightKeys); + assertEquals("3 key fix 5 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 5 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 5 [3]", 1, params.getColumnPos(2)); + assertEquals("3 key fix 5 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] + public void testLayout3KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0); + assertEquals("3 key fix 5 L0 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 L0 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("3 key fix 5 L0 right", 3, params.mRightKeys); + assertEquals("3 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("3 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] + public void testLayout3KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1); + assertEquals("3 key fix 5 L1 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 L1 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("3 key fix 5 L1 right", 3, params.mRightKeys); + assertEquals("3 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("3 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [1] <2> [3] + public void testLayout3KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2); + assertEquals("3 key fix 5 L2 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 L2 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("3 key fix 5 L2 right", 2, params.mRightKeys); + assertEquals("3 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("3 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [1] [2] <3>| + public void testLayout3KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0); + assertEquals("3 key fix 5 R0 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 R0 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 R0 left", 2, params.mLeftKeys); + assertEquals("3 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("3 key fix 5 R0 [1]", -2, params.getColumnPos(0)); + assertEquals("3 key fix 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key fix 5 R0 <3>", 0, params.getColumnPos(2)); + assertEquals("3 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [1] [2] <3> ___| + public void testLayout3KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1); + assertEquals("3 key fix 5 R1 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 R1 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 R1 left", 2, params.mLeftKeys); + assertEquals("3 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("3 key fix 5 R1 [1]", -2, params.getColumnPos(0)); + assertEquals("3 key fix 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key fix 5 R1 <3>", 0, params.getColumnPos(2)); + assertEquals("3 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [1] <2> [3] ___| + public void testLayout3KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2); + assertEquals("3 key fix 5 R2 columns", 3, params.mNumColumns); + assertEquals("3 key fix 5 R2 rows", 1, params.mNumRows); + assertEquals("3 key fix 5 R2 left", 1, params.mLeftKeys); + assertEquals("3 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("3 key fix 5 R2 [1]", -1, params.getColumnPos(0)); + assertEquals("3 key fix 5 R2 <2>", 0, params.getColumnPos(1)); + assertEquals("3 key fix 5 R2 [3]", 1, params.getColumnPos(2)); + assertEquals("3 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key fix 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] + // [1] <2> [3] + public void testLayout4KeyFix3M0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0); + assertEquals("4 key fix 3 M0 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 M0 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 M0 left", 1, params.mLeftKeys); + assertEquals("4 key fix 3 M0 right", 2, params.mRightKeys); + assertEquals("4 key fix 3 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("4 key fix 3 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("4 key fix 3 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("4 key fix 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] + // |<1> [2] [3] + public void testLayout4KeyFix3L0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0); + assertEquals("4 key fix 3 L0 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 L0 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 L0 left", 0, params.mLeftKeys); + assertEquals("4 key fix 3 L0 right", 3, params.mRightKeys); + assertEquals("4 key fix 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key fix 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key fix 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key fix 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] + // |___ <1> [2] [3] + public void testLayout4KeyFix3L1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1); + assertEquals("4 key fix 3 L1 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 L1 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 L1 left", 0, params.mLeftKeys); + assertEquals("4 key fix 3 L1 right", 3, params.mRightKeys); + assertEquals("4 key fix 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key fix 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key fix 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key fix 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ [4] + // |___ ___ [1] <2> [3] + public void testLayout4KeyFix3L2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2); + assertEquals("4 key fix 3 L2 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 L2 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 L2 left", 1, params.mLeftKeys); + assertEquals("4 key fix 3 L2 right", 2, params.mRightKeys); + assertEquals("4 key fix 3 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("4 key fix 3 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("4 key fix 3 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("4 key fix 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4]| + // [1] [2] <3>| + public void testLayout4KeyFix3R0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0); + assertEquals("4 key fix 3 R0 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 R0 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 R0 left", 2, params.mLeftKeys); + assertEquals("4 key fix 3 R0 right", 1, params.mRightKeys); + assertEquals("4 key fix 3 R0 [1]", -2, params.getColumnPos(0)); + assertEquals("4 key fix 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key fix 3 R0 <3>", 0, params.getColumnPos(2)); + assertEquals("4 key fix 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] ___| + // [1] [2] <3> ___| + public void testLayout4KeyFix3R1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1); + assertEquals("4 key fix 3 R1 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 R1 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 R1 left", 2, params.mLeftKeys); + assertEquals("4 key fix 3 R1 right", 1, params.mRightKeys); + assertEquals("4 key fix 3 R1 [1]", -2, params.getColumnPos(0)); + assertEquals("4 key fix 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key fix 3 R1 <3>", 0, params.getColumnPos(2)); + assertEquals("4 key fix 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] ___| + // [1] <2> [3] ___| + public void testLayout4KeyFix3R2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2); + assertEquals("4 key fix 3 R2 columns", 3, params.mNumColumns); + assertEquals("4 key fix 3 R2 rows", 2, params.mNumRows); + assertEquals("4 key fix 3 R2 left", 1, params.mLeftKeys); + assertEquals("4 key fix 3 R2 right", 2, params.mRightKeys); + assertEquals("4 key fix 3 R2 [1]", -1, params.getColumnPos(0)); + assertEquals("4 key fix 3 R2 <2>", 0, params.getColumnPos(1)); + assertEquals("4 key fix 3 R2 [3]", 1, params.getColumnPos(2)); + assertEquals("4 key fix 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key fix 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [5] + // [1] <2> [3] + public void testLayout5KeyFix3M0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0); + assertEquals("5 key fix 3 M0 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 M0 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 M0 left", 1, params.mLeftKeys); + assertEquals("5 key fix 3 M0 right", 2, params.mRightKeys); + assertEquals("5 key fix 3 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 3 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 3 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 3 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 3 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key fix 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] + // |<1> [2] [3] + public void testLayout5KeyFix3L0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0); + assertEquals("5 key fix 3 L0 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 L0 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 L0 left", 0, params.mLeftKeys); + assertEquals("5 key fix 3 L0 right", 3, params.mRightKeys); + assertEquals("5 key fix 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ <1> [2] [3] + public void testLayout5KeyFix3L1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1); + assertEquals("5 key fix 3 L1 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 L1 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 L1 left", 0, params.mLeftKeys); + assertEquals("5 key fix 3 L1 right", 3, params.mRightKeys); + assertEquals("5 key fix 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ [1] <2> [3] + public void testLayout5KeyFix3L2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2); + assertEquals("5 key fix 3 L2 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 L2 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 L2 left", 1, params.mLeftKeys); + assertEquals("5 key fix 3 L2 right", 2, params.mRightKeys); + assertEquals("5 key fix 3 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 3 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 3 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 3 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 3 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key fix 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [5]| + // [1] [2] <3>| + public void testLayout5KeyFix3R0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0); + assertEquals("5 key fix 3 R0 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 R0 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 R0 left", 2, params.mLeftKeys); + assertEquals("5 key fix 3 R0 right", 1, params.mRightKeys); + assertEquals("5 key fix 3 R0 [1]", -2, params.getColumnPos(0)); + assertEquals("5 key fix 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key fix 3 R0 <3>", 0, params.getColumnPos(2)); + assertEquals("5 key fix 3 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("5 key fix 3 R0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] ___| + // [1] [2] <3> ___| + public void testLayout5KeyFix3R1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1); + assertEquals("5 key fix 3 R1 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 R1 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 R1 left", 2, params.mLeftKeys); + assertEquals("5 key fix 3 R1 right", 1, params.mRightKeys); + assertEquals("5 key fix 3 R1 [1]", -2, params.getColumnPos(0)); + assertEquals("5 key fix 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key fix 3 R1 <3>", 0, params.getColumnPos(2)); + assertEquals("5 key fix 3 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("5 key fix 3 R1 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] ___| + // [1] <2> [3] ___| + public void testLayout5KeyFix3R2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2); + assertEquals("5 key fix 3 R2 columns", 3, params.mNumColumns); + assertEquals("5 key fix 3 R2 rows", 2, params.mNumRows); + assertEquals("5 key fix 3 R2 left", 1, params.mLeftKeys); + assertEquals("5 key fix 3 R2 right", 2, params.mRightKeys); + assertEquals("5 key fix 3 R2 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 3 R2 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 3 R2 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 3 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 3 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key fix 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [5] [6] + // [1] <2> [3] + public void testLayout6KeyFix3M0() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_M0); + assertEquals("6 key fix 3 M0 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 M0 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 M0 left", 1, params.mLeftKeys); + assertEquals("6 key fix 3 M0 right", 2, params.mRightKeys); + assertEquals("6 key fix 3 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 3 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 3 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 3 M0 [4]", -1, params.getColumnPos(3)); + assertEquals("6 key fix 3 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 3 M0 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] [6] + // |<1> [2] [3] + public void testLayout6KeyFix3L0() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L0); + assertEquals("6 key fix 3 L0 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 L0 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 L0 left", 0, params.mLeftKeys); + assertEquals("6 key fix 3 L0 right", 3, params.mRightKeys); + assertEquals("6 key fix 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key fix 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key fix 3 L0 [6]", 2, params.getColumnPos(5)); + assertEquals("6 key fix 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] [6] + // |___ <1> [2] [3] + public void testLayout6KeyFix3L1() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L1); + assertEquals("6 key fix 3 L1 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 L1 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 L1 left", 0, params.mLeftKeys); + assertEquals("6 key fix 3 L1 right", 3, params.mRightKeys); + assertEquals("6 key fix 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key fix 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key fix 3 L1 [6]", 2, params.getColumnPos(5)); + assertEquals("6 key fix 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] [6] + // |___ [1] <2> [3] + public void testLayout6KeyFix3L2() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_L2); + assertEquals("6 key fix 3 L2 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 L2 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 L2 left", 1, params.mLeftKeys); + assertEquals("6 key fix 3 L2 right", 2, params.mRightKeys); + assertEquals("6 key fix 3 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 3 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 3 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 3 L2 [4]", -1, params.getColumnPos(3)); + assertEquals("6 key fix 3 L2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 3 L2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [5] [6]| + // [1] [2] <3>| + public void testLayout6KeyFix3R0() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R0); + assertEquals("6 key fix 3 R0 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 R0 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 R0 left", 2, params.mLeftKeys); + assertEquals("6 key fix 3 R0 right", 1, params.mRightKeys); + assertEquals("6 key fix 3 R0 [1]", -2, params.getColumnPos(0)); + assertEquals("6 key fix 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key fix 3 R0 <3>", 0, params.getColumnPos(2)); + assertEquals("6 key fix 3 R0 [4]", -2, params.getColumnPos(3)); + assertEquals("6 key fix 3 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key fix 3 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] [6] ___| + // [1] [2] <3> ___| + public void testLayout6KeyFix3R1() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R1); + assertEquals("6 key fix 3 R1 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 R1 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 R1 left", 2, params.mLeftKeys); + assertEquals("6 key fix 3 R1 right", 1, params.mRightKeys); + assertEquals("6 key fix 3 R1 [1]", -2, params.getColumnPos(0)); + assertEquals("6 key fix 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key fix 3 R1 <3>", 0, params.getColumnPos(2)); + assertEquals("6 key fix 3 R1 [4]", -2, params.getColumnPos(3)); + assertEquals("6 key fix 3 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key fix 3 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] [6] ___| + // [1] <2> [3] ___| + public void testLayout6KeyFix3R2() { + MoreKeysKeyboardParams params = createParams(6, 3, XPOS_R2); + assertEquals("6 key fix 3 R2 columns", 3, params.mNumColumns); + assertEquals("6 key fix 3 R2 rows", 2, params.mNumRows); + assertEquals("6 key fix 3 R2 left", 1, params.mLeftKeys); + assertEquals("6 key fix 3 R2 right", 2, params.mRightKeys); + assertEquals("6 key fix 3 R2 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 3 R2 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 3 R2 [1]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 3 R2 [4]", -1, params.getColumnPos(3)); + assertEquals("6 key fix 3 R2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 3 R2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // <1> [2] [3] [4] + public void testLayout4KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0); + assertEquals("4 key fix 5 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 left", 1, params.mLeftKeys); + assertEquals("4 key fix 5 right", 3, params.mRightKeys); + assertEquals("4 key fix 5 <1>", -1, params.getColumnPos(0)); + assertEquals("4 key fix 5 [2]", 0, params.getColumnPos(1)); + assertEquals("4 key fix 5 [3]", 1, params.getColumnPos(2)); + assertEquals("4 key fix 5 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key fix 5 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] + public void testLayout4KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0); + assertEquals("4 key fix 5 L0 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 L0 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("4 key fix 5 L0 right", 4, params.mRightKeys); + assertEquals("4 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] + public void testLayout4KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1); + assertEquals("4 key fix 5 L1 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 L1 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("4 key fix 5 L1 right", 4, params.mRightKeys); + assertEquals("4 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [1] <2> [3] [4] + public void testLayout4KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2); + assertEquals("4 key fix 5 L2 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 L2 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("4 key fix 5 L2 right", 3, params.mRightKeys); + assertEquals("4 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("4 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("4 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("4 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] <4>| + public void testLayout4KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0); + assertEquals("4 key fix 5 R0 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 R0 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 R0 left", 3, params.mLeftKeys); + assertEquals("4 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("4 key fix 5 R0 [1]", -3, params.getColumnPos(0)); + assertEquals("4 key fix 5 R0 [2]", -2, params.getColumnPos(1)); + assertEquals("4 key fix 5 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key fix 5 R0 <4>", 0, params.getColumnPos(3)); + assertEquals("4 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] <4> ___| + public void testLayout4KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1); + assertEquals("4 key fix 5 R1 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 R1 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 R1 left", 3, params.mLeftKeys); + assertEquals("4 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("4 key fix 5 R1 [1]", -3, params.getColumnPos(0)); + assertEquals("4 key fix 5 R1 [2]", -2, params.getColumnPos(1)); + assertEquals("4 key fix 5 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key fix 5 R1 <4>", 0, params.getColumnPos(3)); + assertEquals("4 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [1] [2] <3> [4] ___| + public void testLayout4KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2); + assertEquals("4 key fix 5 R2 columns", 4, params.mNumColumns); + assertEquals("4 key fix 5 R2 rows", 1, params.mNumRows); + assertEquals("4 key fix 5 R2 left", 2, params.mLeftKeys); + assertEquals("4 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("4 key fix 5 R2 [1]", -2, params.getColumnPos(0)); + assertEquals("4 key fix 5 R2 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key fix 5 R2 <3>", 0, params.getColumnPos(2)); + assertEquals("4 key fix 5 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key fix 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] + // [1] <2> [3] [4] + public void testLayout5KeyFix4M0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0); + assertEquals("5 key fix 4 M0 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 M0 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 M0 left", 1, params.mLeftKeys); + assertEquals("5 key fix 4 M0 right", 3, params.mRightKeys); + assertEquals("5 key fix 4 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 4 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 4 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key fix 4 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] + // |<1> [2] [3] [4] + public void testLayout5KeyFix4L0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0); + assertEquals("5 key fix 4 L0 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 L0 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 L0 left", 0, params.mLeftKeys); + assertEquals("5 key fix 4 L0 right", 4, params.mRightKeys); + assertEquals("5 key fix 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key fix 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] + // |___ <1> [2] [3] [4] + public void testLayout5KeyFix4L1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1); + assertEquals("5 key fix 4 L1 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 L1 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 L1 left", 0, params.mLeftKeys); + assertEquals("5 key fix 4 L1 right", 4, params.mRightKeys); + assertEquals("5 key fix 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key fix 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] + // |___ [1] <2> [3] [4] + public void testLayout5KeyFix4L2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2); + assertEquals("5 key fix 4 L2 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 L2 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 L2 left", 1, params.mLeftKeys); + assertEquals("5 key fix 4 L2 right", 3, params.mRightKeys); + assertEquals("5 key fix 4 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 4 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 4 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key fix 4 L2 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5]| + // [1] [2] [3] <4>| + public void testLayout5KeyFix4R0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0); + assertEquals("5 key fix 4 R0 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 R0 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 R0 left", 3, params.mLeftKeys); + assertEquals("5 key fix 4 R0 right", 1, params.mRightKeys); + assertEquals("5 key fix 4 R0 [1]", -3, params.getColumnPos(0)); + assertEquals("5 key fix 4 R0 [2]", -2, params.getColumnPos(1)); + assertEquals("5 key fix 4 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key fix 4 R0 <4>", 0, params.getColumnPos(3)); + assertEquals("5 key fix 4 R0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] ___| + // [1] [2] [3] <4> ___| + public void testLayout5KeyFix4R1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1); + assertEquals("5 key fix 4 R1 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 R1 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 R1 left", 3, params.mLeftKeys); + assertEquals("5 key fix 4 R1 right", 1, params.mRightKeys); + assertEquals("5 key fix 4 R1 [1]", -3, params.getColumnPos(0)); + assertEquals("5 key fix 4 R1 [2]", -2, params.getColumnPos(1)); + assertEquals("5 key fix 4 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key fix 4 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key fix 4 R1 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] ___| + // [1] [2] <3> [4] ___| + public void testLayout5KeyFix4R2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2); + assertEquals("5 key fix 4 R2 columns", 4, params.mNumColumns); + assertEquals("5 key fix 4 R2 rows", 2, params.mNumRows); + assertEquals("5 key fix 4 R2 left", 2, params.mLeftKeys); + assertEquals("5 key fix 4 R2 right", 2, params.mRightKeys); + assertEquals("5 key fix 4 R2 [1]", -2, params.getColumnPos(0)); + assertEquals("5 key fix 4 R2 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key fix 4 R2 <3>", 0, params.getColumnPos(2)); + assertEquals("5 key fix 4 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("5 key fix 4 R2 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key fix 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [6] + // [1] <2> [3] [4] + public void testLayout6KeyFix4M0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0); + assertEquals("6 key fix 4 M0 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 M0 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 M0 left", 1, params.mLeftKeys); + assertEquals("6 key fix 4 M0 right", 3, params.mRightKeys); + assertEquals("6 key fix 4 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 4 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 4 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key fix 4 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 4 M0 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 4 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("6 key fix 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] [6] + // |<1> [2] [3] [4] + public void testLayout6KeyFix4L0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0); + assertEquals("6 key fix 4 L0 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 L0 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 L0 left", 0, params.mLeftKeys); + assertEquals("6 key fix 4 L0 right", 4, params.mRightKeys); + assertEquals("6 key fix 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key fix 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 4 L0 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] + // |___ <1> [2] [3] [4] + public void testLayout6KeyFix4L1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1); + assertEquals("6 key fix 4 L1 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 L1 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 L1 left", 0, params.mLeftKeys); + assertEquals("6 key fix 4 L1 right", 4, params.mRightKeys); + assertEquals("6 key fix 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key fix 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 4 L1 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] + // |___ [1] <2> [3] [4] + public void testLayout6KeyFix4L2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2); + assertEquals("6 key fix 4 L2 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 L2 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 L2 left", 1, params.mLeftKeys); + assertEquals("6 key fix 4 L2 right", 3, params.mRightKeys); + assertEquals("6 key fix 4 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 4 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 4 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key fix 4 L2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 4 L2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 4 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("6 key fix 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [6]| + // [1] [2] [3] <4>| + public void testLayout6KeyFix4R0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0); + assertEquals("6 key fix 4 R0 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 R0 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 R0 left", 3, params.mLeftKeys); + assertEquals("6 key fix 4 R0 right", 1, params.mRightKeys); + assertEquals("6 key fix 4 R0 [1]", -3, params.getColumnPos(0)); + assertEquals("6 key fix 4 R0 [2]", -2, params.getColumnPos(1)); + assertEquals("6 key fix 4 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key fix 4 R0 <4>", 0, params.getColumnPos(3)); + assertEquals("6 key fix 4 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key fix 4 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] ___| + // [1] [2] [3] <4> ___| + public void testLayout6KeyFix4R1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1); + assertEquals("6 key fix 4 R1 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 R1 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 R1 left", 3, params.mLeftKeys); + assertEquals("6 key fix 4 R1 right", 1, params.mRightKeys); + assertEquals("6 key fix 4 R1 [1]", -3, params.getColumnPos(0)); + assertEquals("6 key fix 4 R1 [2]", -2, params.getColumnPos(1)); + assertEquals("6 key fix 4 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key fix 4 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key fix 4 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key fix 4 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] ___| + // [1] [2] <3> [4] ___| + public void testLayout6KeyFix4R2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2); + assertEquals("6 key fix 4 R2 columns", 4, params.mNumColumns); + assertEquals("6 key fix 4 R2 rows", 2, params.mNumRows); + assertEquals("6 key fix 4 R2 left", 2, params.mLeftKeys); + assertEquals("6 key fix 4 R2 right", 2, params.mRightKeys); + assertEquals("6 key fix 4 R2 [1]", -2, params.getColumnPos(0)); + assertEquals("6 key fix 4 R2 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key fix 4 R2 <3>", 0, params.getColumnPos(2)); + assertEquals("6 key fix 4 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("6 key fix 4 R2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key fix 4 R2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key fix 4 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("6 key fix 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] + // [1] <2> [3] [4] + public void testLayout7KeyFix4M0() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_M0); + assertEquals("7 key fix 4 M0 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 M0 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 M0 left", 1, params.mLeftKeys); + assertEquals("7 key fix 4 M0 right", 3, params.mRightKeys); + assertEquals("7 key fix 4 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("7 key fix 4 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("7 key fix 4 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("7 key fix 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key fix 4 M0 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key fix 4 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 4 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] [6] [7] + // |<1> [2] [3] [4] + public void testLayout7KeyFix4L0() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L0); + assertEquals("7 key fix 4 L0 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 L0 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 L0 left", 0, params.mLeftKeys); + assertEquals("7 key fix 4 L0 right", 4, params.mRightKeys); + assertEquals("7 key fix 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("7 key fix 4 L0 [6]", 1, params.getColumnPos(5)); + assertEquals("7 key fix 4 L0 [7]", 2, params.getColumnPos(6)); + assertEquals("7 key fix 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] [7] + // |___ <1> [2] [3] [4] + public void testLayout7KeyFix4L1() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L1); + assertEquals("7 key fix 4 L1 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 L1 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 L1 left", 0, params.mLeftKeys); + assertEquals("7 key fix 4 L1 right", 4, params.mRightKeys); + assertEquals("7 key fix 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("7 key fix 4 L1 [6]", 1, params.getColumnPos(5)); + assertEquals("7 key fix 4 l1 [7]", 2, params.getColumnPos(6)); + assertEquals("7 key fix 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] [7] + // |___ [1] <2> [3] [4] + public void testLayout7KeyFix4L2() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_L2); + assertEquals("7 key fix 4 L2 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 L2 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 L2 left", 1, params.mLeftKeys); + assertEquals("7 key fix 4 L2 right", 3, params.mRightKeys); + assertEquals("7 key fix 4 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("7 key fix 4 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("7 key fix 4 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("7 key fix 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key fix 4 L2 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key fix 4 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 4 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7]| + // [1] [2] [3] <4>| + public void testLayout7KeyFix4R0() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R0); + assertEquals("7 key fix 4 R0 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 R0 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 R0 left", 3, params.mLeftKeys); + assertEquals("7 key fix 4 R0 right", 1, params.mRightKeys); + assertEquals("7 key fix 4 R0 [1]", -3, params.getColumnPos(0)); + assertEquals("7 key fix 4 R0 [2]", -2, params.getColumnPos(1)); + assertEquals("7 key fix 4 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key fix 4 R0 <4>", 0, params.getColumnPos(3)); + assertEquals("7 key fix 4 R0 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key fix 4 R0 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 4 R0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key fix 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] ___| + // [1] [2] [3] <4> ___| + public void testLayout7KeyFix4R1() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R1); + assertEquals("7 key fix 4 R1 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 R1 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 R1 left", 3, params.mLeftKeys); + assertEquals("7 key fix 4 R1 right", 1, params.mRightKeys); + assertEquals("7 key fix 4 R1 [1]", -3, params.getColumnPos(0)); + assertEquals("7 key fix 4 R1 [2]", -2, params.getColumnPos(1)); + assertEquals("7 key fix 4 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key fix 4 R1 <4>", 0, params.getColumnPos(3)); + assertEquals("7 key fix 4 R1 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key fix 4 R1 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 4 R1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key fix 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] ___| + // [1] [2] <3> [4] ___| + public void testLayout7KeyFix4R2() { + MoreKeysKeyboardParams params = createParams(7, 4, XPOS_R2); + assertEquals("7 key fix 4 R2 columns", 4, params.mNumColumns); + assertEquals("7 key fix 4 R2 rows", 2, params.mNumRows); + assertEquals("7 key fix 4 R2 left", 2, params.mLeftKeys); + assertEquals("7 key fix 4 R2 right", 2, params.mRightKeys); + assertEquals("7 key fix 4 R2 [1]", -2, params.getColumnPos(0)); + assertEquals("7 key fix 4 R2 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key fix 4 R2 <3>", 0, params.getColumnPos(2)); + assertEquals("7 key fix 4 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("7 key fix 4 R2 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key fix 4 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 4 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] [8] + // [1] <2> [3] [4] + public void testLayout8KeyFix4M0() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_M0); + assertEquals("8 key fix 4 M0 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 M0 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 M0 left", 1, params.mLeftKeys); + assertEquals("8 key fix 4 M0 right", 3, params.mRightKeys); + assertEquals("8 key fix 4 M0 [1]", -1, params.getColumnPos(0)); + assertEquals("8 key fix 4 M0 <2>", 0, params.getColumnPos(1)); + assertEquals("8 key fix 4 M0 [3]", 1, params.getColumnPos(2)); + assertEquals("8 key fix 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("8 key fix 4 M0 [5]", -1, params.getColumnPos(4)); + assertEquals("8 key fix 4 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key fix 4 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key fix 4 M0 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key fix 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] [6] [7] [8] + // |<1> [2] [3] [4] + public void testLayout8KeyFix4L0() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L0); + assertEquals("8 key fix 4 L0 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 L0 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 L0 left", 0, params.mLeftKeys); + assertEquals("8 key fix 4 L0 right", 4, params.mRightKeys); + assertEquals("8 key fix 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key fix 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key fix 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key fix 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key fix 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("8 key fix 4 L0 [6]", 1, params.getColumnPos(5)); + assertEquals("8 key fix 4 L0 [7]", 2, params.getColumnPos(6)); + assertEquals("8 key fix 4 L0 [8]", 3, params.getColumnPos(7)); + assertEquals("8 key fix 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] [7] [8] + // |___ <1> [2] [3] [4] + public void testLayout8KeyFix4L1() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L1); + assertEquals("8 key fix 4 L1 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 L1 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 L1 left", 0, params.mLeftKeys); + assertEquals("8 key fix 4 L1 right", 4, params.mRightKeys); + assertEquals("8 key fix 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key fix 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key fix 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key fix 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key fix 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("8 key fix 4 L1 [6]", 1, params.getColumnPos(5)); + assertEquals("8 key fix 4 L1 [7]", 2, params.getColumnPos(6)); + assertEquals("8 key fix 4 L1 [8]", 3, params.getColumnPos(7)); + assertEquals("8 key fix 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] [7] [8] + // |___ [1] <2> [3] [4] + public void testLayout8KeyFix4L2() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_L2); + assertEquals("8 key fix 4 L2 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 L2 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 L2 left", 1, params.mLeftKeys); + assertEquals("8 key fix 4 L2 right", 3, params.mRightKeys); + assertEquals("8 key fix 4 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("8 key fix 4 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("8 key fix 4 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("8 key fix 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("8 key fix 4 L2 [5]", -1, params.getColumnPos(4)); + assertEquals("8 key fix 4 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key fix 4 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key fix 4 L2 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key fix 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] [8]| + // [1] [2] [3] <4>| + public void testLayout8KeyFix4R0() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R0); + assertEquals("8 key fix 4 R0 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 R0 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 R0 left", 3, params.mLeftKeys); + assertEquals("8 key fix 4 R0 right", 1, params.mRightKeys); + assertEquals("8 key fix 4 R0 [1]", -3, params.getColumnPos(0)); + assertEquals("8 key fix 4 R0 [2]", -2, params.getColumnPos(1)); + assertEquals("8 key fix 4 R0 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key fix 4 R0 <4>", 0, params.getColumnPos(3)); + assertEquals("8 key fix 4 R0 [5]", -3, params.getColumnPos(4)); + assertEquals("8 key fix 4 R0 [6]", -2, params.getColumnPos(5)); + assertEquals("8 key fix 4 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key fix 4 R0 [8]", 0, params.getColumnPos(7)); + assertEquals("8 key fix 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] [8] ___| + // [1] [2] [3] <4> ___| + public void testLayout8KeyFix4R1() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R1); + assertEquals("8 key fix 4 R1 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 R1 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 R1 left", 3, params.mLeftKeys); + assertEquals("8 key fix 4 R1 right", 1, params.mRightKeys); + assertEquals("8 key fix 4 R1 [1]", -3, params.getColumnPos(0)); + assertEquals("8 key fix 4 R1 [2]", -2, params.getColumnPos(1)); + assertEquals("8 key fix 4 R1 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key fix 4 R1 <4>", 0, params.getColumnPos(3)); + assertEquals("8 key fix 4 R1 [5]", -3, params.getColumnPos(4)); + assertEquals("8 key fix 4 R1 [6]", -2, params.getColumnPos(5)); + assertEquals("8 key fix 4 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key fix 4 R1 [8]", 0, params.getColumnPos(7)); + assertEquals("8 key fix 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] [7] [8] ___| + // [1] [2] <3> [4] ___| + public void testLayout8KeyFix4R2() { + MoreKeysKeyboardParams params = createParams(8, 4, XPOS_R2); + assertEquals("8 key fix 4 R2 columns", 4, params.mNumColumns); + assertEquals("8 key fix 4 R2 rows", 2, params.mNumRows); + assertEquals("8 key fix 4 R2 left", 2, params.mLeftKeys); + assertEquals("8 key fix 4 R2 right", 2, params.mRightKeys); + assertEquals("8 key fix 4 R2 [1]", -2, params.getColumnPos(0)); + assertEquals("8 key fix 4 R2 [2]", -1, params.getColumnPos(1)); + assertEquals("8 key fix 4 R2 <3>", 0, params.getColumnPos(2)); + assertEquals("8 key fix 4 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("8 key fix 4 R2 [5]", -2, params.getColumnPos(4)); + assertEquals("8 key fix 4 R2 [6]", -1, params.getColumnPos(5)); + assertEquals("8 key fix 4 R2 [7]", 0, params.getColumnPos(6)); + assertEquals("8 key fix 4 R2 [8]", 1, params.getColumnPos(7)); + assertEquals("8 key fix 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [1] [2] <3> [4] [5] + public void testLayout5KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0); + assertEquals("5 key fix 5 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 left", 2, params.mLeftKeys); + assertEquals("5 key fix 5 right", 3, params.mRightKeys); + assertEquals("5 key fix 5 [1]", -2, params.getColumnPos(0)); + assertEquals("5 key fix 5 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key fix 5 <3>", 0, params.getColumnPos(2)); + assertEquals("5 key fix 5 [4]", 1, params.getColumnPos(3)); + assertEquals("5 key fix 5 [5]", 2, params.getColumnPos(4)); + assertEquals("5 key fix 5 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] [5] + public void testLayout5KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0); + assertEquals("5 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 L0 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("5 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("5 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("5 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] [5] + public void testLayout5KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1); + assertEquals("5 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 L1 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("5 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("5 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("5 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [1] <2> [3] [4] [5] + public void testLayout5KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2); + assertEquals("5 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 L2 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("5 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("5 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("5 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("5 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("5 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("5 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] <5>| + public void testLayout5KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0); + assertEquals("5 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 R0 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("5 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("5 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("5 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("5 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("5 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("5 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] <5> ___| + public void testLayout5KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1); + assertEquals("5 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 R1 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("5 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("5 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("5 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("5 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("5 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("5 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] <4> [5] ___| + public void testLayout5KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2); + assertEquals("5 key fix 5 R2 columns", 5, params.mNumColumns); + assertEquals("5 key fix 5 R2 rows", 1, params.mNumRows); + assertEquals("5 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("5 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("5 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("5 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("5 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("5 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] + // [1] [2] <3> [4] [5] + public void testLayout6KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0); + assertEquals("6 key fix 5 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 left", 2, params.mLeftKeys); + assertEquals("6 key fix 5 right", 3, params.mRightKeys); + assertEquals("6 key fix 5 [1]", -2, params.getColumnPos(0)); + assertEquals("6 key fix 5 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key fix 5 <3>", 0, params.getColumnPos(2)); + assertEquals("6 key fix 5 [4]", 1, params.getColumnPos(3)); + assertEquals("6 key fix 5 [5]", 2, params.getColumnPos(4)); + assertEquals("6 key fix 5 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] + // |<1> [2] [3] [4] [5] + public void testLayout6KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0); + assertEquals("6 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 L0 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("6 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("6 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("6 key fix 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] + // |___ <1> [2] [3] [4] [5] + public void testLayout6KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1); + assertEquals("6 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 L1 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("6 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("6 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("6 key fix 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] + // |___ [1] <2> [3] [4] [5] + public void testLayout6KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2); + assertEquals("6 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 L2 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("6 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("6 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("6 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("6 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("6 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("6 key fix 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6]| + // [1] [2] [3] [4] <5>| + public void testLayout6KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0); + assertEquals("6 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 R0 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("6 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("6 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("6 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("6 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("6 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("6 key fix 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] ___| + // [1] [2] [3] [4] <5> ___| + public void testLayout6KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1); + assertEquals("6 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 R1 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("6 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("6 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("6 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("6 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("6 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("6 key fix 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] ___| + // [1] [2] [3] <4> [5] ___| + public void testLayout6KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2); + assertEquals("6 key fix 5 R2 columns", 5, params.mNumColumns); + assertEquals("6 key fix 5 R2 rows", 2, params.mNumRows); + assertEquals("6 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("6 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("6 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("6 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("6 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("6 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key fix 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] [7] + // [1] [2] <3> [4] [5] + public void testLayout7KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0); + assertEquals("7 key fix 5 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 left", 2, params.mLeftKeys); + assertEquals("7 key fix 5 right", 3, params.mRightKeys); + assertEquals("7 key fix 5 [1]", -2, params.getColumnPos(0)); + assertEquals("7 key fix 5 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key fix 5 <3>", 0, params.getColumnPos(2)); + assertEquals("7 key fix 5 [4]", 1, params.getColumnPos(3)); + assertEquals("7 key fix 5 [5]", 2, params.getColumnPos(4)); + assertEquals("7 key fix 5 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 5 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 5 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key fix 5 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] + // |<1> [2] [3] [4] [5] + public void testLayout7KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0); + assertEquals("7 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 L0 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("7 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("7 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key fix 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] + // |___ <1> [2] [3] [4] [5] + public void testLayout7KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1); + assertEquals("7 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 L1 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("7 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("7 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key fix 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] + // |___ [1] <2> [3] [4] [5] + public void testLayout7KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2); + assertEquals("7 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 L2 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("7 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("7 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("7 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("7 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("7 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("7 key fix 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 5 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [7]| + // [1] [2] [3] [4] <5>| + public void testLayout7KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0); + assertEquals("7 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 R0 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("7 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("7 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("7 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("7 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("7 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("7 key fix 5 R0 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 5 R0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] ___| + // [1] [2] [3] [4] <5> ___| + public void testLayout7KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1); + assertEquals("7 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("7 key fix 5 R1 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("7 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("7 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("7 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("7 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("7 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("7 key fix 5 R1 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 5 R1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] ___| + // [1] [2] [3] <4> [5] ___| + public void testLayout7KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2); + assertEquals("7 key fix 5 R2 columns",5, params.mNumColumns); + assertEquals("7 key fix 5 R2 rows", 2, params.mNumRows); + assertEquals("7 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("7 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("7 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("7 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("7 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("7 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key fix 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key fix 5 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 5 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] + // [1] [2] <3> [4] [5] + public void testLayout8KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0); + assertEquals("8 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 M0 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("8 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("8 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("8 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("8 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("8 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("8 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("8 key fix 5 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("8 key fix 5 M0 [7]", 0, params.getColumnPos(6)); + assertEquals("8 key fix 5 M0 [8]", 1, params.getColumnPos(7)); + assertEquals("8 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] + // |<1> [2] [3] [4] [5] + public void testLayout8KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0); + assertEquals("8 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 L0 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("8 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("8 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("8 key fix 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key fix 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key fix 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] + // |___ <1> [2] [3] [4] [5] + public void testLayout8KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1); + assertEquals("8 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 L1 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("8 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("8 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("8 key fix 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key fix 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key fix 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] + // |___ [1] <2> [3] [4] [5] + public void testLayout8KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2); + assertEquals("8 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 L2 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("8 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("8 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("8 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("8 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("8 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("8 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("8 key fix 5 L2 [6]", -1, params.getColumnPos(5)); + assertEquals("8 key fix 5 L2 [7]", 0, params.getColumnPos(6)); + assertEquals("8 key fix 5 L2 [8]", 1, params.getColumnPos(7)); + assertEquals("8 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8]| + // [1] [2] [3] [4] <5>| + public void testLayout8KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0); + assertEquals("8 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 R0 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("8 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("8 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("8 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("8 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("8 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("8 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("8 key fix 5 R0 [6]", -2, params.getColumnPos(5)); + assertEquals("8 key fix 5 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key fix 5 R0 [8]", 0, params.getColumnPos(7)); + assertEquals("8 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] ___| + // [1] [2] [3] [4] <5> ___| + public void testLayout8KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1); + assertEquals("8 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 R1 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("8 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("8 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("8 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("8 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("8 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("8 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("8 key fix 5 R1 [6]", -2, params.getColumnPos(5)); + assertEquals("8 key fix 5 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key fix 5 R1 [8]", 0, params.getColumnPos(7)); + assertEquals("8 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] ___| + // [1] [2] [3] <4> [5] ___| + public void testLayout8KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2); + assertEquals("8 key fix 5 R2 columns", 5, params.mNumColumns); + assertEquals("8 key fix 5 R2 rows", 2, params.mNumRows); + assertEquals("8 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("8 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("8 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("8 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("8 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("8 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("8 key fix 5 R2 [6]", -1, params.getColumnPos(5)); + assertEquals("8 key fix 5 R2 [7]", 0, params.getColumnPos(6)); + assertEquals("8 key fix 5 R2 [8]", 1, params.getColumnPos(7)); + assertEquals("8 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] + // [1] [2] <3> [4] [5] + public void testLayout9KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0); + assertEquals("9 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 M0 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("9 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("9 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("9 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("9 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("9 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("9 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("9 key fix 5 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("9 key fix 5 M0 [7]", 0, params.getColumnPos(6)); + assertEquals("9 key fix 5 M0 [8]", 1, params.getColumnPos(7)); + assertEquals("9 key fix 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("9 key fix 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] [9] + // |<1> [2] [3] [4] [5] + public void testLayout9KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0); + assertEquals("9 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 L0 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("9 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("9 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("9 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("9 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("9 key fix 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key fix 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key fix 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key fix 5 L0 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] + // |___ <1> [2] [3] [4] [5] + public void testLayout9KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1); + assertEquals("9 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 L1 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("9 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("9 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("9 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("9 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("9 key fix 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key fix 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key fix 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key fix 5 L1 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key fix 5 L1 adjust",0, params.mTopRowAdjustment); + assertEquals("9 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] + // |___ [1] <2> [3] [4] [5] + public void testLayout9KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2); + assertEquals("9 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 L2 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("9 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("9 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("9 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("9 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("9 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("9 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("9 key fix 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key fix 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key fix 5 L2 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key fix 5 L2 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key fix 5 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9]| + // [1] [2] [3] [4] <5>| + public void testLayout9KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0); + assertEquals("9 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 R0 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("9 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("9 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("9 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("9 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("9 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("9 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("9 key fix 5 R0 [6]", -3, params.getColumnPos(5)); + assertEquals("9 key fix 5 R0 [7]", -2, params.getColumnPos(6)); + assertEquals("9 key fix 5 R0 [8]", -1, params.getColumnPos(7)); + assertEquals("9 key fix 5 R0 [9]", 0, params.getColumnPos(8)); + assertEquals("9 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] ___| + // [1] [2] [3] [4] <5> ___| + public void testLayout9KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1); + assertEquals("9 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 R1 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("9 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("9 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("9 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("9 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("9 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("9 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("9 key fix 5 R1 [6]", -3, params.getColumnPos(5)); + assertEquals("9 key fix 5 R1 [7]", -2, params.getColumnPos(6)); + assertEquals("9 key fix 5 R1 [8]", -1, params.getColumnPos(7)); + assertEquals("9 key fix 5 R1 [9]", 0, params.getColumnPos(8)); + assertEquals("9 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] ___| + // [1] [2] [3] <4> [5] ___| + public void testLayout9KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2); + assertEquals("9 key fix 5 R2 columns", 5, params.mNumColumns); + assertEquals("9 key fix 5 R2 rows", 2, params.mNumRows); + assertEquals("9 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("9 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("9 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("9 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("9 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("9 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("9 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("9 key fix 5 R2 [6]", -2, params.getColumnPos(5)); + assertEquals("9 key fix 5 R2 [7]", -1, params.getColumnPos(6)); + assertEquals("9 key fix 5 R2 [8]", 0, params.getColumnPos(7)); + assertEquals("9 key fix 5 R2 [9]", 1, params.getColumnPos(8)); + assertEquals("9 key fix 5 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] [A] + // [1] [2] <3> [4] [5] + public void testLayout10KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0); + assertEquals("10 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 M0 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("10 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("10 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("10 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("10 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("10 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("10 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("10 key fix 5 M0 [6]", -2, params.getColumnPos(5)); + assertEquals("10 key fix 5 M0 [7]", -1, params.getColumnPos(6)); + assertEquals("10 key fix 5 M0 [8]", 0, params.getColumnPos(7)); + assertEquals("10 key fix 5 M0 [9]", 1, params.getColumnPos(8)); + assertEquals("10 key fix 5 M0 [A]", 2, params.getColumnPos(9)); + assertEquals("10 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] [9] [A] + // |<1> [2] [3] [4] [5] + public void testLayout10KeyFix5L0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0); + assertEquals("10 key fix 5 L0 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 L0 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 L0 left", 0, params.mLeftKeys); + assertEquals("10 key fix 5 L0 right", 5, params.mRightKeys); + assertEquals("10 key fix 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key fix 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key fix 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("10 key fix 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("10 key fix 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("10 key fix 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key fix 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key fix 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("10 key fix 5 L0 [9]", 3, params.getColumnPos(8)); + assertEquals("10 key fix 5 L0 [A]", 4, params.getColumnPos(9)); + assertEquals("10 key fix 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] [A] + // |___ <1> [2] [3] [4] [5] + public void testLayout10KeyFix5L1() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1); + assertEquals("10 key fix 5 L1 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 L1 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 L1 left", 0, params.mLeftKeys); + assertEquals("10 key fix 5 L1 right", 5, params.mRightKeys); + assertEquals("10 key fix 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key fix 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key fix 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("10 key fix 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("10 key fix 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("10 key fix 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key fix 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key fix 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("10 key fix 5 L1 [9]", 3, params.getColumnPos(8)); + assertEquals("10 key fix 5 L1 [A]", 4, params.getColumnPos(9)); + assertEquals("10 key fix 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] [A] + // |___ [1] <2> [3] [4] [5] + public void testLayout10KeyFix5L2() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2); + assertEquals("10 key fix 5 L2 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 L2 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 L2 left", 1, params.mLeftKeys); + assertEquals("10 key fix 5 L2 right", 4, params.mRightKeys); + assertEquals("10 key fix 5 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("10 key fix 5 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("10 key fix 5 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("10 key fix 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("10 key fix 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("10 key fix 5 L2 [6]", -1, params.getColumnPos(5)); + assertEquals("10 key fix 5 L2 [7]", 0, params.getColumnPos(6)); + assertEquals("10 key fix 5 L2 [8]", 1, params.getColumnPos(7)); + assertEquals("10 key fix 5 L2 [9]", 2, params.getColumnPos(8)); + assertEquals("10 key fix 5 L2 [A]", 3, params.getColumnPos(9)); + assertEquals("10 key fix 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] [A]| + // [1] [2] [3] [4] <5>| + public void testLayout10KeyFix5R0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0); + assertEquals("10 key fix 5 R0 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 R0 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 R0 left", 4, params.mLeftKeys); + assertEquals("10 key fix 5 R0 right", 1, params.mRightKeys); + assertEquals("10 key fix 5 R0 [1]", -4, params.getColumnPos(0)); + assertEquals("10 key fix 5 R0 [2]", -3, params.getColumnPos(1)); + assertEquals("10 key fix 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("10 key fix 5 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("10 key fix 5 R0 <5>", 0, params.getColumnPos(4)); + assertEquals("10 key fix 5 R0 [6]", -4, params.getColumnPos(5)); + assertEquals("10 key fix 5 R0 [7]", -3, params.getColumnPos(6)); + assertEquals("10 key fix 5 R0 [8]", -2, params.getColumnPos(7)); + assertEquals("10 key fix 5 R0 [9]", -1, params.getColumnPos(8)); + assertEquals("10 key fix 5 R0 [A]", 0, params.getColumnPos(9)); + assertEquals("10 key fix 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] [A] ___| + // [1] [2] [3] [4] <5> ___| + public void testLayout10KeyFix5R1() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1); + assertEquals("10 key fix 5 R1 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 R1 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 R1 left", 4, params.mLeftKeys); + assertEquals("10 key fix 5 R1 right", 1, params.mRightKeys); + assertEquals("10 key fix 5 R1 [1]", -4, params.getColumnPos(0)); + assertEquals("10 key fix 5 R1 [2]", -3, params.getColumnPos(1)); + assertEquals("10 key fix 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("10 key fix 5 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("10 key fix 5 R1 <5>", 0, params.getColumnPos(4)); + assertEquals("10 key fix 5 R1 [6]", -4, params.getColumnPos(5)); + assertEquals("10 key fix 5 R1 [7]", -3, params.getColumnPos(6)); + assertEquals("10 key fix 5 R1 [8]", -2, params.getColumnPos(7)); + assertEquals("10 key fix 5 R1 [9]", -1, params.getColumnPos(8)); + assertEquals("10 key fix 5 R1 [A]", 0, params.getColumnPos(9)); + assertEquals("10 key fix 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] [8] [9] [A] ___| + // [1] [2] [3] <4> [5] ___| + public void testLayout10KeyFix5R2() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2); + assertEquals("10 key fix 5 R2 columns", 5, params.mNumColumns); + assertEquals("10 key fix 5 R2 rows", 2, params.mNumRows); + assertEquals("10 key fix 5 R2 left", 3, params.mLeftKeys); + assertEquals("10 key fix 5 R2 right", 2, params.mRightKeys); + assertEquals("10 key fix 5 R2 [1]", -3, params.getColumnPos(0)); + assertEquals("10 key fix 5 R2 [2]", -2, params.getColumnPos(1)); + assertEquals("10 key fix 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("10 key fix 5 R2 <4>", 0, params.getColumnPos(3)); + assertEquals("10 key fix 5 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("10 key fix 5 R2 [6]", -3, params.getColumnPos(5)); + assertEquals("10 key fix 5 R2 [7]", -2, params.getColumnPos(6)); + assertEquals("10 key fix 5 R2 [8]", -1, params.getColumnPos(7)); + assertEquals("10 key fix 5 R2 [9]", 0, params.getColumnPos(8)); + assertEquals("10 key fix 5 R2 [A]", 1, params.getColumnPos(9)); + assertEquals("10 key fix 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key fix 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [B] + // [6] [7] [8] [9] [A] + // [1] [2] <3> [4] [5] + public void testLayout11KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0); + assertEquals("11 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("11 key fix 5 M0 rows", 3, params.mNumRows); + assertEquals("11 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("11 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("11 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("11 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("11 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("11 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("11 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("11 key fix 5 M0 [6]", -2, params.getColumnPos(5)); + assertEquals("11 key fix 5 M0 [7]", -1, params.getColumnPos(6)); + assertEquals("11 key fix 5 M0 [8]", 0, params.getColumnPos(7)); + assertEquals("11 key fix 5 M0 [9]", 1, params.getColumnPos(8)); + assertEquals("11 key fix 5 M0 [A]", 2, params.getColumnPos(9)); + assertEquals("11 key fix 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("11 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("11 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [B] [C] + // [6] [7] [8] [9] [A] + // [1] [2] <3> [4] [5] + public void testLayout12KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0); + assertEquals("12 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("12 key fix 5 M0 rows", 3, params.mNumRows); + assertEquals("12 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("12 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("12 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("12 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("12 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("12 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("12 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("12 key fix 5 M0 [6]", -2, params.getColumnPos(5)); + assertEquals("12 key fix 5 M0 [7]", -1, params.getColumnPos(6)); + assertEquals("12 key fix 5 M0 [8]", 0, params.getColumnPos(7)); + assertEquals("12 key fix 5 M0 [9]", 1, params.getColumnPos(8)); + assertEquals("12 key fix 5 M0 [A]", 2, params.getColumnPos(9)); + assertEquals("12 key fix 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("12 key fix 5 M0 [C]", 1, params.getColumnPos(11)); + assertEquals("12 key fix 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("12 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [B] [C] [D] + // [6] [7] [8] [9] [A] + // [1] [2] <3> [4] [5] + public void testLayout13KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0); + assertEquals("13 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("13 key fix 5 M0 rows", 3, params.mNumRows); + assertEquals("13 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("13 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("13 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("13 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("13 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("13 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("13 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("13 key fix 5 M0 [6]", -2, params.getColumnPos(5)); + assertEquals("13 key fix 5 M0 [7]", -1, params.getColumnPos(6)); + assertEquals("13 key fix 5 M0 [8]", 0, params.getColumnPos(7)); + assertEquals("13 key fix 5 M0 [9]", 1, params.getColumnPos(8)); + assertEquals("13 key fix 5 M0 [A]", 2, params.getColumnPos(9)); + assertEquals("13 key fix 5 M0 [B]", -1, params.getColumnPos(10)); + assertEquals("13 key fix 5 M0 [C]", 0, params.getColumnPos(11)); + assertEquals("13 key fix 5 M0 [D]", 1, params.getColumnPos(12)); + assertEquals("13 key fix 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("13 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [B] [C] [D] [E] + // [6] [7] [8] [9] [A] + // [1] [2] <3> [4] [5] + public void testLayout14KeyFix5M0() { + MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0); + assertEquals("14 key fix 5 M0 columns", 5, params.mNumColumns); + assertEquals("14 key fix 5 M0 rows", 3, params.mNumRows); + assertEquals("14 key fix 5 M0 left", 2, params.mLeftKeys); + assertEquals("14 key fix 5 M0 right", 3, params.mRightKeys); + assertEquals("14 key fix 5 M0 [1]", -2, params.getColumnPos(0)); + assertEquals("14 key fix 5 M0 [2]", -1, params.getColumnPos(1)); + assertEquals("14 key fix 5 M0 <3>", 0, params.getColumnPos(2)); + assertEquals("14 key fix 5 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("14 key fix 5 M0 [5]", 2, params.getColumnPos(4)); + assertEquals("14 key fix 5 M0 [6]", -2, params.getColumnPos(5)); + assertEquals("14 key fix 5 M0 [7]", -1, params.getColumnPos(6)); + assertEquals("14 key fix 5 M0 [8]", 0, params.getColumnPos(7)); + assertEquals("14 key fix 5 M0 [9]", 1, params.getColumnPos(8)); + assertEquals("14 key fix 5 M0 [A]", 2, params.getColumnPos(9)); + assertEquals("14 key fix 5 M0 [B]", -1, params.getColumnPos(10)); + assertEquals("14 key fix 5 M0 [C]", 0, params.getColumnPos(11)); + assertEquals("14 key fix 5 M0 [D]", 1, params.getColumnPos(12)); + assertEquals("14 key fix 5 M0 [E]", 2, params.getColumnPos(13)); + assertEquals("14 key fix 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("14 key fix 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] [5] [6] [7] + public void testLayout7KeyFix7L0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0); + assertEquals("7 key fix 7 L0 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 L0 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 L0 left", 0, params.mLeftKeys); + assertEquals("7 key fix 7 L0 right", 7, params.mRightKeys); + assertEquals("7 key fix 7 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 7 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 7 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 7 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 7 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key fix 7 L0 [6]", 5, params.getColumnPos(5)); + assertEquals("7 key fix 7 L0 [7]", 6, params.getColumnPos(6)); + assertEquals("7 key fix 7 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] [5] [6] [7] + public void testLayout7KeyFix7L1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1); + assertEquals("7 key fix 7 L1 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 L1 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 L1 left", 0, params.mLeftKeys); + assertEquals("7 key fix 7 L1 right", 7, params.mRightKeys); + assertEquals("7 key fix 7 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key fix 7 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key fix 7 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key fix 7 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key fix 7 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key fix 7 L1 [6]", 5, params.getColumnPos(5)); + assertEquals("7 key fix 7 L1 [7]", 6, params.getColumnPos(6)); + assertEquals("7 key fix 7 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [1] <2> [3] [4] [5] [6] [7] + public void testLayout7KeyFix7L2() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2); + assertEquals("7 key fix 7 L2 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 L2 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 L2 left", 1, params.mLeftKeys); + assertEquals("7 key fix 7 L2 right", 6, params.mRightKeys); + assertEquals("7 key fix 7 L2 [1]", -1, params.getColumnPos(0)); + assertEquals("7 key fix 7 L2 <2>", 0, params.getColumnPos(1)); + assertEquals("7 key fix 7 L2 [3]", 1, params.getColumnPos(2)); + assertEquals("7 key fix 7 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key fix 7 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("7 key fix 7 L2 [6]", 4, params.getColumnPos(5)); + assertEquals("7 key fix 7 L2 [7]", 5, params.getColumnPos(6)); + assertEquals("7 key fix 7 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |___ [1] [2] <3> [4] [5] [6] [7] + public void testLayout7KeyFix7L3() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3); + assertEquals("7 key fix 7 L3 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 L3 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 L3 left", 2, params.mLeftKeys); + assertEquals("7 key fix 7 L3 right", 5, params.mRightKeys); + assertEquals("7 key fix 7 L3 [1]", -2, params.getColumnPos(0)); + assertEquals("7 key fix 7 L3 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key fix 7 L3 <3>", 0, params.getColumnPos(2)); + assertEquals("7 key fix 7 L3 [4]", 1, params.getColumnPos(3)); + assertEquals("7 key fix 7 L3 [5]", 2, params.getColumnPos(4)); + assertEquals("7 key fix 7 L3 [6]", 3, params.getColumnPos(5)); + assertEquals("7 key fix 7 L3 [7]", 4, params.getColumnPos(6)); + assertEquals("7 key fix 7 L3 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 L3 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |___ [1] [2] [3] <4> [5] [6] [7] ___ ___| + public void testLayout7KeyFix7M0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0); + assertEquals("7 key fix 7 M0 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 M0 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 M0 left", 3, params.mLeftKeys); + assertEquals("7 key fix 7 M0 right", 4, params.mRightKeys); + assertEquals("7 key fix 7 M0 [1]", -3, params.getColumnPos(0)); + assertEquals("7 key fix 7 M0 [2]", -2, params.getColumnPos(1)); + assertEquals("7 key fix 7 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key fix 7 M0 <4>", 0, params.getColumnPos(3)); + assertEquals("7 key fix 7 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key fix 7 M0 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key fix 7 M0 [7]", 3, params.getColumnPos(6)); + assertEquals("7 key fix 7 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 M0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // |___ ___ [1] [2] [3] <4> [5] [6] [7] ___| + public void testLayout7KeyFix7M1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1); + assertEquals("7 key fix 7 M1 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 M1 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 M1 left", 3, params.mLeftKeys); + assertEquals("7 key fix 7 M1 right", 4, params.mRightKeys); + assertEquals("7 key fix 7 M1 [1]", -3, params.getColumnPos(0)); + assertEquals("7 key fix 7 M1 [2]", -2, params.getColumnPos(1)); + assertEquals("7 key fix 7 M1 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key fix 7 M1 <4>", 0, params.getColumnPos(3)); + assertEquals("7 key fix 7 M1 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key fix 7 M1 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key fix 7 M1 [7]", 3, params.getColumnPos(6)); + assertEquals("7 key fix 7 M1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 M1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] <5> [6] [7] ___| + public void testLayout7KeyFix7R3() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3); + assertEquals("7 key fix 7 R3 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 R3 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 R3 left", 4, params.mLeftKeys); + assertEquals("7 key fix 7 R3 right", 3, params.mRightKeys); + assertEquals("7 key fix 7 R3 [1]", -4, params.getColumnPos(0)); + assertEquals("7 key fix 7 R3 [2]", -3, params.getColumnPos(1)); + assertEquals("7 key fix 7 R3 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key fix 7 R3 [4]", -1, params.getColumnPos(3)); + assertEquals("7 key fix 7 R3 <5>", 0, params.getColumnPos(4)); + assertEquals("7 key fix 7 R3 [6]", 1, params.getColumnPos(5)); + assertEquals("7 key fix 7 R3 [7]", 2, params.getColumnPos(6)); + assertEquals("7 key fix 7 R3 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 R3 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] [5] <6> [7] ___| + public void testLayout7KeyFix7R2() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2); + assertEquals("7 key fix 7 R2 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 R2 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 R2 left", 5, params.mLeftKeys); + assertEquals("7 key fix 7 R2 right", 2, params.mRightKeys); + assertEquals("7 key fix 7 R2 [1]", -5, params.getColumnPos(0)); + assertEquals("7 key fix 7 R2 [2]", -4, params.getColumnPos(1)); + assertEquals("7 key fix 7 R2 [3]", -3, params.getColumnPos(2)); + assertEquals("7 key fix 7 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("7 key fix 7 R2 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key fix 7 R2 <6>", 0, params.getColumnPos(5)); + assertEquals("7 key fix 7 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key fix 7 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 R2 default", WIDTH * 5, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] [5] [6] <7> ___| + public void testLayout7KeyFix7R1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1); + assertEquals("7 key fix 7 R1 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 R1 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 R1 left", 6, params.mLeftKeys); + assertEquals("7 key fix 7 R1 right", 1, params.mRightKeys); + assertEquals("7 key fix 7 R1 [1]", -6, params.getColumnPos(0)); + assertEquals("7 key fix 7 R1 [2]", -5, params.getColumnPos(1)); + assertEquals("7 key fix 7 R1 [3]", -4, params.getColumnPos(2)); + assertEquals("7 key fix 7 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key fix 7 R1 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key fix 7 R1 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 7 R1 <7>", 0, params.getColumnPos(6)); + assertEquals("7 key fix 7 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 R1 default", WIDTH * 6, params.getDefaultKeyCoordX()); + } + + // [1] [2] [3] [4] [5] [6] <7>| + public void testLayout7KeyFix7R0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0); + assertEquals("7 key fix 7 R0 columns", 7, params.mNumColumns); + assertEquals("7 key fix 7 R0 rows", 1, params.mNumRows); + assertEquals("7 key fix 7 R0 left", 6, params.mLeftKeys); + assertEquals("7 key fix 7 R0 right", 1, params.mRightKeys); + assertEquals("7 key fix 7 R0 [1]", -6, params.getColumnPos(0)); + assertEquals("7 key fix 7 R0 [2]", -5, params.getColumnPos(1)); + assertEquals("7 key fix 7 R0 [3]", -4, params.getColumnPos(2)); + assertEquals("7 key fix 7 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key fix 7 R0 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key fix 7 R0 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key fix 7 R0 <7>", 0, params.getColumnPos(6)); + assertEquals("7 key fix 7 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key fix 7 R0 default", WIDTH * 6, 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..31f0e0fef --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java @@ -0,0 +1,2365 @@ +/* + * 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) { + final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams(); + params.setParameters(numKeys, maxColumns, WIDTH, HEIGHT, coordXInParnet, KEYBOARD_WIDTH, + /* isFixedOrderColumn */false, /* dividerWidth */0); + return params; + } + + 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 max 5 M0 columns", 3, params.mNumColumns); + assertEquals("3 key max 5 M0 rows", 1, params.mNumRows); + assertEquals("3 key max 5 M0 left", 1, params.mLeftKeys); + assertEquals("3 key max 5 M0 right", 2, params.mRightKeys); + assertEquals("3 key max 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key max 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key max 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key max 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key max 5 M0 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 M0 columns", 2, params.mNumColumns); + assertEquals("3 key max 2 M0 rows", 2, params.mNumRows); + assertEquals("3 key max 2 M0 left", 0, params.mLeftKeys); + assertEquals("3 key max 2 M0 right", 2, params.mRightKeys); + assertEquals("3 key max 2 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key max 2 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key max 2 M0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key max 2 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key max 2 M0 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", 0, 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", 0, 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", 0, 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", 0, 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", 0, 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", 0, params.mTopRowAdjustment); + assertEquals("3 key max 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] [4] + // <1> [2] + public void testLayout4KeyMax3M0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0); + assertEquals("4 key max 3 M0 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 M0 rows", 2, params.mNumRows); + assertEquals("4 key max 3 M0 left", 0, params.mLeftKeys); + assertEquals("4 key max 3 M0 right", 2, params.mRightKeys); + assertEquals("4 key max 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 3 M0 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 M0 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key max 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |[3] [4] + // |<1> [2] + public void testLayout4KeyMax3L0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0); + assertEquals("4 key max 3 L0 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 L0 rows", 2, params.mNumRows); + assertEquals("4 key max 3 L0 left", 0, params.mLeftKeys); + assertEquals("4 key max 3 L0 right", 2, params.mRightKeys); + assertEquals("4 key max 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 3 L0 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 L0 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key max 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] [4] + // |___ <1> [2] + public void testLayout4KeyMax3L1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1); + assertEquals("4 key max 3 L1 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 L1 rows", 2, params.mNumRows); + assertEquals("4 key max 3 L1 left", 0, params.mLeftKeys); + assertEquals("4 key max 3 L1 right", 2, params.mRightKeys); + assertEquals("4 key max 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 3 L1 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 L1 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key max 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ [3] [4] + // |___ ___ <1> [2] + public void testLayout4KeyMax3L2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2); + assertEquals("4 key max 3 L2 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 L2 rows", 2, params.mNumRows); + assertEquals("4 key max 3 L2 left", 0, params.mLeftKeys); + assertEquals("4 key max 3 L2 right", 2, params.mRightKeys); + assertEquals("4 key max 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 3 L2 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 L2 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key max 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [4] [3]| + // [2] <1>| + public void testLayout4KeyMax3R0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0); + assertEquals("4 key max 3 R0 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 R0 rows", 2, params.mNumRows); + assertEquals("4 key max 3 R0 left", 1, params.mLeftKeys); + assertEquals("4 key max 3 R0 right", 1, params.mRightKeys); + assertEquals("4 key max 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key max 3 R0 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 R0 [4]", -1, params.getColumnPos(3)); + assertEquals("4 key max 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [3] ___| + // [2] <1> ___| + public void testLayout4KeyMax3R1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1); + assertEquals("4 key max 3 R1 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 R1 rows", 2, params.mNumRows); + assertEquals("4 key max 3 R1 left", 1, params.mLeftKeys); + assertEquals("4 key max 3 R1 right", 1, params.mRightKeys); + assertEquals("4 key max 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key max 3 R1 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 R1 [4]", -1, params.getColumnPos(3)); + assertEquals("4 key max 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] [4] ___| + // <1> [2] ___| + public void testLayout4KeyMax3R2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2); + assertEquals("4 key max 3 R2 columns", 2, params.mNumColumns); + assertEquals("4 key max 3 R2 rows", 2, params.mNumRows); + assertEquals("4 key max 3 R2 left", 0, params.mLeftKeys); + assertEquals("4 key max 3 R2 right", 2, params.mRightKeys); + assertEquals("4 key max 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 3 R2 [3]", 0, params.getColumnPos(2)); + assertEquals("4 key max 3 R2 [4]", 1, params.getColumnPos(3)); + assertEquals("4 key max 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 3 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] [4] + public void testLayout4KeyMax4M0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_M0); + assertEquals("4 key max 4 M0 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 M0 rows", 1, params.mNumRows); + assertEquals("4 key max 4 M0 left", 1, params.mLeftKeys); + assertEquals("4 key max 4 M0 right", 3, params.mRightKeys); + assertEquals("4 key max 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key max 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key max 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] + public void testLayout4KeyMax4L0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L0); + assertEquals("4 key max 4 L0 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 L0 rows", 1, params.mNumRows); + assertEquals("4 key max 4 L0 left", 0, params.mLeftKeys); + assertEquals("4 key max 4 L0 right", 4, params.mRightKeys); + assertEquals("4 key max 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key max 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key max 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] + public void testLayout4KeyMax4L1() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L1); + assertEquals("4 key max 4 L1 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 L1 rows", 1, params.mNumRows); + assertEquals("4 key max 4 L1 left", 0, params.mLeftKeys); + assertEquals("4 key max 4 L1 right", 4, params.mRightKeys); + assertEquals("4 key max 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key max 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key max 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] [4] + public void testLayout4KeyMax4L2() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L2); + assertEquals("4 key max 4 L2 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 L2 rows", 1, params.mNumRows); + assertEquals("4 key max 4 L2 left", 1, params.mLeftKeys); + assertEquals("4 key max 4 L2 right", 3, params.mRightKeys); + assertEquals("4 key max 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key max 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key max 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1>| + public void testLayout4KeyMax4R0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R0); + assertEquals("4 key max 4 R0 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 R0 rows", 1, params.mNumRows); + assertEquals("4 key max 4 R0 left", 3, params.mLeftKeys); + assertEquals("4 key max 4 R0 right", 1, params.mRightKeys); + assertEquals("4 key max 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key max 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key max 4 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key max 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1> ___| + public void testLayout4KeyMax4R1() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R1); + assertEquals("4 key max 4 R1 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 R1 rows", 1, params.mNumRows); + assertEquals("4 key max 4 R1 left", 3, params.mLeftKeys); + assertEquals("4 key max 4 R1 right", 1, params.mRightKeys); + assertEquals("4 key max 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key max 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key max 4 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key max 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] <1> [2] ___| + public void testLayout4KeyMax4R2() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R2); + assertEquals("4 key max 4 R2 columns", 4, params.mNumColumns); + assertEquals("4 key max 4 R2 rows", 1, params.mNumRows); + assertEquals("4 key max 4 R2 left", 2, params.mLeftKeys); + assertEquals("4 key max 4 R2 right", 2, params.mRightKeys); + assertEquals("4 key max 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key max 4 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("4 key max 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] [4] + public void testLayout4KeyMax5M0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0); + assertEquals("4 key max 5 M0 columns", 4, params.mNumColumns); + assertEquals("4 key max 5 M0 rows", 1, params.mNumRows); + assertEquals("4 key max 5 M0 left", 1, params.mLeftKeys); + assertEquals("4 key max 5 M0 right", 3, params.mRightKeys); + assertEquals("4 key max 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key max 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key max 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key max 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key max 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key max 5 M0 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()); + } + + // [4] [5] + // [3] <1> [2] + public void testLayout5KeyMax3M0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0); + assertEquals("5 key max 3 M0 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 M0 rows", 2, params.mNumRows); + assertEquals("5 key max 3 M0 left", 1, params.mLeftKeys); + assertEquals("5 key max 3 M0 right", 2, params.mRightKeys); + assertEquals("5 key max 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 3 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 3 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] + // |<1> [2] [3] + public void testLayout5KeyMax3L0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0); + assertEquals("5 key max 3 L0 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 L0 rows", 2, params.mNumRows); + assertEquals("5 key max 3 L0 left", 0, params.mLeftKeys); + assertEquals("5 key max 3 L0 right", 3, params.mRightKeys); + assertEquals("5 key max 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key max 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ <1> [2] [3] + public void testLayout5KeyMax3L1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1); + assertEquals("5 key max 3 L1 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 L1 rows", 2, params.mNumRows); + assertEquals("5 key max 3 L1 left", 0, params.mLeftKeys); + assertEquals("5 key max 3 L1 right", 3, params.mRightKeys); + assertEquals("5 key max 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key max 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ [3] <1> [2] + public void testLayout5KeyMax3L2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2); + assertEquals("5 key max 3 L2 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 L2 rows", 2, params.mNumRows); + assertEquals("5 key max 3 L2 left", 1, params.mLeftKeys); + assertEquals("5 key max 3 L2 right", 2, params.mRightKeys); + assertEquals("5 key max 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 3 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 3 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [4]| + // [3] [2] <1>| + public void testLayout5KeyMax3R0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0); + assertEquals("5 key max 3 R0 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 R0 rows", 2, params.mNumRows); + assertEquals("5 key max 3 R0 left", 2, params.mLeftKeys); + assertEquals("5 key max 3 R0 right", 1, params.mRightKeys); + assertEquals("5 key max 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key max 3 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key max 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key max 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout5KeyMax3R1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1); + assertEquals("5 key max 3 R1 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 R1 rows", 2, params.mNumRows); + assertEquals("5 key max 3 R1 left", 2, params.mLeftKeys); + assertEquals("5 key max 3 R1 right", 1, params.mRightKeys); + assertEquals("5 key max 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key max 3 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key max 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key max 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout5KeyMax3R2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2); + assertEquals("5 key max 3 R2 columns", 3, params.mNumColumns); + assertEquals("5 key max 3 R2 rows", 2, params.mNumRows); + assertEquals("5 key max 3 R2 left", 1, params.mLeftKeys); + assertEquals("5 key max 3 R2 right", 2, params.mRightKeys); + assertEquals("5 key max 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 3 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 3 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 3 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [5] + // [3] <1> [2] + public void testLayout5KeyMax4M0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0); + assertEquals("5 key max 4 M0 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 M0 rows", 2, params.mNumRows); + assertEquals("5 key max 4 M0 left", 1, params.mLeftKeys); + assertEquals("5 key max 4 M0 right", 2, params.mRightKeys); + assertEquals("5 key max 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 4 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 4 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] + // |<1> [2] [3] + public void testLayout5KeyMax4L0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0); + assertEquals("5 key max 4 L0 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 L0 rows", 2, params.mNumRows); + assertEquals("5 key max 4 L0 left", 0, params.mLeftKeys); + assertEquals("5 key max 4 L0 right", 3, params.mRightKeys); + assertEquals("5 key max 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key max 4 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ <1> [2] [3] + public void testLayout5KeyMax4L1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1); + assertEquals("5 key max 4 L1 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 L1 rows", 2, params.mNumRows); + assertEquals("5 key max 4 L1 left", 0, params.mLeftKeys); + assertEquals("5 key max 4 L1 right", 3, params.mRightKeys); + assertEquals("5 key max 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key max 4 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ [3] <1> [2] + public void testLayout5KeyMax4L2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2); + assertEquals("5 key max 4 L2 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 L2 rows", 2, params.mNumRows); + assertEquals("5 key max 4 L2 left", 1, params.mLeftKeys); + assertEquals("5 key max 4 L2 right", 2, params.mRightKeys); + assertEquals("5 key max 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 4 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 4 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [4]| + // [3] [2] <1>| + public void testLayout5KeyMax4R0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0); + assertEquals("5 key max 4 R0 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 R0 rows", 2, params.mNumRows); + assertEquals("5 key max 4 R0 left", 2, params.mLeftKeys); + assertEquals("5 key max 4 R0 right", 1, params.mRightKeys); + assertEquals("5 key max 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key max 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key max 4 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key max 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 4 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout5KeyMax4R1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1); + assertEquals("5 key max 4 R1 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 R1 rows", 2, params.mNumRows); + assertEquals("5 key max 4 R1 left", 2, params.mLeftKeys); + assertEquals("5 key max 4 R1 right", 1, params.mRightKeys); + assertEquals("5 key max 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key max 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key max 4 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key max 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 4 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout5KeyMax4R2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2); + assertEquals("5 key max 4 R2 columns", 3, params.mNumColumns); + assertEquals("5 key max 4 R2 rows", 2, params.mNumRows); + assertEquals("5 key max 4 R2 left", 1, params.mLeftKeys); + assertEquals("5 key max 4 R2 right", 2, params.mRightKeys); + assertEquals("5 key max 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 4 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key max 4 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key max 4 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key max 4 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [3] <1> [2] [4] + public void testLayout5KeyMax5M0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0); + assertEquals("5 key max 5 M0 columns", 5, params.mNumColumns); + assertEquals("5 key max 5 M0 rows", 1, params.mNumRows); + assertEquals("5 key max 5 M0 left", 2, params.mLeftKeys); + assertEquals("5 key max 5 M0 right", 3, params.mRightKeys); + assertEquals("5 key max 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key max 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key max 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key max 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key max 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("5 key max 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key max 5 M0 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 testLayout6KeyMax4M0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0); + assertEquals("6 key max 4 M0 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 M0 rows", 2, params.mNumRows); + assertEquals("6 key max 4 M0 left", 1, params.mLeftKeys); + assertEquals("6 key max 4 M0 right", 2, params.mRightKeys); + assertEquals("6 key max 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key max 4 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 4 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key max 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] [6] + // |<1> [2] [3] + public void testLayout6KeyMax4L0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0); + assertEquals("6 key max 4 L0 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 L0 rows", 2, params.mNumRows); + assertEquals("6 key max 4 L0 left", 0, params.mLeftKeys); + assertEquals("6 key max 4 L0 right", 3, params.mRightKeys); + assertEquals("6 key max 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key max 4 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 4 L0 [6]", 2, params.getColumnPos(5)); + assertEquals("6 key max 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] [6] + // |___ <1> [2] [3] + public void testLayout6KeyMax4L1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1); + assertEquals("6 key max 4 L1 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 L1 rows", 2, params.mNumRows); + assertEquals("6 key max 4 L1 left", 0, params.mLeftKeys); + assertEquals("6 key max 4 L1 right", 3, params.mRightKeys); + assertEquals("6 key max 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key max 4 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 4 L1 [6]", 2, params.getColumnPos(5)); + assertEquals("6 key max 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [4] [5] + // |___ [3] <1> [2] + public void testLayout6KeyMax4L2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2); + assertEquals("6 key max 4 L2 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 L2 rows", 2, params.mNumRows); + assertEquals("6 key max 4 L2 left", 1, params.mLeftKeys); + assertEquals("6 key max 4 L2 right", 2, params.mRightKeys); + assertEquals("6 key max 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key max 4 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 4 L2 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key max 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [5] [4]| + // [3] [2] <1>| + public void testLayout6KeyMax4R0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0); + assertEquals("6 key max 4 R0 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 R0 rows", 2, params.mNumRows); + assertEquals("6 key max 4 R0 left", 2, params.mLeftKeys); + assertEquals("6 key max 4 R0 right", 1, params.mRightKeys); + assertEquals("6 key max 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key max 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key max 4 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key max 4 R0 [6]", -2, params.getColumnPos(5)); + assertEquals("6 key max 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [6] [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout6KeyMax4R1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1); + assertEquals("6 key max 4 R1 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 R1 rows", 2, params.mNumRows); + assertEquals("6 key max 4 R1 left", 2, params.mLeftKeys); + assertEquals("6 key max 4 R1 right", 1, params.mRightKeys); + assertEquals("6 key max 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key max 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key max 4 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("6 key max 4 R1 [6]", -2, params.getColumnPos(5)); + assertEquals("6 key max 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [6] [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout6KeyMax4R2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2); + assertEquals("6 key max 4 R2 columns", 3, params.mNumColumns); + assertEquals("6 key max 4 R2 rows", 2, params.mNumRows); + assertEquals("6 key max 4 R2 left", 1, params.mLeftKeys); + assertEquals("6 key max 4 R2 right", 2, params.mRightKeys); + assertEquals("6 key max 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key max 4 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 4 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 4 R2 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key max 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 4 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [4] [5] + // [3] <1> [2] + public void testLayout6KeyMax5M0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0); + assertEquals("6 key max 5 M0 columns", 3, params.mNumColumns); + assertEquals("6 key max 5 M0 rows", 2, params.mNumRows); + assertEquals("6 key max 5 M0 left", 1, params.mLeftKeys); + assertEquals("6 key max 5 M0 right", 2, params.mRightKeys); + assertEquals("6 key max 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key max 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key max 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key max 5 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("6 key max 5 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("6 key max 5 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key max 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key max 5 M0 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()); + } + + // |<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()); + } + + // [5] [6] [7] + // [3] <1> [2] [4] + public void testLayout7KeyMax5M0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0); + assertEquals("7 key max 5 M0 columns", 4, params.mNumColumns); + assertEquals("7 key max 5 M0 rows", 2, params.mNumRows); + assertEquals("7 key max 5 M0 left", 1, params.mLeftKeys); + assertEquals("7 key max 5 M0 right", 3, params.mRightKeys); + assertEquals("7 key max 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key max 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key max 5 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("7 key max 5 M0 [6]", 1, params.getColumnPos(5)); + assertEquals("7 key max 5 M0 [7]", 2, params.getColumnPos(6)); + assertEquals("7 key max 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key max 5 M0 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", 0, 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", 0, params.mTopRowAdjustment); + assertEquals("7 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] [7] + // |___ [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]", 2, 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", 0, 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", 0, 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()); + } + + // [7] + // [6] [4] [5] + // [3] <1> [2] + public void testLayout7KeyMax3M0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_M0); + assertEquals("7 key max 3 M0 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 M0 rows", 3, params.mNumRows); + assertEquals("7 key max 3 M0 left", 1, params.mLeftKeys); + assertEquals("7 key max 3 M0 right", 2, params.mRightKeys); + assertEquals("7 key max 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 3 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key max 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key max 3 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key max 3 M0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[7] + // |[4] [5] [6] + // |<1> [2] [3] + public void testLayout7KeyMax3L0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L0); + assertEquals("7 key max 3 L0 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 L0 rows", 3, params.mNumRows); + assertEquals("7 key max 3 L0 left", 0, params.mLeftKeys); + assertEquals("7 key max 3 L0 right", 3, params.mRightKeys); + assertEquals("7 key max 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key max 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key max 3 L0 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key max 3 L0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [7] + // |___ [4] [5] [6] + // |___ <1> [2] [3] + public void testLayout7KeyMax3L1() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L1); + assertEquals("7 key max 3 L1 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 L1 rows", 3, params.mNumRows); + assertEquals("7 key max 3 L1 left", 0, params.mLeftKeys); + assertEquals("7 key max 3 L1 right", 3, params.mRightKeys); + assertEquals("7 key max 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key max 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key max 3 L1 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key max 3 L1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [7] + // |___ [6] [4] [5] + // |___ [3] <1> [2] + public void testLayout7KeyMax3L2() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L2); + assertEquals("7 key max 3 L2 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 L2 rows", 3, params.mNumRows); + assertEquals("7 key max 3 L2 left", 1, params.mLeftKeys); + assertEquals("7 key max 3 L2 right", 2, params.mRightKeys); + assertEquals("7 key max 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 3 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key max 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key max 3 L2 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key max 3 L2 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [7]| + // [6] [5] [4]| + // [3] [2] <1>| + public void testLayout7KeyMax3R0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R0); + assertEquals("7 key max 3 R0 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 R0 rows", 3, params.mNumRows); + assertEquals("7 key max 3 R0 left", 2, params.mLeftKeys); + assertEquals("7 key max 3 R0 right", 1, params.mRightKeys); + assertEquals("7 key max 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key max 3 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key max 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key max 3 R0 [6]", -2, params.getColumnPos(5)); + assertEquals("7 key max 3 R0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [7] ___| + // [6] [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout7KeyMax3R1() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R1); + assertEquals("7 key max 3 R1 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 R1 rows", 3, params.mNumRows); + assertEquals("7 key max 3 R1 left", 2, params.mLeftKeys); + assertEquals("7 key max 3 R1 right", 1, params.mRightKeys); + assertEquals("7 key max 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key max 3 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key max 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key max 3 R1 [6]", -2, params.getColumnPos(5)); + assertEquals("7 key max 3 R1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [7] ___| + // [6] [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout7KeyMax3R2() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R2); + assertEquals("7 key max 3 R2 columns", 3, params.mNumColumns); + assertEquals("7 key max 3 R2 rows", 3, params.mNumRows); + assertEquals("7 key max 3 R2 left", 1, params.mLeftKeys); + assertEquals("7 key max 3 R2 right", 2, params.mRightKeys); + assertEquals("7 key max 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key max 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key max 3 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key max 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key max 3 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key max 3 R2 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key max 3 R2 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key max 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key max 3 R2 default", WIDTH * 1, 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", 0, 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",0, params.mTopRowAdjustment); + assertEquals("9 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [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]", 2, params.getColumnPos(7)); + assertEquals("9 key max 5 L2 [9]", 3, 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", 0, 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", 0, 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()); + } + + // [9] [A] [B] + // [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]", 2, 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()); + } + + // [D] [B] [C] [E] + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout14KeyMax5M0() { + MoreKeysKeyboardParams params = createParams(14, 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 [E]", 2, params.getColumnPos(13)); + assertEquals("13 key max 5 M0 adjust", -1, 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..3fc2b021a --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeySpecParserTests.java @@ -0,0 +1,497 @@ +/* + * 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 testEmptyEntry() { + assertMoreKeys("null more keys and null additons", + null, + null, + null); + assertMoreKeys("null more keys and empty additons", + null, + new String[0], + null); + assertMoreKeys("empty more keys and null additons", + new String[0], + null, + null); + assertMoreKeys("empty more keys and empty additons", + new String[0], + new String[0], + null); + + assertMoreKeys("filter out empty more keys", + new String[] { null, "a", "", "b", null }, + null, + new String[] { "a", "b" }); + assertMoreKeys("filter out empty additons", + new String[] { "a", "%", "b", "%", "c", "%", "d" }, + new String[] { null, "A", "", "B", null }, + new String[] { "a", "A", "b", "B", "c", "d" }); + } + + 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 additon", + null, + new String[] { "1" }, + new String[] { "1" }); + assertMoreKeys("null & 2 additons", + 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 additon & marker at head", + new String[] { "%", "A" }, + new String[] { "1" }, + new String[] { "1", "A" }); + assertMoreKeys("1 more key & 1 additon & marker at tail", + new String[] { "A", "%" }, + new String[] { "1" }, + new String[] { "A", "1" }); + assertMoreKeys("2 more keys & 1 additon & 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 additons & marker at head", + new String[] { "%", "A", "B" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "B", "2" }); + assertMoreKeys("1 more key & 2 additons & marker at tail", + new String[] { "A", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "A", "B", "1", "2" }); + assertMoreKeys("2 more keys & 2 additons & 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 more keys. + assertMoreKeys("0 more key & 2 additons & 2 markers", + new String[] { "%", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "2", "3" }); + assertMoreKeys("1 more key & 2 additons & 2 markers at head", + new String[] { "%", "%", "A" }, + new String[] { "1", "2", "3" }, + new String[] { "1", "2", "A", "3" }); + assertMoreKeys("1 more key & 2 additons & 2 markers at tail", + new String[] { "A", "%", "%" }, + new String[] { "1", "2", "3" }, + new String[] { "A", "1", "2", "3" }); + assertMoreKeys("2 more keys & 2 additons & 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 additons & 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 additons & 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 additons & 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 additon & excess marker", + new String[] { "%", "%" }, + new String[] { "1" }, + new String[] { "1" }); + assertMoreKeys("1 more key & 1 additon & excess marker at head", + new String[] { "%", "%", "A" }, + new String[] { "1" }, + new String[] { "1", "A" }); + assertMoreKeys("1 more key & 1 additon & excess marker at tail", + new String[] { "A", "%", "%" }, + new String[] { "1" }, + new String[] { "A", "1" }); + assertMoreKeys("2 more keys & 1 additon & excess marker at middle", + new String[] { "A", "%", "%", "B" }, + new String[] { "1" }, + new String[] { "A", "1", "B" }); + assertMoreKeys("2 more keys & 1 additon & excess markers", + new String[] { "%", "A", "%", "B", "%" }, + new String[] { "1" }, + new String[] { "1", "A", "B" }); + assertMoreKeys("2 more keys & 2 additons & excess markers", + new String[] { "%", "A", "%", "B", "%" }, + new String[] { "1", "2" }, + new String[] { "1", "A", "2", "B" }); + assertMoreKeys("2 more keys & 3 additons & 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..0e6caaf87 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java @@ -0,0 +1,243 @@ +/* + * 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); + } + + // Chording letter key with shift key. + public void testChordingLetterAndShiftKey() { + // Press letter key and hold. + pressKey('z', ALPHABET_UNSHIFTED); + // Press shift key, {@link PointerTracker} will fire a phantom release letter key. + chordingReleaseKey('z', ALPHABET_UNSHIFTED); + chordingPressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + // Press another letter key and hold. + chordingPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Release shift key + releaseKey(CODE_SHIFT, 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..de2a50fcf --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java @@ -0,0 +1,755 @@ +/* + * 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); + // Press/release "?123" key, enter into symbols (not symbols shifted). + pressAndReleaseKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED, SYMBOLS_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); + } + + // Rapidly type shift key. + public void testRapidShiftTyping() { + // Press/release shift key + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + + // Press/release shift key to enter alphabet manual shifted. + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Press/release shift key + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + + // Long press shift key to enter alphabet shift locked. + longPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_SHIFT_LOCKED); + // Press/release shift key + pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + + // Set auto caps mode on. + setAutoCapsMode(AUTO_CAPS); + // Press/release auto caps trigger letter to enter alphabet automatic shifted. + pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); + // Press/release shift key + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('j', ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); + // Rapidly press/release shift key. + secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Rapidly press/release letter key. + secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_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..999e08a8d --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java @@ -0,0 +1,193 @@ +/* + * 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 void cancelDoubleTapTimer() { + mIsInDoubleTapTimeout = false; + } + + @Override + public boolean isInDoubleTapTimeout() { + return mIsInDoubleTapTimeout; + } + + @Override + public void startLongPressTimer(int code) { + mLongPressTimeoutCode = code; + } + + @Override + public void cancelLongPressTimer() { + mLongPressTimeoutCode = 0; + } + + @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/BlueUnderlineTests.java b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java new file mode 100644 index 000000000..81f744da9 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java @@ -0,0 +1,102 @@ +/* + * 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 com.android.inputmethod.keyboard.Keyboard; + +public class BlueUnderlineTests extends InputTestsBase { + + public void testBlueUnderline() { + final String STRING_TO_TYPE = "tgis"; + final int EXPECTED_SPAN_START = 0; + final int EXPECTED_SPAN_END = 4; + type(STRING_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + final Span span = new Span(mTextView.getText()); + assertEquals("show blue underline, span start", EXPECTED_SPAN_START, span.mStart); + assertEquals("show blue underline, span end", EXPECTED_SPAN_END, span.mEnd); + assertEquals("show blue underline, span color", true, span.isAutoCorrectionIndicator()); + } + + public void testBlueUnderlineDisappears() { + final String STRING_1_TO_TYPE = "tgis"; + final String STRING_2_TO_TYPE = "q"; + final int EXPECTED_SPAN_START = 0; + final int EXPECTED_SPAN_END = 5; + type(STRING_1_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + type(STRING_2_TO_TYPE); + // We haven't have time to look into the dictionary yet, so the line should still be + // blue to avoid any flicker. + final Span spanBefore = new Span(mTextView.getText()); + assertEquals("extend blue underline, span start", EXPECTED_SPAN_START, spanBefore.mStart); + assertEquals("extend blue underline, span end", EXPECTED_SPAN_END, spanBefore.mEnd); + assertEquals("extend blue underline, span color", true, + spanBefore.isAutoCorrectionIndicator()); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + // Now we have been able to re-evaluate the word, there shouldn't be an auto-correction span + final Span spanAfter = new Span(mTextView.getText()); + assertNull("hide blue underline", spanAfter.mSpan); + } + + public void testBlueUnderlineOnBackspace() { + final String STRING_TO_TYPE = "tgis"; + final int EXPECTED_SPAN_START = 0; + final int EXPECTED_SPAN_END = 4; + type(STRING_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + type(Keyboard.CODE_SPACE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + type(Keyboard.CODE_DELETE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + type(Keyboard.CODE_DELETE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + final Span span = new Span(mTextView.getText()); + assertEquals("show blue underline after backspace, span start", + EXPECTED_SPAN_START, span.mStart); + assertEquals("show blue underline after backspace, span end", + EXPECTED_SPAN_END, span.mEnd); + assertEquals("show blue underline after backspace, span color", true, + span.isAutoCorrectionIndicator()); + } + + public void testBlueUnderlineDisappearsWhenCursorMoved() { + final String STRING_TO_TYPE = "tgis"; + final int NEW_CURSOR_POSITION = 0; + type(STRING_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + // Simulate the onUpdateSelection() event + mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); + runMessages(); + // Here the blue underline has been set. testBlueUnderline() is testing for this already, + // so let's not test it here again. + // Now simulate the user moving the cursor. + mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION); + mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + final Span span = new Span(mTextView.getText()); + assertNull("blue underline removed when cursor is moved", span.mSpan); + } +} 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/InputLogicFrenchTests.java b/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java new file mode 100644 index 000000000..5db120d82 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/InputLogicFrenchTests.java @@ -0,0 +1,59 @@ +/* + * 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 com.android.inputmethod.keyboard.Keyboard; + +public class InputLogicFrenchTests extends InputTestsBase { + + public void testAutoCorrectForFrench() { + final String STRING_TO_TYPE = "irq "; + final String EXPECTED_RESULT = "ira "; + changeLanguage("fr"); + type(STRING_TO_TYPE); + assertEquals("simple auto-correct for French", EXPECTED_RESULT, + mTextView.getText().toString()); + } + + public void testManualPickThenSeparatorForFrench() { + final String WORD1_TO_TYPE = "test"; + final String WORD2_TO_TYPE = "!"; + final String EXPECTED_RESULT = "test !"; + changeLanguage("fr"); + type(WORD1_TO_TYPE); + mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); + type(WORD2_TO_TYPE); + assertEquals("manual pick then separator for French", EXPECTED_RESULT, + mTextView.getText().toString()); + } + + public void testWordThenSpaceThenPunctuationFromStripTwiceForFrench() { + final String WORD_TO_TYPE = "test "; + final String PUNCTUATION_FROM_STRIP = "!"; + final String EXPECTED_RESULT = "test !!"; + changeLanguage("fr"); + type(WORD_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + assertTrue("type word then type space should display punctuation strip", + mLatinIME.isShowingPunctuationList()); + mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); + mLatinIME.pickSuggestionManually(0, PUNCTUATION_FROM_STRIP); + assertEquals("type word then type space then punctuation from strip twice for French", + EXPECTED_RESULT, mTextView.getText().toString()); + } +} 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..11eb6ab19 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java @@ -0,0 +1,233 @@ +/* + * 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 com.android.inputmethod.keyboard.Keyboard; + +public class InputLogicTests extends InputTestsBase { + + 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 testPickAutoCorrectionThenBackspace() { + final String WORD_TO_TYPE = "tgis"; + final String WORD_TO_PICK = "this"; + final String EXPECTED_RESULT = "tgis"; + type(WORD_TO_TYPE); + // Choose the auto-correction, which is always in position 0. For "tgis", the + // auto-correction should be "this". + mLatinIME.pickSuggestionManually(0, WORD_TO_PICK); + mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); + assertEquals("pick typed word over auto-correction then backspace", WORD_TO_PICK, + mTextView.getText().toString()); + type(Keyboard.CODE_DELETE); + assertEquals("pick typed word over auto-correction 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); + assertEquals("pick typed word over auto-correction then backspace", WORD_TO_TYPE, + mTextView.getText().toString()); + type(Keyboard.CODE_DELETE); + assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT, + mTextView.getText().toString()); + } + + public void testPickDifferentSuggestionThenBackspace() { + final String WORD_TO_TYPE = "tgis"; + final String WORD_TO_PICK = "thus"; + final String EXPECTED_RESULT = "tgis"; + type(WORD_TO_TYPE); + // Choose the second suggestion, which should be in position 2 and should be "thus" + // when "tgis is typed. + mLatinIME.pickSuggestionManually(2, WORD_TO_PICK); + mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); + assertEquals("pick different suggestion then backspace", WORD_TO_PICK, + mTextView.getText().toString()); + type(Keyboard.CODE_DELETE); + assertEquals("pick different suggestion 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 testAutoCorrectWithPeriod() { + final String STRING_TO_TYPE = "tgis."; + final String EXPECTED_RESULT = "this."; + type(STRING_TO_TYPE); + assertEquals("auto-correct with period", EXPECTED_RESULT, mTextView.getText().toString()); + } + + public void testAutoCorrectWithPeriodThenRevert() { + final String STRING_TO_TYPE = "tgis."; + final String EXPECTED_RESULT = "tgis."; + type(STRING_TO_TYPE); + mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); + type(Keyboard.CODE_DELETE); + assertEquals("auto-correct with period then revert", 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 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", EXPECTED_RESULT, + mTextView.getText().toString()); + } + + public void testManualPickThenManualPick() { + final String WORD1_TO_TYPE = "this"; + final String WORD2_TO_PICK = "is"; + final String EXPECTED_RESULT = "this is"; + type(WORD1_TO_TYPE); + mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); + // Here we fake picking a word through bigram prediction. This test is taking + // advantage of the fact that Latin IME blindly trusts the caller of #pickSuggestionManually + // to actually pass the right string. + mLatinIME.pickSuggestionManually(1, WORD2_TO_PICK); + assertEquals("manual pick then manual pick", EXPECTED_RESULT, + 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()); + } + // TODO: Add some tests for non-BMP characters +} diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java new file mode 100644 index 000000000..5f6b229dd --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java @@ -0,0 +1,260 @@ +/* + * 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.SharedPreferences; +import android.os.Looper; +import android.os.MessageQueue; +import android.preference.PreferenceManager; +import android.test.ServiceTestCase; +import android.text.InputType; +import android.text.SpannableStringBuilder; +import android.text.style.SuggestionSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.view.inputmethod.InputMethodInfo; +import android.view.inputmethod.InputMethodManager; +import android.view.inputmethod.InputMethodSubtype; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.android.inputmethod.keyboard.Key; +import com.android.inputmethod.keyboard.Keyboard; +import com.android.inputmethod.keyboard.KeyboardActionListener; + +import java.util.HashMap; + +public class InputTestsBase extends ServiceTestCase<LatinIME> { + + private static final String PREF_DEBUG_MODE = "debug_mode"; + + // The message that sets the underline is posted with a 100 ms delay + protected static final int DELAY_TO_WAIT_FOR_UNDERLINE = 200; + + protected LatinIME mLatinIME; + protected Keyboard mKeyboard; + protected TextView mTextView; + protected InputConnection mInputConnection; + private final HashMap<String, InputMethodSubtype> mSubtypeMap = + new HashMap<String, InputMethodSubtype>(); + + // A helper class to ease span tests + public static class Span { + final SpannableStringBuilder mInputText; + final SuggestionSpan mSpan; + final int mStart; + final int mEnd; + // The supplied CharSequence should be an instance of SpannableStringBuilder, + // and it should contain exactly zero or one SuggestionSpan. Otherwise, an exception + // is thrown. + public Span(final CharSequence inputText) { + mInputText = (SpannableStringBuilder)inputText; + final SuggestionSpan[] spans = + mInputText.getSpans(0, mInputText.length(), SuggestionSpan.class); + if (0 == spans.length) { + mSpan = null; + mStart = -1; + mEnd = -1; + } else if (1 == spans.length) { + mSpan = spans[0]; + mStart = mInputText.getSpanStart(mSpan); + mEnd = mInputText.getSpanEnd(mSpan); + } else { + throw new RuntimeException("Expected one SuggestionSpan, found " + spans.length); + } + } + public boolean isAutoCorrectionIndicator() { + return 0 != (SuggestionSpan.FLAG_AUTO_CORRECTION & mSpan.getFlags()); + } + } + + public InputTestsBase() { + super(LatinIME.class); + } + + // returns the previous setting value + protected 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); + initSubtypeMap(); + 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; + mKeyboard = mLatinIME.mKeyboardSwitcher.getKeyboard(); + changeLanguage("en_US"); + } + + private void initSubtypeMap() { + final InputMethodManager imm = (InputMethodManager)mLatinIME.getSystemService( + Context.INPUT_METHOD_SERVICE); + final String packageName = mLatinIME.getPackageName(); + for (final InputMethodInfo imi : imm.getEnabledInputMethodList()) { + if (imi.getPackageName().equals(packageName)) { + for (final InputMethodSubtype ims : + imm.getEnabledInputMethodSubtypeList(imi, true)) { + final String locale = ims.getLocale(); + mSubtypeMap.put(locale, ims); + } + return; + } + } + fail("LatinIME is disabled"); + } + + // We need to run the messages added to the handler from LatinIME. The only way to do + // that is to call Looper#loop() on the right looper, so we're going to get the looper + // object and call #loop() here. The messages in the handler actually run on the UI + // thread of the keyboard by design of the handler, so we want to call it synchronously + // on the same thread that the tests are running on to mimic the actual environment as + // closely as possible. + // Now, Looper#loop() never exits in normal operation unless the Looper#quit() method + // is called, so we need to do that at the right time so that #loop() returns at some + // point and we don't end up in an infinite loop. + // After we quit, the looper is still technically ready to process more messages but + // the handler will refuse to enqueue any because #quit() has been called and it + // explicitly tests for it on message enqueuing, so we'll have to reset it so that + // it lets us continue normal operation. + protected void runMessages() { + // Here begins deep magic. + final Looper looper = mLatinIME.mHandler.getLooper(); + mLatinIME.mHandler.post(new Runnable() { + @Override + public void run() { + looper.quit(); + } + }); + // The only way to get out of Looper#loop() is to call #quit() on it (or on its queue). + // Once #quit() is called remaining messages are not processed, which is why we post + // a message that calls it instead of calling it directly. + looper.loop(); + + // Once #quit() has been called, the message queue has an "mQuiting" field that prevents + // any subsequent post in this queue. However the queue itself is still fully functional! + // If we have a way of resetting "queue.mQuiting" then we can continue using it as normal, + // coming back to this method to run the messages. + MessageQueue queue = looper.getQueue(); + try { + // However there is no way of doing it externally, and mQuiting is private. + // So... get out the big guns. + java.lang.reflect.Field f = MessageQueue.class.getDeclaredField("mQuiting"); + f.setAccessible(true); // What do you mean "private"? + f.setBoolean(queue, false); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + // type(int) and type(String): helper methods to send a code point resp. a string to LatinIME. + protected 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); + for (final Key key : mKeyboard.mKeys) { + if (key.mCode == codePoint) { + final int x = key.mX + key.mWidth / 2; + final int y = key.mY + key.mHeight / 2; + mLatinIME.onCodeInput(codePoint, x, y); + return; + } + } + mLatinIME.onCodeInput(codePoint, + KeyboardActionListener.NOT_A_TOUCH_COORDINATE, + KeyboardActionListener.NOT_A_TOUCH_COORDINATE); + //mLatinIME.onReleaseKey(codePoint, false); + } + + protected void type(final String stringToType) { + for (int i = 0; i < stringToType.length(); i = stringToType.offsetByCodePoints(i, 1)) { + type(stringToType.codePointAt(i)); + } + } + + protected void waitForDictionaryToBeLoaded() { + int remainingAttempts = 10; + while (remainingAttempts > 0 && !mLatinIME.mSuggest.hasMainDictionary()) { + try { + Thread.sleep(200); + } catch (InterruptedException e) { + // Don't do much + } finally { + --remainingAttempts; + } + } + if (!mLatinIME.mSuggest.hasMainDictionary()) { + throw new RuntimeException("Can't initialize the main dictionary"); + } + } + + protected void changeLanguage(final String locale) { + final InputMethodSubtype subtype = mSubtypeMap.get(locale); + if (subtype == null) { + fail("InputMethodSubtype for locale " + locale + " is not enabled"); + } + SubtypeSwitcher.getInstance().updateSubtype(subtype); + waitForDictionaryToBeLoaded(); + } + + + // Helper to avoid writing the try{}catch block each time + protected static void sleep(final int milliseconds) { + try { + Thread.sleep(milliseconds); + } catch (InterruptedException e) {} + } +} diff --git a/tests/src/com/android/inputmethod/latin/PunctuationTests.java b/tests/src/com/android/inputmethod/latin/PunctuationTests.java new file mode 100644 index 000000000..1b5b72ff8 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/PunctuationTests.java @@ -0,0 +1,149 @@ +/* + * 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; + +public class PunctuationTests extends InputTestsBase { + + public void testWordThenSpaceThenPunctuationFromStripTwice() { + final String WORD_TO_TYPE = "this "; + final String PUNCTUATION_FROM_STRIP = "!"; + final String EXPECTED_RESULT = "this!! "; + type(WORD_TO_TYPE); + sleep(DELAY_TO_WAIT_FOR_UNDERLINE); + runMessages(); + assertTrue("type word then type space should display punctuation strip", + mLatinIME.isShowingPunctuationList()); + 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 testManualPickThenManualPickWithPunctAtStart() { + final String WORD1_TO_TYPE = "this"; + final String WORD2_TO_PICK = "!is"; + final String EXPECTED_RESULT = "this!is"; + type(WORD1_TO_TYPE); + mLatinIME.pickSuggestionManually(0, WORD1_TO_TYPE); + mLatinIME.pickSuggestionManually(1, WORD2_TO_PICK); + assertEquals("manual pick then manual pick a word with punct at start", EXPECTED_RESULT, + 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()); + } + + public void testAutoCorrectionWithSingleQuoteInside() { + final String WORD_TO_TYPE = "you'f "; + final String EXPECTED_RESULT = "you'd "; + type(WORD_TO_TYPE); + assertEquals("auto-correction with single quote inside", + EXPECTED_RESULT, mTextView.getText().toString()); + } + + public void testAutoCorrectionWithSingleQuotesAround() { + final String WORD_TO_TYPE = "'tgis' "; + final String EXPECTED_RESULT = "'this' "; + type(WORD_TO_TYPE); + assertEquals("auto-correction with single quotes around", + EXPECTED_RESULT, mTextView.getText().toString()); + } +} diff --git a/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java b/tests/src/com/android/inputmethod/latin/SubtypeLocaleTests.java index fec3e8ee1..089fdc52c 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,33 @@ 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()); + if (locale.getLanguage().equals("zz")) { + // This is special language name for language agnostic usage. + continue; + } + 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 deleted file mode 100644 index 464930f4c..000000000 --- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java +++ /dev/null @@ -1,167 +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.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.KeyboardId; -import com.android.inputmethod.keyboard.LatinKeyboard; - -import java.io.File; -import java.util.Locale; - -public class SuggestHelper { - protected final Suggest mSuggest; - protected final LatinKeyboard mKeyboard; - private final KeyDetector mKeyDetector; - - public SuggestHelper(Context context, int dictionaryId, KeyboardId keyboardId) { - // 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(); - } - - protected SuggestHelper(final Context context, final File dictionaryPath, - final long startOffset, final long length, final KeyboardId keyboardId, - 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(); - } - - private void init() { - mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL); - mKeyDetector.setKeyboard(mKeyboard, 0, 0); - mKeyDetector.setProximityCorrectionEnabled(true); - mKeyDetector.setProximityThreshold(mKeyboard.mMostCommonKeyWidth); - } - - public void setCorrectionMode(int correctionMode) { - mSuggest.setCorrectionMode(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); - } - return word; - } - - public boolean isValidWord(CharSequence typed) { - return AutoCorrection.isValidWord(mSuggest.getUnigramDictionaries(), - typed, false); - } - - // 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()); - } - - public CharSequence getFirstSuggestion(CharSequence typed) { - WordComposer word = createWordComposer(typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, null, - mKeyboard.getProximityInfo()); - // Note that suggestions.getWord(0) is the word user typed. - return suggestions.size() > 1 ? suggestions.getWord(1) : null; - } - - public CharSequence getAutoCorrection(CharSequence typed) { - WordComposer word = createWordComposer(typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, null, - mKeyboard.getProximityInfo()); - // Note that suggestions.getWord(0) is the word user typed. - return (suggestions.size() > 1 && mSuggest.hasAutoCorrection()) - ? suggestions.getWord(1) : null; - } - - public int getSuggestIndex(CharSequence typed, CharSequence expected) { - WordComposer word = createWordComposer(typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, null, - mKeyboard.getProximityInfo()); - // 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)) - return i; - } - return -1; - } - - 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()); - } - } - - public CharSequence getBigramFirstSuggestion(CharSequence previous, CharSequence typed) { - WordComposer word = createWordComposer(typed); - getBigramSuggestions(previous, typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, previous, - mKeyboard.getProximityInfo()); - return suggestions.size() > 1 ? suggestions.getWord(1) : null; - } - - public CharSequence getBigramAutoCorrection(CharSequence previous, CharSequence typed) { - WordComposer word = createWordComposer(typed); - getBigramSuggestions(previous, typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, previous, - mKeyboard.getProximityInfo()); - return (suggestions.size() > 1 && mSuggest.hasAutoCorrection()) - ? suggestions.getWord(1) : null; - } - - public int searchBigramSuggestion(CharSequence previous, CharSequence typed, - CharSequence expected) { - WordComposer word = createWordComposer(typed); - getBigramSuggestions(previous, typed); - SuggestedWords suggestions = mSuggest.getSuggestions(word, previous, - mKeyboard.getProximityInfo()); - for (int i = 1; i < suggestions.size(); i++) { - if (TextUtils.equals(suggestions.getWord(i), expected)) - return i; - } - return -1; - } -} diff --git a/tests/src/com/android/inputmethod/latin/SuggestTests.java b/tests/src/com/android/inputmethod/latin/SuggestTests.java deleted file mode 100644 index 4080f34be..000000000 --- a/tests/src/com/android/inputmethod/latin/SuggestTests.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (C) 2010,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.latin; - -import com.android.inputmethod.latin.tests.R; - -import android.content.res.AssetFileDescriptor; -import android.content.res.Configuration; - -import java.util.Locale; - -public class SuggestTests extends SuggestTestsBase { - private SuggestHelper mHelper; - - @Override - protected void setUp() throws Exception { - super.setUp(); - final AssetFileDescriptor dict = openTestRawResourceFd(R.raw.test); - final Locale locale = Locale.US; - mHelper = new SuggestHelper( - getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(), - createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale); - mHelper.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM); - } - - /************************** Tests ************************/ - - /** - * Tests for simple completions of one character. - */ - public void testCompletion1char() { - suggested("people", mHelper.getFirstSuggestion("peopl")); - suggested("about", mHelper.getFirstSuggestion("abou")); - suggested("their", mHelper.getFirstSuggestion("thei")); - } - - /** - * Tests for simple completions of two characters. - */ - public void testCompletion2char() { - suggested("people", mHelper.getFirstSuggestion("peop")); - suggested("calling", mHelper.getFirstSuggestion("calli")); - suggested("business", mHelper.getFirstSuggestion("busine")); - } - - /** - * Tests for proximity errors. - */ - public void testProximityPositive() { - suggested("typed peiple", "people", mHelper.getFirstSuggestion("peiple")); - suggested("typed peoole", "people", mHelper.getFirstSuggestion("peoole")); - suggested("typed pwpple", "people", mHelper.getFirstSuggestion("pwpple")); - } - - /** - * Tests for proximity errors - negative, when the error key is not close. - */ - public void testProximityNegative() { - notSuggested("about", mHelper.getFirstSuggestion("arout")); - notSuggested("are", mHelper.getFirstSuggestion("ire")); - } - - /** - * Tests for checking if apostrophes are added automatically. - */ - public void testApostropheInsertion() { - suggested("I'm", mHelper.getFirstSuggestion("im")); - suggested("don't", mHelper.getFirstSuggestion("dont")); - } - - /** - * Test to make sure apostrophed word is not suggested for an apostrophed word. - */ - public void testApostrophe() { - notSuggested("don't", mHelper.getFirstSuggestion("don't")); - } - - /** - * Tests for suggestion of capitalized version of a word. - */ - public void testCapitalization() { - suggested("I'm", mHelper.getFirstSuggestion("i'm")); - suggested("Sunday", mHelper.getFirstSuggestion("sunday")); - suggested("Sunday", mHelper.getFirstSuggestion("sundat")); - } - - /** - * Tests to see if more than one completion is provided for certain prefixes. - */ - public void testMultipleCompletions() { - isInSuggestions("com: come", mHelper.getSuggestIndex("com", "come")); - isInSuggestions("com: company", mHelper.getSuggestIndex("com", "company")); - isInSuggestions("th: the", mHelper.getSuggestIndex("th", "the")); - isInSuggestions("th: that", mHelper.getSuggestIndex("th", "that")); - isInSuggestions("th: this", mHelper.getSuggestIndex("th", "this")); - isInSuggestions("th: they", mHelper.getSuggestIndex("th", "they")); - } - - /** - * Does the suggestion engine recognize zero frequency words as valid words. - */ - public void testZeroFrequencyAccepted() { - assertTrue("valid word yikes", mHelper.isValidWord("yikes")); - assertFalse("non valid word yike", mHelper.isValidWord("yike")); - } - - /** - * Tests to make sure that zero frequency words are not suggested as completions. - */ - public void testZeroFrequencySuggestionsNegative() { - assertTrue(mHelper.getSuggestIndex("yike", "yikes") < 0); - assertTrue(mHelper.getSuggestIndex("what", "whatcha") < 0); - } - - /** - * Tests to ensure that words with large edit distances are not suggested, in some cases. - * Also such word is not considered auto correction, in some cases. - */ - public void testTooLargeEditDistance() { - assertTrue(mHelper.getSuggestIndex("sniyr", "about") < 0); - // TODO: The following test fails. - // notSuggested("the", mHelper.getAutoCorrection("rjw")); - } - - /** - * Make sure mHelper.isValidWord is case-sensitive. - */ - public void testValidityCaseSensitivity() { - assertTrue("valid word Sunday", mHelper.isValidWord("Sunday")); - assertFalse("non valid word sunday", mHelper.isValidWord("sunday")); - } - - /** - * Are accented forms of words suggested as corrections? - */ - public void testAccents() { - // ni<LATIN SMALL LETTER N WITH TILDE>o - suggested("ni\u00F1o", mHelper.getAutoCorrection("nino")); - // ni<LATIN SMALL LETTER N WITH TILDE>o - suggested("ni\u00F1o", mHelper.getAutoCorrection("nimo")); - // Mar<LATIN SMALL LETTER I WITH ACUTE>a - suggested("Mar\u00EDa", mHelper.getAutoCorrection("maria")); - } - - /** - * Make sure bigrams are showing when first character is typed - * and don't show any when there aren't any - */ - public void testBigramsAtFirstChar() { - suggested("bigram: about p[art]", - "part", mHelper.getBigramFirstSuggestion("about", "p")); - suggested("bigram: I'm a[bout]", - "about", mHelper.getBigramFirstSuggestion("I'm", "a")); - suggested("bigram: about b[usiness]", - "business", mHelper.getBigramFirstSuggestion("about", "b")); - isInSuggestions("bigram: about b[eing]", - mHelper.searchBigramSuggestion("about", "b", "being")); - notSuggested("bigram: about p", - "business", mHelper.getBigramFirstSuggestion("about", "p")); - } - - /** - * Make sure bigrams score affects the original score - */ - public void testBigramsScoreEffect() { - suggested("single: page", - "page", mHelper.getAutoCorrection("pa")); - suggested("bigram: about pa[rt]", - "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")); - } -} diff --git a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java b/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java deleted file mode 100644 index 058a3e7c0..000000000 --- a/tests/src/com/android/inputmethod/latin/SuggestTestsBase.java +++ /dev/null @@ -1,98 +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.latin; - -import android.content.res.AssetFileDescriptor; -import android.content.res.Configuration; -import android.test.AndroidTestCase; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.view.inputmethod.EditorInfo; - -import com.android.inputmethod.keyboard.KeyboardId; - -import java.io.File; -import java.io.InputStream; -import java.util.Locale; - -public class SuggestTestsBase extends AndroidTestCase { - protected File mTestPackageFile; - - @Override - protected void setUp() throws Exception { - super.setUp(); - mTestPackageFile = new File(getTestContext().getApplicationInfo().sourceDir); - } - - protected KeyboardId createKeyboardId(Locale locale, int orientation) { - final DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); - final int width; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - width = Math.max(dm.widthPixels, dm.heightPixels); - } else if (orientation == Configuration.ORIENTATION_PORTRAIT) { - width = Math.min(dm.widthPixels, dm.heightPixels); - } else { - fail("Orientation should be ORIENTATION_LANDSCAPE or ORIENTATION_PORTRAIT: " - + "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); - } - - protected InputStream openTestRawResource(int resIdInTest) { - return getTestContext().getResources().openRawResource(resIdInTest); - } - - protected AssetFileDescriptor openTestRawResourceFd(int resIdInTest) { - return getTestContext().getResources().openRawResourceFd(resIdInTest); - } - - private static String format(String message, Object expected, Object actual) { - return message + " expected:<" + expected + "> but was:<" + actual + ">"; - } - - protected static void suggested(CharSequence expected, CharSequence actual) { - if (!TextUtils.equals(expected, actual)) - fail(format("assertEquals", expected, actual)); - } - - protected static void suggested(String message, CharSequence expected, CharSequence actual) { - if (!TextUtils.equals(expected, actual)) - fail(format(message, expected, actual)); - } - - protected static void notSuggested(CharSequence expected, CharSequence actual) { - if (TextUtils.equals(expected, actual)) - fail(format("assertNotEquals", expected, actual)); - } - - protected static void notSuggested(String message, CharSequence expected, CharSequence actual) { - if (TextUtils.equals(expected, actual)) - fail(format(message, expected, actual)); - } - - protected static void isInSuggestions(String message, int position) { - assertTrue(message, position >= 0); - } - - protected static void isNotInSuggestions(String message, int position) { - assertTrue(message, position < 0); - } -} diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java deleted file mode 100644 index 023e20a10..000000000 --- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java +++ /dev/null @@ -1,101 +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.latin; - -import com.android.inputmethod.keyboard.KeyboardId; - -import android.content.Context; -import android.text.TextUtils; - -import java.io.File; -import java.util.Locale; -import java.util.StringTokenizer; - -public class UserBigramSuggestHelper extends SuggestHelper { - private final Context mContext; - private UserBigramDictionary mUserBigram; - - 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); - mContext = context; - mUserBigram = new UserBigramDictionary(context, null, locale.toString(), - Suggest.DIC_USER); - mUserBigram.setDatabaseMax(userBigramMax); - mUserBigram.setDatabaseDelete(userBigramDelete); - mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM); - mSuggest.setUserBigramDictionary(mUserBigram); - } - - public void changeUserBigramLocale(Locale locale) { - if (mUserBigram != null) { - flushUserBigrams(); - mUserBigram.close(); - mUserBigram = new UserBigramDictionary(mContext, null, locale.toString(), - Suggest.DIC_USER); - mSuggest.setUserBigramDictionary(mUserBigram); - } - } - - public int searchUserBigramSuggestion(CharSequence previous, char typed, - CharSequence expected) { - if (mUserBigram == null) return -1; - - flushUserBigrams(); - if (!TextUtils.isEmpty(previous) && !TextUtils.isEmpty(Character.toString(typed))) { - WordComposer firstChar = createWordComposer(Character.toString(typed)); - mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo()); - boolean reloading = mUserBigram.reloadDictionaryIfRequired(); - if (reloading) mUserBigram.waitForDictionaryLoading(); - mUserBigram.getBigrams(firstChar, previous, mSuggest); - } - - for (int i = 0; i < mSuggest.mBigramSuggestions.size(); i++) { - final CharSequence word = mSuggest.mBigramSuggestions.get(i); - if (TextUtils.equals(word, expected)) - return i; - } - - return -1; - } - - public void addToUserBigram(String sentence) { - StringTokenizer st = new StringTokenizer(sentence); - String previous = null; - while (st.hasMoreTokens()) { - String current = st.nextToken(); - if (previous != null) { - addToUserBigram(new String[] {previous, current}); - } - previous = current; - } - } - - public void addToUserBigram(String[] pair) { - if (mUserBigram != null && pair.length == 2) { - mUserBigram.addBigrams(pair[0], pair[1]); - } - } - - public void flushUserBigrams() { - if (mUserBigram != null) { - mUserBigram.flushPendingWrites(); - mUserBigram.waitUntilUpdateDBDone(); - } - } -} diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java deleted file mode 100644 index 2bc0aabc0..000000000 --- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestTests.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2010,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.latin; -import android.content.res.AssetFileDescriptor; -import android.content.res.Configuration; - -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 MAX_DATA = 20; - private static final int DELETE_DATA = 10; - - private UserBigramSuggestHelper mHelper; - - @Override - protected void setUp() throws Exception { - super.setUp(); - final AssetFileDescriptor dict = openTestRawResourceFd(R.raw.test); - final Locale locale = Locale.US; - mHelper = new UserBigramSuggestHelper( - getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(), - MAX_DATA, DELETE_DATA, - createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale); - } - - /************************** Tests ************************/ - - /** - * Test suggestion started at right time - */ - public void testUserBigram() { - for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair1); - for (int i = 0; i < (SUGGESTION_STARTS - 1); i++) mHelper.addToUserBigram(pair2); - - isInSuggestions("bigram", mHelper.searchUserBigramSuggestion("user", 'b', "bigram")); - isNotInSuggestions("platform", - mHelper.searchUserBigramSuggestion("android", 'p', "platform")); - } - - /** - * Test loading correct (locale) bigrams - */ - public void testOpenAndClose() { - for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair1); - isInSuggestions("bigram in default locale", - mHelper.searchUserBigramSuggestion("user", 'b', "bigram")); - - // change to fr_FR - mHelper.changeUserBigramLocale(Locale.FRANCE); - for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair3); - isInSuggestions("france in fr_FR", - mHelper.searchUserBigramSuggestion("locale", 'f', "france")); - isNotInSuggestions("bigram in fr_FR", - mHelper.searchUserBigramSuggestion("user", 'b', "bigram")); - - // change back to en_US - mHelper.changeUserBigramLocale(Locale.US); - isNotInSuggestions("france in en_US", - mHelper.searchUserBigramSuggestion("locale", 'f', "france")); - isInSuggestions("bigram in en_US", - mHelper.searchUserBigramSuggestion("user", 'b', "bigram")); - } - - /** - * Test data gets pruned when it is over maximum - */ - public void testPruningData() { - for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(sentence0); - mHelper.flushUserBigrams(); - isInSuggestions("world after several sentence 0", - mHelper.searchUserBigramSuggestion("Hello", 'w', "world")); - - mHelper.addToUserBigram(sentence1); - mHelper.addToUserBigram(sentence2); - isInSuggestions("world after sentence 1 and 2", - mHelper.searchUserBigramSuggestion("Hello", 'w', "world")); - - // pruning should happen - mHelper.addToUserBigram(sentence3); - mHelper.addToUserBigram(sentence4); - - // trying to reopen database to check pruning happened in database - mHelper.changeUserBigramLocale(Locale.US); - isNotInSuggestions("world after sentence 3 and 4", - mHelper.searchUserBigramSuggestion("Hello", 'w', "world")); - } - - private static final String[] pair1 = {"user", "bigram"}; - private static final String[] pair2 = {"android","platform"}; - private static final String[] pair3 = {"locale", "france"}; - private static final String sentence0 = "Hello world"; - private static final String sentence1 = "This is a test for user input based bigram"; - private static final String sentence2 = "It learns phrases that contain both dictionary and " - + "nondictionary words"; - private static final String sentence3 = "This should give better suggestions than the previous " - + "version"; - private static final String sentence4 = "Android stock keyboard is improving"; -} 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 |