diff options
Diffstat (limited to 'tests/src')
38 files changed, 4418 insertions, 412 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelBase.java new file mode 100644 index 000000000..a25d6d6e7 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelBase.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2014 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.content.res.Resources; +import android.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; +import com.android.inputmethod.latin.Constants; +import com.android.inputmethod.latin.utils.RunInLocale; +import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; + +import java.util.Locale; + +abstract class KeyboardLayoutSetActionLabelBase extends KeyboardLayoutSetTestsBase { + public void testActionUnspecified() { + for (final InputMethodSubtype subtype : getAllSubtypesList()) { + final String tag = "unspecifiled " + + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); + doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_UNSPECIFIED, + KeyboardIconsSet.NAME_ENTER_KEY); + } + } + + public void testActionNone() { + for (final InputMethodSubtype subtype : getAllSubtypesList()) { + final String tag = "none " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); + doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_NONE, + KeyboardIconsSet.NAME_ENTER_KEY); + } + } + + public void testActionSearch() { + for (final InputMethodSubtype subtype : getAllSubtypesList()) { + final String tag = "search " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); + doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_SEARCH, + KeyboardIconsSet.NAME_SEARCH_KEY); + } + } + + public abstract void testActionGo(); + public abstract void testActionSend(); + public abstract void testActionNext(); + public abstract void testActionDone(); + public abstract void testActionPrevious(); + + public void testActionCustom() { + for (final InputMethodSubtype subtype : getAllSubtypesList()) { + final String tag = "custom " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); + final CharSequence customLabel = "customLabel"; + final EditorInfo editorInfo = new EditorInfo(); + editorInfo.imeOptions = EditorInfo.IME_ACTION_UNSPECIFIED; + editorInfo.actionLabel = customLabel; + doTestActionKeyLabel(tag, subtype, editorInfo, customLabel); + } + } + + private static void doTestActionKey(final String tag, final KeyboardLayoutSet layoutSet, + final int elementId, final CharSequence label, final int iconId) { + final Keyboard keyboard = layoutSet.getKeyboard(elementId); + final Key enterKey = keyboard.getKey(Constants.CODE_ENTER); + assertNotNull(tag + " enter key on " + keyboard.mId, enterKey); + assertEquals(tag + " enter label " + enterKey, label, enterKey.getLabel()); + assertEquals(tag + " enter icon " + enterKey, iconId, enterKey.getIconId()); + } + + protected void doTestActionKeyLabelResId(final String tag, final InputMethodSubtype subtype, + final int actionId, final int labelResId) { + final Locale labelLocale = subtype.getLocale().equals(SubtypeLocaleUtils.NO_LANGUAGE) + ? null : SubtypeLocaleUtils.getSubtypeLocale(subtype); + doTestActionKeyLabelResIdInLocale(tag, subtype, actionId, labelLocale, labelResId); + } + + protected void doTestActionKeyLabelResIdInLocale(final String tag, + final InputMethodSubtype subtype, final int actionId, final Locale labelLocale, + final int labelResId) { + final EditorInfo editorInfo = new EditorInfo(); + editorInfo.imeOptions = actionId; + final RunInLocale<String> job = new RunInLocale<String>() { + @Override + protected String job(final Resources res) { + return res.getString(labelResId); + } + }; + final String label = job.runInLocale(getContext().getResources(), labelLocale); + doTestActionKeyLabel(tag, subtype, editorInfo, label); + } + + protected void doTestActionKeyLabel(final String tag, final InputMethodSubtype subtype, + final EditorInfo editorInfo, final CharSequence label) { + // Test text layouts. + editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL; + final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_ALPHABET, + label, KeyboardIconsSet.ICON_UNDEFINED); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS, + label, KeyboardIconsSet.ICON_UNDEFINED); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS_SHIFTED, + label, KeyboardIconsSet.ICON_UNDEFINED); + // Test phone number layouts. + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE, + label, KeyboardIconsSet.ICON_UNDEFINED); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE_SYMBOLS, + label, KeyboardIconsSet.ICON_UNDEFINED); + // Test normal number layout. + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_NUMBER, + label, KeyboardIconsSet.ICON_UNDEFINED); + // Test number password layouts. + editorInfo.inputType = + InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; + final KeyboardLayoutSet passwordSet = createKeyboardLayoutSet(subtype, editorInfo); + doTestActionKey(tag, passwordSet, KeyboardId.ELEMENT_NUMBER, + label, KeyboardIconsSet.ICON_UNDEFINED); + } + + protected void doTestActionKeyIcon(final String tag, final InputMethodSubtype subtype, + final int actionId, final String iconName) { + final int iconId = KeyboardIconsSet.getIconId(iconName); + final EditorInfo editorInfo = new EditorInfo(); + editorInfo.imeOptions = actionId; + // Test text layouts. + editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL; + final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_ALPHABET, null /* label */, iconId); + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS, null /* label */, iconId); + doTestActionKey( + tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS_SHIFTED, null /* label */, iconId); + // Test phone number layouts. + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE, null /* label */, iconId); + doTestActionKey( + tag, layoutSet, KeyboardId.ELEMENT_PHONE_SYMBOLS, null /* label */, iconId); + // Test normal number layout. + doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_NUMBER, null /* label */, iconId); + // Test number password layout. + editorInfo.inputType = + InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; + final KeyboardLayoutSet passwordSet = createKeyboardLayoutSet(subtype, editorInfo); + doTestActionKey(tag, passwordSet, KeyboardId.ELEMENT_NUMBER, null /* label */, iconId); + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelKlpTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelKlpTests.java index 96f925554..322a344ff 100644 --- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelKlpTests.java +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelKlpTests.java @@ -18,174 +18,125 @@ package com.android.inputmethod.keyboard; import android.content.res.Resources; import android.test.suitebuilder.annotation.MediumTest; -import android.text.InputType; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputMethodSubtype; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; -import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; +import com.android.inputmethod.latin.RichInputMethodManager; import com.android.inputmethod.latin.utils.RunInLocale; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; +import java.util.Locale; + @MediumTest -public class KeyboardLayoutSetActionLabelKlpTests extends KeyboardLayoutSetTestsBase { +public class KeyboardLayoutSetActionLabelKlpTests extends KeyboardLayoutSetActionLabelBase { @Override protected int getKeyboardThemeForTests() { return KeyboardTheme.THEME_ID_KLP; } - private static void doTestActionKey(final String tag, final KeyboardLayoutSet layoutSet, - final int elementId, final CharSequence label, final int iconId) { - final Keyboard keyboard = layoutSet.getKeyboard(elementId); - final Key enterKey = keyboard.getKey(Constants.CODE_ENTER); - assertNotNull(tag + " enter key on " + keyboard.mId, enterKey); - assertEquals(tag + " enter label " + enterKey, label, enterKey.getLabel()); - assertEquals(tag + " enter icon " + enterKey, iconId, enterKey.getIconId()); - } - - protected void doTestActionLabel(final String tag, final InputMethodSubtype subtype, - final int actionId, final int labelResId) { - final EditorInfo editorInfo = new EditorInfo(); - editorInfo.imeOptions = actionId; - final RunInLocale<String> job = new RunInLocale<String>() { - @Override - protected String job(final Resources res) { - return res.getString(labelResId); - } - }; - final Resources res = getContext().getResources(); - final String label; - if (subtype.getLocale().equals(SubtypeLocaleUtils.NO_LANGUAGE)) { - // Using system locale. - label = res.getString(labelResId); - } else { - label = job.runInLocale(res, SubtypeLocaleUtils.getSubtypeLocale(subtype)); - } - doTestActionLabel(tag, subtype, editorInfo, label); - } - - protected void doTestActionLabel(final String tag, final InputMethodSubtype subtype, - final EditorInfo editorInfo, final CharSequence label) { - // Test text layouts. - editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL; - final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_ALPHABET, - label, KeyboardIconsSet.ICON_UNDEFINED); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS, - label, KeyboardIconsSet.ICON_UNDEFINED); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS_SHIFTED, - label, KeyboardIconsSet.ICON_UNDEFINED); - // Test phone number layouts. - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE, - label, KeyboardIconsSet.ICON_UNDEFINED); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE_SYMBOLS, - label, KeyboardIconsSet.ICON_UNDEFINED); - // Test normal number layout. - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_NUMBER, - label, KeyboardIconsSet.ICON_UNDEFINED); - // Test number password layouts. - editorInfo.inputType = - InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; - final KeyboardLayoutSet passwordSet = createKeyboardLayoutSet(subtype, editorInfo); - doTestActionKey(tag, passwordSet, KeyboardId.ELEMENT_NUMBER, - label, KeyboardIconsSet.ICON_UNDEFINED); - } - - protected void doTestActionKeyIcon(final String tag, final InputMethodSubtype subtype, - final int actionId, final String iconName) { - final int iconId = KeyboardIconsSet.getIconId(iconName); - final EditorInfo editorInfo = new EditorInfo(); - editorInfo.imeOptions = actionId; - // Test text layouts. - editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL; - final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_ALPHABET, null /* label */, iconId); - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS, null /* label */, iconId); - doTestActionKey( - tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS_SHIFTED, null /* label */, iconId); - // Test phone number layouts. - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE, null /* label */, iconId); - doTestActionKey( - tag, layoutSet, KeyboardId.ELEMENT_PHONE_SYMBOLS, null /* label */, iconId); - // Test normal number layout. - doTestActionKey(tag, layoutSet, KeyboardId.ELEMENT_NUMBER, null /* label */, iconId); - // Test number password layout. - editorInfo.inputType = - InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; - final KeyboardLayoutSet passwordSet = createKeyboardLayoutSet(subtype, editorInfo); - doTestActionKey(tag, passwordSet, KeyboardId.ELEMENT_NUMBER, null /* label */, iconId); - } - - public void testActionUnspecified() { - for (final InputMethodSubtype subtype : getAllSubtypesList()) { - final String tag = "unspecifiled " - + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_UNSPECIFIED, - KeyboardIconsSet.NAME_ENTER_KEY); - } - } - - public void testActionNone() { - for (final InputMethodSubtype subtype : getAllSubtypesList()) { - final String tag = "none " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_NONE, - KeyboardIconsSet.NAME_ENTER_KEY); - } - } - + @Override public void testActionGo() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "go " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionLabel(tag, subtype, EditorInfo.IME_ACTION_GO, R.string.label_go_key); - } - } - - public void testActionSearch() { - for (final InputMethodSubtype subtype : getAllSubtypesList()) { - final String tag = "search " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionKeyIcon(tag, subtype, EditorInfo.IME_ACTION_SEARCH, - KeyboardIconsSet.NAME_SEARCH_KEY); + doTestActionKeyLabelResId(tag, subtype, EditorInfo.IME_ACTION_GO, + R.string.label_go_key); } } + @Override public void testActionSend() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "send " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionLabel(tag, subtype, EditorInfo.IME_ACTION_SEND, R.string.label_send_key); + doTestActionKeyLabelResId(tag, subtype, EditorInfo.IME_ACTION_SEND, + R.string.label_send_key); } } + @Override public void testActionNext() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "next " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionLabel(tag, subtype, EditorInfo.IME_ACTION_NEXT, R.string.label_next_key); + doTestActionKeyLabelResId(tag, subtype, EditorInfo.IME_ACTION_NEXT, + R.string.label_next_key); } } + @Override public void testActionDone() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "done " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionLabel(tag, subtype, EditorInfo.IME_ACTION_DONE, R.string.label_done_key); + doTestActionKeyLabelResId(tag, subtype, EditorInfo.IME_ACTION_DONE, + R.string.label_done_key); } } + @Override public void testActionPrevious() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "previous " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - doTestActionLabel( - tag, subtype, EditorInfo.IME_ACTION_PREVIOUS, R.string.label_previous_key); + doTestActionKeyLabelResId(tag, subtype, EditorInfo.IME_ACTION_PREVIOUS, + R.string.label_previous_key); } } - public void testActionCustom() { - for (final InputMethodSubtype subtype : getAllSubtypesList()) { - final String tag = "custom " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); - final CharSequence customLabel = "customLabel"; - final EditorInfo editorInfo = new EditorInfo(); - editorInfo.imeOptions = EditorInfo.IME_ACTION_UNSPECIFIED; - editorInfo.actionLabel = customLabel; - doTestActionLabel(tag, subtype, editorInfo, customLabel); + // Working variable to simulate system locale changing. + private Locale mSystemLocale = Locale.getDefault(); + + private void doTestActionLabelInLocale(final InputMethodSubtype subtype, + final Locale labelLocale, final Locale systemLocale) { + // Simulate system locale changing, see {@link SystemBroadcastReceiver}. + if (!systemLocale.equals(mSystemLocale)) { + KeyboardLayoutSet.onSystemLocaleChanged(); + mSystemLocale = systemLocale; } + final String tag = "label=" + labelLocale + " system=" + systemLocale + + " " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); + final RunInLocale<Void> job = new RunInLocale<Void>() { + @Override + public Void job(final Resources res) { + doTestActionKeyIcon(tag + " unspecified", subtype, + EditorInfo.IME_ACTION_UNSPECIFIED, KeyboardIconsSet.NAME_ENTER_KEY); + doTestActionKeyIcon(tag + " none", subtype, + EditorInfo.IME_ACTION_NONE, KeyboardIconsSet.NAME_ENTER_KEY); + doTestActionKeyLabelResIdInLocale(tag + " go", subtype, + EditorInfo.IME_ACTION_GO, labelLocale, R.string.label_go_key); + doTestActionKeyIcon(tag + " search", subtype, + EditorInfo.IME_ACTION_SEARCH, KeyboardIconsSet.NAME_SEARCH_KEY); + doTestActionKeyLabelResIdInLocale(tag + " send", subtype, + EditorInfo.IME_ACTION_SEND, labelLocale, R.string.label_send_key); + doTestActionKeyLabelResIdInLocale(tag + " next", subtype, + EditorInfo.IME_ACTION_NEXT, labelLocale, R.string.label_next_key); + doTestActionKeyLabelResIdInLocale(tag + " done", subtype, + EditorInfo.IME_ACTION_DONE, labelLocale, R.string.label_done_key); + doTestActionKeyLabelResIdInLocale(tag + " previous", subtype, + EditorInfo.IME_ACTION_PREVIOUS, labelLocale, R.string.label_previous_key); + return null; + } + }; + job.runInLocale(getContext().getResources(), systemLocale); + } + + public void testActionLabelInOtherLocale() { + final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); + final InputMethodSubtype italian = richImm.findSubtypeByLocaleAndKeyboardLayoutSet( + Locale.ITALIAN.toString(), SubtypeLocaleUtils.QWERTY); + // An action label should be displayed in subtype's locale regardless of the system locale. + doTestActionLabelInLocale(italian, Locale.ITALIAN, Locale.US); + doTestActionLabelInLocale(italian, Locale.ITALIAN, Locale.FRENCH); + doTestActionLabelInLocale(italian, Locale.ITALIAN, Locale.ITALIAN); + doTestActionLabelInLocale(italian, Locale.ITALIAN, Locale.JAPANESE); + } + + public void testNoLanguageSubtypeActionLabel() { + final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); + final InputMethodSubtype noLanguage = richImm.findSubtypeByLocaleAndKeyboardLayoutSet( + SubtypeLocaleUtils.NO_LANGUAGE, SubtypeLocaleUtils.QWERTY); + // An action label of no language keyboard should be displayed in the system locale. + doTestActionLabelInLocale(noLanguage, Locale.US, Locale.US); + doTestActionLabelInLocale(noLanguage, Locale.FRENCH, Locale.FRENCH); + doTestActionLabelInLocale(noLanguage, Locale.ITALIAN, Locale.ITALIAN); + doTestActionLabelInLocale(noLanguage, Locale.JAPANESE, Locale.JAPANESE); } } diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelLxxTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelLxxTests.java index 7747ac5f9..028b3e400 100644 --- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelLxxTests.java +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetActionLabelLxxTests.java @@ -24,20 +24,10 @@ import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; @MediumTest -public class KeyboardLayoutSetActionLabelLxxTests extends KeyboardLayoutSetActionLabelKlpTests { +public class KeyboardLayoutSetActionLabelLxxTests extends KeyboardLayoutSetActionLabelBase { @Override protected int getKeyboardThemeForTests() { - return KeyboardTheme.THEME_ID_LXX_DARK; - } - - @Override - public void testActionUnspecified() { - super.testActionUnspecified(); - } - - @Override - public void testActionNone() { - super.testActionNone(); + return KeyboardTheme.THEME_ID_LXX_LIGHT; } @Override @@ -50,11 +40,6 @@ public class KeyboardLayoutSetActionLabelLxxTests extends KeyboardLayoutSetActio } @Override - public void testActionSearch() { - super.testActionSearch(); - } - - @Override public void testActionSend() { for (final InputMethodSubtype subtype : getAllSubtypesList()) { final String tag = "send " + SubtypeLocaleUtils.getSubtypeNameForLogging(subtype); @@ -89,9 +74,4 @@ public class KeyboardLayoutSetActionLabelLxxTests extends KeyboardLayoutSetActio KeyboardIconsSet.NAME_PREVIOUS_KEY); } } - - @Override - public void testActionCustom() { - super.testActionCustom(); - } } diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java new file mode 100644 index 000000000..8a55455d0 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysBase.java @@ -0,0 +1,337 @@ +/* + * Copyright (C) 2014 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.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; +import com.android.inputmethod.keyboard.internal.MoreKeySpec; +import com.android.inputmethod.latin.Constants; +import com.android.inputmethod.latin.R; +import com.android.inputmethod.latin.RichInputMethodManager; +import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; + +import java.util.Arrays; +import java.util.Locale; + +abstract class KeyboardLayoutSetNavigateMoreKeysBase extends KeyboardLayoutSetTestsBase { + private ExpectedMoreKey mExpectedNavigateNextMoreKey; + private ExpectedMoreKey mExpectedNavigatePreviousMoreKey; + private ExpectedMoreKey mExpectedEmojiMoreKey; + + protected ExpectedMoreKey getExpectedNavigateNextMoreKey() { + return new ExpectedMoreKey(R.string.label_next_key); + } + + protected ExpectedMoreKey getExpectedNavigatePreviousMoreKey() { + return new ExpectedMoreKey(R.string.label_previous_key); + } + + protected ExpectedMoreKey getExpectedEmojiMoreKey() { + return new ExpectedMoreKey(KeyboardIconsSet.NAME_EMOJI_ACTION_KEY); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + mExpectedNavigateNextMoreKey = getExpectedNavigateNextMoreKey(); + mExpectedNavigatePreviousMoreKey = getExpectedNavigatePreviousMoreKey(); + mExpectedEmojiMoreKey = getExpectedEmojiMoreKey(); + } + + /** + * This class represents an expected more key. + */ + protected static class ExpectedMoreKey { + public static final int NO_LABEL = 0; + public static final ExpectedMoreKey[] EMPTY_MORE_KEYS = new ExpectedMoreKey[0]; + + public final int mLabelResId; + public final int mIconId; + + public ExpectedMoreKey(final String iconName) { + mLabelResId = NO_LABEL; + mIconId = KeyboardIconsSet.getIconId(iconName); + } + + public ExpectedMoreKey(final int labelResId) { + mLabelResId = labelResId; + mIconId = KeyboardIconsSet.ICON_UNDEFINED; + } + } + + private void doTestMoreKeysOf(final int code, final InputMethodSubtype subtype, + final int elementId, final int inputType, final int imeOptions, + final ExpectedMoreKey ... expectedMoreKeys) { + final EditorInfo editorInfo = new EditorInfo(); + editorInfo.inputType = inputType; + editorInfo.imeOptions = imeOptions; + final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); + final Keyboard keyboard = layoutSet.getKeyboard(elementId); + + final Key actualKey = keyboard.getKey(code); + final MoreKeySpec[] actualMoreKeys = actualKey.getMoreKeys(); + final String tag = actualKey.toString() + " moreKeys=" + Arrays.toString(actualMoreKeys); + if (expectedMoreKeys.length == 0) { + assertEquals(tag, null, actualMoreKeys); + return; + } + if (expectedMoreKeys.length == 1) { + assertEquals(tag + " fixedOrder", false, actualKey.isMoreKeysFixedOrder()); + assertEquals(tag + " fixedColumn", false, actualKey.isMoreKeysFixedColumn()); + } else { + assertEquals(tag + " fixedOrder", true, actualKey.isMoreKeysFixedOrder()); + assertEquals(tag + " fixedColumn", true, actualKey.isMoreKeysFixedColumn()); + // TODO: Can't handle multiple rows of more keys. + assertEquals(tag + " column", + expectedMoreKeys.length, actualKey.getMoreKeysColumnNumber()); + } + assertNotNull(tag + " moreKeys", actualMoreKeys); + assertEquals(tag, expectedMoreKeys.length, actualMoreKeys.length); + for (int index = 0; index < actualMoreKeys.length; index++) { + final int expectedLabelResId = expectedMoreKeys[index].mLabelResId; + if (expectedLabelResId == ExpectedMoreKey.NO_LABEL) { + assertEquals(tag + " label " + index, null, actualMoreKeys[index].mLabel); + } else { + final CharSequence expectedLabel = getContext().getText(expectedLabelResId); + assertEquals(tag + " label " + index, expectedLabel, actualMoreKeys[index].mLabel); + } + final int expectedIconId = expectedMoreKeys[index].mIconId; + assertEquals(tag + " icon " + index, expectedIconId, actualMoreKeys[index].mIconId); + } + } + + private void doTestNavigationMoreKeysOf(final int code, final InputMethodSubtype subtype, + final int elementId, final int inputType) { + // No navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_NULL, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // With next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT, + mExpectedNavigateNextMoreKey); + // With previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedNavigatePreviousMoreKey); + // With next and previous naviagte flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedNavigatePreviousMoreKey, mExpectedNavigateNextMoreKey); + // Action next. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedNavigatePreviousMoreKey); + // Action next with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedNavigatePreviousMoreKey); + // Action previous. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + mExpectedNavigateNextMoreKey); + // Action previous with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedNavigateNextMoreKey); + } + + private void doTestNavigationWithEmojiMoreKeysOf(final int code, + final InputMethodSubtype subtype, final int elementId, final int inputType) { + // No navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_NULL, + mExpectedEmojiMoreKey); + // With next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT, + mExpectedEmojiMoreKey, mExpectedNavigateNextMoreKey); + // With previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey, mExpectedNavigatePreviousMoreKey); + // With next and previous naviagte flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey, mExpectedNavigatePreviousMoreKey, + mExpectedNavigateNextMoreKey); + // Action next. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT, + mExpectedEmojiMoreKey); + // Action next with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + mExpectedEmojiMoreKey); + // Action next with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey, mExpectedNavigatePreviousMoreKey); + // Action next with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey, mExpectedNavigatePreviousMoreKey); + // Action previous. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS, + mExpectedEmojiMoreKey); + // Action previous with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + mExpectedEmojiMoreKey, mExpectedNavigateNextMoreKey); + // Action previous with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey); + // Action previous with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + mExpectedEmojiMoreKey, mExpectedNavigateNextMoreKey); + } + + private void doTestNoNavigationMoreKeysOf(final int code, final InputMethodSubtype subtype, + final int elementId, final int inputType) { + // No navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_NULL, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // With next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // With previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // With next and previous naviagte flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_FLAG_NAVIGATE_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action next with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_NEXT | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous with next navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous with previous navigate flag. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + // Action previous with next and previous navigate flags. + doTestMoreKeysOf(code, subtype, elementId, inputType, + EditorInfo.IME_ACTION_PREVIOUS | EditorInfo.IME_FLAG_NAVIGATE_NEXT + | EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS, + ExpectedMoreKey.EMPTY_MORE_KEYS); + } + + public void testMoreKeysOfEnterKey() { + final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); + final InputMethodSubtype subtype = richImm.findSubtypeByLocaleAndKeyboardLayoutSet( + Locale.US.toString(), SubtypeLocaleUtils.QWERTY); + + // Password field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); + // Email field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); + // Url field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + // Phone number field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_PHONE, + InputType.TYPE_CLASS_PHONE); + // Number field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_NUMBER, + InputType.TYPE_CLASS_NUMBER); + // Date-time field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_NUMBER, + InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_NORMAL); + // Date field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_NUMBER, + InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_DATE); + // Time field. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, KeyboardId.ELEMENT_NUMBER, + InputType.TYPE_CLASS_DATETIME | InputType.TYPE_DATETIME_VARIATION_TIME); + // Text field. + if (isPhone()) { + // The enter key has an Emoji key as one of more keys. + doTestNavigationWithEmojiMoreKeysOf(Constants.CODE_ENTER, subtype, + KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT); + } else { + // Tablet has a dedicated Emoji key, so the Enter key has no Emoji more key. + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, + KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT); + } + // Short message field. + if (isPhone()) { + // Enter key is switched to Emoji key on a short message field. + // Emoji key has no navigation more keys. + doTestNoNavigationMoreKeysOf(Constants.CODE_EMOJI, subtype, + KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE); + } else { + doTestNavigationMoreKeysOf(Constants.CODE_ENTER, subtype, + KeyboardId.ELEMENT_ALPHABET, + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE); + } + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysKlpTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysKlpTests.java new file mode 100644 index 000000000..286c69d33 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysKlpTests.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2014 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.suitebuilder.annotation.SmallTest; + +@SmallTest +public class KeyboardLayoutSetNavigateMoreKeysKlpTests + extends KeyboardLayoutSetNavigateMoreKeysBase { + @Override + protected int getKeyboardThemeForTests() { + return KeyboardTheme.THEME_ID_KLP; + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java new file mode 100644 index 000000000..d2bb41e5d --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetNavigateMoreKeysLxxTests.java @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2014 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.suitebuilder.annotation.SmallTest; + +import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; + +@SmallTest +public class KeyboardLayoutSetNavigateMoreKeysLxxTests + extends KeyboardLayoutSetNavigateMoreKeysBase { + @Override + protected int getKeyboardThemeForTests() { + return KeyboardTheme.THEME_ID_LXX_LIGHT; + } + + @Override + protected ExpectedMoreKey getExpectedNavigateNextMoreKey() { + return new ExpectedMoreKey(KeyboardIconsSet.NAME_NEXT_KEY); + } + + @Override + protected ExpectedMoreKey getExpectedNavigatePreviousMoreKey() { + return new ExpectedMoreKey(KeyboardIconsSet.NAME_PREVIOUS_KEY); + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java index cf884bfea..a002bbe48 100644 --- a/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java +++ b/tests/src/com/android/inputmethod/keyboard/KeyboardLayoutSetTestsBase.java @@ -42,7 +42,6 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase { private final ArrayList<InputMethodSubtype> mAsciiCapableSubtypesList = new ArrayList<>(); private final ArrayList<InputMethodSubtype> mAdditionalSubtypesList = new ArrayList<>(); - private Context mThemeContext; private int mScreenMetrics; protected abstract int getKeyboardThemeForTests(); @@ -50,12 +49,14 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); - mScreenMetrics = mContext.getResources().getInteger(R.integer.config_screen_metrics); - final KeyboardTheme keyboardTheme = KeyboardTheme.searchKeyboardThemeById( getKeyboardThemeForTests()); - mThemeContext = new ContextThemeWrapper(mContext, keyboardTheme.mStyleId); - RichInputMethodManager.init(mThemeContext); + setContext(new ContextThemeWrapper(getContext(), keyboardTheme.mStyleId)); + KeyboardLayoutSet.onKeyboardThemeChanged(); + + final Context context = getContext(); + mScreenMetrics = context.getResources().getInteger(R.integer.config_screen_metrics); + RichInputMethodManager.init(context); final RichInputMethodManager richImm = RichInputMethodManager.getInstance(); final InputMethodInfo imi = richImm.getInputMethodInfoOfThisIme(); @@ -112,16 +113,16 @@ public abstract class KeyboardLayoutSetTestsBase extends AndroidTestCase { "Unknown subtype: locale=" + locale + " keyboardLayout=" + keyboardLayout); } - protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, final EditorInfo editorInfo) { return createKeyboardLayoutSet(subtype, editorInfo, false /* voiceInputKeyEnabled */, false /* languageSwitchKeyEnabled */); } - protected final KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, final EditorInfo editorInfo, final boolean voiceInputKeyEnabled, final boolean languageSwitchKeyEnabled) { - final Context context = mThemeContext; + final Context context = getContext(); final Resources res = context.getResources(); final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res); final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res); diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java new file mode 100644 index 000000000..ebefe2d0e --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderAutoOrderTests.java @@ -0,0 +1,2464 @@ +/* + * Copyright (C) 2014 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 android.test.suitebuilder.annotation.MediumTest; + +import com.android.inputmethod.keyboard.MoreKeysKeyboard.MoreKeysKeyboardParams; + +@MediumTest +public class MoreKeysKeyboardBuilderAutoOrderTests 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(final int numKeys, final int columnNum, + final int coordXInParent) { + final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams(); + params.setParameters(numKeys, columnNum, WIDTH, HEIGHT, coordXInParent, KEYBOARD_WIDTH, + true /* isMoreKeysFixedColumn */, false /* isMoreKeysFixedOrder */, + 0 /* dividerWidth */); + return params; + } + + public void testLayoutError() { + MoreKeysKeyboardParams params = null; + try { + final int maxColumns = KEYBOARD_WIDTH / WIDTH; + params = createParams(maxColumns + 1, 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 testLayout1KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0); + assertEquals("1 key auto 5 M0 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 M0 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 M0 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 M0 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |<1> + public void testLayout1KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0); + assertEquals("1 key auto 5 L0 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 L0 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 L0 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> + public void testLayout1KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1); + assertEquals("1 key auto 5 L1 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 L1 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 L1 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ <1> + public void testLayout1KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2); + assertEquals("1 key auto 5 L2 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 L2 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 L2 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 L2 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1>| + public void testLayout1KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0); + assertEquals("1 key auto 5 R0 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 R0 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 R0 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 R0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> ___| + public void testLayout1KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1); + assertEquals("1 key auto 5 R1 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 R1 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 R1 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 R1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> ___ ___| + public void testLayout1KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2); + assertEquals("1 key auto 5 R2 columns", 1, params.mNumColumns); + assertEquals("1 key auto 5 R2 rows", 1, params.mNumRows); + assertEquals("1 key auto 5 R2 left", 0, params.mLeftKeys); + assertEquals("1 key auto 5 R2 right", 1, params.mRightKeys); + assertEquals("1 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("1 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("1 key auto 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // <1> [2] + public void testLayout2KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0); + assertEquals("2 key auto 5 M0 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 M0 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 M0 left", 0, params.mLeftKeys); + assertEquals("2 key auto 5 M0 right", 2, params.mRightKeys); + assertEquals("2 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |<1> [2] + public void testLayout2KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0); + assertEquals("2 key auto 5 L0 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 L0 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("2 key auto 5 L0 right", 2, params.mRightKeys); + assertEquals("2 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] + public void testLayout2KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1); + assertEquals("2 key auto 5 L1 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 L1 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("2 key auto 5 L1 right", 2, params.mRightKeys); + assertEquals("2 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ <1> [2] + public void testLayout2KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2); + assertEquals("2 key auto 5 L2 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 L2 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 L2 left", 0, params.mLeftKeys); + assertEquals("2 key auto 5 L2 right", 2, params.mRightKeys); + assertEquals("2 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [2] <1>| + public void testLayout2KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0); + assertEquals("2 key auto 5 R0 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 R0 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 R0 left", 1, params.mLeftKeys); + assertEquals("2 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("2 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("2 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [2] <1> ___| + public void testLayout2KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1); + assertEquals("2 key auto 5 R1 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 R1 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 R1 left", 1, params.mLeftKeys); + assertEquals("2 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("2 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("2 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // <1> [2] ___| + public void testLayout2KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2); + assertEquals("2 key auto 5 R2 columns", 2, params.mNumColumns); + assertEquals("2 key auto 5 R2 rows", 1, params.mNumRows); + assertEquals("2 key auto 5 R2 left", 0, params.mLeftKeys); + assertEquals("2 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("2 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("2 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("2 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("2 key auto 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] + public void testLayout3KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0); + assertEquals("3 key auto 5 M0 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 M0 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 M0 left", 1, params.mLeftKeys); + assertEquals("3 key auto 5 M0 right", 2, params.mRightKeys); + assertEquals("3 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] + public void testLayout3KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0); + assertEquals("3 key auto 5 L0 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 L0 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("3 key auto 5 L0 right", 3, params.mRightKeys); + assertEquals("3 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("3 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] + public void testLayout3KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1); + assertEquals("3 key auto 5 L1 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 L1 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("3 key auto 5 L1 right", 3, params.mRightKeys); + assertEquals("3 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("3 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] + public void testLayout3KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2); + assertEquals("3 key auto 5 L2 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 L2 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("3 key auto 5 L2 right", 2, params.mRightKeys); + assertEquals("3 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] [2] <1>| + public void testLayout3KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0); + assertEquals("3 key auto 5 R0 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 R0 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 R0 left", 2, params.mLeftKeys); + assertEquals("3 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("3 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("3 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [3] [2] <1> ___| + public void testLayout3KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1); + assertEquals("3 key auto 5 R1 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 R1 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 R1 left", 2, params.mLeftKeys); + assertEquals("3 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("3 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("3 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] ___| + public void testLayout3KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2); + assertEquals("3 key auto 5 R2 columns", 3, params.mNumColumns); + assertEquals("3 key auto 5 R2 rows", 1, params.mNumRows); + assertEquals("3 key auto 5 R2 left", 1, params.mLeftKeys); + assertEquals("3 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("3 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("3 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] + // <1> [2] + public void testLayout3KeyAuto2M0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0); + assertEquals("3 key auto 2 M0 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 M0 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 M0 left", 0, params.mLeftKeys); + assertEquals("3 key auto 2 M0 right", 2, params.mRightKeys); + assertEquals("3 key auto 2 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 2 M0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 M0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |[3] + // |<1> [2] + public void testLayout3KeyAuto2L0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0); + assertEquals("3 key auto 2 L0 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 L0 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 L0 left", 0, params.mLeftKeys); + assertEquals("3 key auto 2 L0 right", 2, params.mRightKeys); + assertEquals("3 key auto 2 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 2 L0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] + // |___ <1> [2] + public void testLayout3KeyAuto2L1() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1); + assertEquals("3 key auto 2 L1 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 L1 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 L1 left", 0, params.mLeftKeys); + assertEquals("3 key auto 2 L1 right", 2, params.mRightKeys); + assertEquals("3 key auto 2 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 2 L1 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // | [3] + // |___ ___ <1> [2] + public void testLayout3KeyAuto2L2() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2); + assertEquals("3 key auto 2 L2 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 L2 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 L2 left", 0, params.mLeftKeys); + assertEquals("3 key auto 2 L2 right", 2, params.mRightKeys); + assertEquals("3 key auto 2 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 2 L2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 L2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [3]| + // [2] <1>| + public void testLayout3KeyAuto2R0() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0); + assertEquals("3 key auto 2 R0 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 R0 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 R0 left", 1, params.mLeftKeys); + assertEquals("3 key auto 2 R0 right", 1, params.mRightKeys); + assertEquals("3 key auto 2 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key auto 2 R0 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 R0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] | + // [2] <1> ___| + public void testLayout3KeyAuto2R1() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1); + assertEquals("3 key auto 2 R1 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 R1 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 R1 left", 1, params.mLeftKeys); + assertEquals("3 key auto 2 R1 right", 1, params.mRightKeys); + assertEquals("3 key auto 2 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("3 key auto 2 R1 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 R1 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] | + // <1> [2] ___| + public void testLayout3KeyAuto2R2() { + MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2); + assertEquals("3 key auto 2 R2 columns", 2, params.mNumColumns); + assertEquals("3 key auto 2 R2 rows", 2, params.mNumRows); + assertEquals("3 key auto 2 R2 left", 0, params.mLeftKeys); + assertEquals("3 key auto 2 R2 right", 2, params.mRightKeys); + assertEquals("3 key auto 2 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("3 key auto 2 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("3 key auto 2 R2 [3]", 0, params.getColumnPos(2)); + assertEquals("3 key auto 2 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("3 key auto 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // [4] + // [3] <1> [2] + public void testLayout4KeyAuto3M0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0); + assertEquals("4 key auto 3 M0 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 M0 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 M0 left", 1, params.mLeftKeys); + assertEquals("4 key auto 3 M0 right", 2, params.mRightKeys); + assertEquals("4 key auto 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 3 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] + // |<1> [2] [3] + public void testLayout4KeyAuto3L0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0); + assertEquals("4 key auto 3 L0 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 L0 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 L0 left", 0, params.mLeftKeys); + assertEquals("4 key auto 3 L0 right", 3, params.mRightKeys); + assertEquals("4 key auto 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] + // |___ <1> [2] [3] + public void testLayout4KeyAuto3L1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1); + assertEquals("4 key auto 3 L1 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 L1 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 L1 left", 0, params.mLeftKeys); + assertEquals("4 key auto 3 L1 right", 3, params.mRightKeys); + assertEquals("4 key auto 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ ___ [4] + // |___ [3] <1> [2] + public void testLayout4KeyAuto3L2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2); + assertEquals("4 key auto 3 L2 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 L2 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 L2 left", 1, params.mLeftKeys); + assertEquals("4 key auto 3 L2 right", 2, params.mRightKeys); + assertEquals("4 key auto 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 3 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4]| + // [3] [2] <1>| + public void testLayout4KeyAuto3R0() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0); + assertEquals("4 key auto 3 R0 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 R0 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 R0 left", 2, params.mLeftKeys); + assertEquals("4 key auto 3 R0 right", 1, params.mRightKeys); + assertEquals("4 key auto 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 3 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] ___| + // [3] [2] <1> ___| + public void testLayout4KeyAuto3R1() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1); + assertEquals("4 key auto 3 R1 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 R1 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 R1 left", 2, params.mLeftKeys); + assertEquals("4 key auto 3 R1 right", 1, params.mRightKeys); + assertEquals("4 key auto 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 3 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] ___| + // [3] <1> [2] ___| + public void testLayout4KeyAuto3R2() { + MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2); + assertEquals("4 key auto 3 R2 columns", 3, params.mNumColumns); + assertEquals("4 key auto 3 R2 rows", 2, params.mNumRows); + assertEquals("4 key auto 3 R2 left", 1, params.mLeftKeys); + assertEquals("4 key auto 3 R2 right", 2, params.mRightKeys); + assertEquals("4 key auto 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 3 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("4 key auto 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] [4] + public void testLayout4KeyAuto4M0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_M0); + assertEquals("4 key auto 4 M0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 M0 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 M0 left", 1, params.mLeftKeys); + assertEquals("4 key auto 4 M0 right", 3, params.mRightKeys); + assertEquals("4 key auto 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key auto 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] + public void testLayout4KeyAuto4L0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L0); + assertEquals("4 key auto 4 L0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 L0 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 L0 left", 0, params.mLeftKeys); + assertEquals("4 key auto 4 L0 right", 4, params.mRightKeys); + assertEquals("4 key auto 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key auto 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] + public void testLayout4KeyAuto4L1() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L1); + assertEquals("4 key auto 4 L1 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 L1 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 L1 left", 0, params.mLeftKeys); + assertEquals("4 key auto 4 L1 right", 4, params.mRightKeys); + assertEquals("4 key auto 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key auto 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] [4] + public void testLayout4KeyAuto4L2() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L2); + assertEquals("4 key auto 4 L2 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 L2 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 L2 left", 1, params.mLeftKeys); + assertEquals("4 key auto 4 L2 right", 3, params.mRightKeys); + assertEquals("4 key auto 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key auto 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1>| + public void testLayout4KeyAuto4R0() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R0); + assertEquals("4 key auto 4 R0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 R0 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 R0 left", 3, params.mLeftKeys); + assertEquals("4 key auto 4 R0 right", 1, params.mRightKeys); + assertEquals("4 key auto 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 4 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key auto 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1> ___| + public void testLayout4KeyAuto4R1() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R1); + assertEquals("4 key auto 4 R1 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 R1 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 R1 left", 3, params.mLeftKeys); + assertEquals("4 key auto 4 R1 right", 1, params.mRightKeys); + assertEquals("4 key auto 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 4 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key auto 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] <1> [2] ___| + public void testLayout4KeyAuto4R2() { + MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R2); + assertEquals("4 key auto 4 R2 columns", 4, params.mNumColumns); + assertEquals("4 key auto 4 R2 rows", 1, params.mNumRows); + assertEquals("4 key auto 4 R2 left", 2, params.mLeftKeys); + assertEquals("4 key auto 4 R2 right", 2, params.mRightKeys); + assertEquals("4 key auto 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 4 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("4 key auto 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [3] <1> [2] [4] + public void testLayout4KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0); + assertEquals("4 key auto 5 M0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 M0 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 M0 left", 1, params.mLeftKeys); + assertEquals("4 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("4 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] + public void testLayout4KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0); + assertEquals("4 key auto 5 L0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 L0 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("4 key auto 5 L0 right", 4, params.mRightKeys); + assertEquals("4 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] + public void testLayout4KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1); + assertEquals("4 key auto 5 L1 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 L1 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("4 key auto 5 L1 right", 4, params.mRightKeys); + assertEquals("4 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("4 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("4 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] [4] + public void testLayout4KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2); + assertEquals("4 key auto 5 L2 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 L2 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("4 key auto 5 L2 right", 3, params.mRightKeys); + assertEquals("4 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("4 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1>| + public void testLayout4KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0); + assertEquals("4 key auto 5 R0 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 R0 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 R0 left", 3, params.mLeftKeys); + assertEquals("4 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("4 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] [2] <1> ___| + public void testLayout4KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1); + assertEquals("4 key auto 5 R1 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 R1 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 R1 left", 3, params.mLeftKeys); + assertEquals("4 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("4 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("4 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("4 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("4 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [4] [3] <1> [2] ___| + public void testLayout4KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2); + assertEquals("4 key auto 5 R2 columns", 4, params.mNumColumns); + assertEquals("4 key auto 5 R2 rows", 1, params.mNumRows); + assertEquals("4 key auto 5 R2 left", 2, params.mLeftKeys); + assertEquals("4 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("4 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("4 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("4 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("4 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("4 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("4 key auto 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] + // [3] <1> [2] + public void testLayout5KeyAuto3M0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0); + assertEquals("5 key auto 3 M0 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 M0 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 M0 left", 1, params.mLeftKeys); + assertEquals("5 key auto 3 M0 right", 2, params.mRightKeys); + assertEquals("5 key auto 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 3 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key auto 3 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key auto 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[4] [5] + // |<1> [2] [3] + public void testLayout5KeyAuto3L0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0); + assertEquals("5 key auto 3 L0 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 L0 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 L0 left", 0, params.mLeftKeys); + assertEquals("5 key auto 3 L0 right", 3, params.mRightKeys); + assertEquals("5 key auto 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key auto 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ <1> [2] [3] + public void testLayout5KeyAuto3L1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1); + assertEquals("5 key auto 3 L1 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 L1 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 L1 left", 0, params.mLeftKeys); + assertEquals("5 key auto 3 L1 right", 3, params.mRightKeys); + assertEquals("5 key auto 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key auto 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [4] [5] + // |___ [3] <1> [2] + public void testLayout5KeyAuto3L2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2); + assertEquals("5 key auto 3 L2 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 L2 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 L2 left", 1, params.mLeftKeys); + assertEquals("5 key auto 3 L2 right", 2, params.mRightKeys); + assertEquals("5 key auto 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 3 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key auto 3 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key auto 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [4]| + // [3] [2] <1>| + public void testLayout5KeyAuto3R0() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0); + assertEquals("5 key auto 3 R0 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 R0 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 R0 left", 2, params.mLeftKeys); + assertEquals("5 key auto 3 R0 right", 1, params.mRightKeys); + assertEquals("5 key auto 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 3 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key auto 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout5KeyAuto3R1() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1); + assertEquals("5 key auto 3 R1 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 R1 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 R1 left", 2, params.mLeftKeys); + assertEquals("5 key auto 3 R1 right", 1, params.mRightKeys); + assertEquals("5 key auto 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 3 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("5 key auto 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout5KeyAuto3R2() { + MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2); + assertEquals("5 key auto 3 R2 columns", 3, params.mNumColumns); + assertEquals("5 key auto 3 R2 rows", 2, params.mNumRows); + assertEquals("5 key auto 3 R2 left", 1, params.mLeftKeys); + assertEquals("5 key auto 3 R2 right", 2, params.mRightKeys); + assertEquals("5 key auto 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 3 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("5 key auto 3 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("5 key auto 3 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("5 key auto 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] + // [3] <1> [2] [4] + public void testLayout5KeyAuto4M0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0); + assertEquals("5 key auto 4 M0 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 M0 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 M0 left", 1, params.mLeftKeys); + assertEquals("5 key auto 4 M0 right", 3, params.mRightKeys); + assertEquals("5 key auto 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key auto 4 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] + // |<1> [2] [3] [4] + public void testLayout5KeyAuto4L0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0); + assertEquals("5 key auto 4 L0 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 L0 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 L0 left", 0, params.mLeftKeys); + assertEquals("5 key auto 4 L0 right", 4, params.mRightKeys); + assertEquals("5 key auto 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key auto 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] + // |___ <1> [2] [3] [4] + public void testLayout5KeyAuto4L1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1); + assertEquals("5 key auto 4 L1 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 L1 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 L1 left", 0, params.mLeftKeys); + assertEquals("5 key auto 4 L1 right", 4, params.mRightKeys); + assertEquals("5 key auto 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key auto 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] + // |___ [3] <1> [2] [4] + public void testLayout5KeyAuto4L2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2); + assertEquals("5 key auto 4 L2 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 L2 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 L2 left", 1, params.mLeftKeys); + assertEquals("5 key auto 4 L2 right", 3, params.mRightKeys); + assertEquals("5 key auto 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key auto 4 L2 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5]| + // [4] [3] [2] <1>| + public void testLayout5KeyAuto4R0() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0); + assertEquals("5 key auto 4 R0 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 R0 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 R0 left", 3, params.mLeftKeys); + assertEquals("5 key auto 4 R0 right", 1, params.mRightKeys); + assertEquals("5 key auto 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 4 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("5 key auto 4 R0 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] ___| + // [4] [3] [2] <1> ___| + public void testLayout5KeyAuto4R1() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1); + assertEquals("5 key auto 4 R1 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 R1 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 R1 left", 3, params.mLeftKeys); + assertEquals("5 key auto 4 R1 right", 1, params.mRightKeys); + assertEquals("5 key auto 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 4 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("5 key auto 4 R1 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] ___| + // [4] [3] <1> [2] ___| + public void testLayout5KeyAuto4R2() { + MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2); + assertEquals("5 key auto 4 R2 columns", 4, params.mNumColumns); + assertEquals("5 key auto 4 R2 rows", 2, params.mNumRows); + assertEquals("5 key auto 4 R2 left", 2, params.mLeftKeys); + assertEquals("5 key auto 4 R2 right", 2, params.mRightKeys); + assertEquals("5 key auto 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 4 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("5 key auto 4 R2 [5]", 0, params.getColumnPos(4)); + assertEquals("5 key auto 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [5] [3] <1> [2] [4] + public void testLayout5KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0); + assertEquals("5 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 M0 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("5 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("5 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("5 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] [5] + public void testLayout5KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0); + assertEquals("5 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 L0 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("5 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("5 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("5 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] [5] + public void testLayout5KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1); + assertEquals("5 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 L1 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("5 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("5 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("5 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("5 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("5 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] [4] [5] + public void testLayout5KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2); + assertEquals("5 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 L2 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("5 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("5 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("5 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("5 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [5] [4] [3] [2] <1>| + public void testLayout5KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0); + assertEquals("5 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 R0 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("5 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("5 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("5 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("5 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [5] [4] [3] [2] <1> ___| + public void testLayout5KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1); + assertEquals("5 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 R1 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("5 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("5 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("5 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("5 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("5 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("5 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [5] [4] [3] <1> [2] ___| + public void testLayout5KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2); + assertEquals("5 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("5 key auto 5 R2 rows", 1, params.mNumRows); + assertEquals("5 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("5 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("5 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("5 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("5 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("5 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("5 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("5 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("5 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] + // [3] <1> [2] [4] + public void testLayout6KeyAuto4M0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0); + assertEquals("6 key auto 4 M0 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 M0 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 M0 left", 1, params.mLeftKeys); + assertEquals("6 key auto 4 M0 right", 3, params.mRightKeys); + assertEquals("6 key auto 4 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 4 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 4 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key auto 4 M0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 M0 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key auto 4 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[5] [6] + // |<1> [2] [3] [4] + public void testLayout6KeyAuto4L0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0); + assertEquals("6 key auto 4 L0 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 L0 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 L0 left", 0, params.mLeftKeys); + assertEquals("6 key auto 4 L0 right", 4, params.mRightKeys); + assertEquals("6 key auto 4 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 4 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key auto 4 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key auto 4 L0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 L0 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key auto 4 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] + // |___ <1> [2] [3] [4] + public void testLayout6KeyAuto4L1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1); + assertEquals("6 key auto 4 L1 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 L1 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 L1 left", 0, params.mLeftKeys); + assertEquals("6 key auto 4 L1 right", 4, params.mRightKeys); + assertEquals("6 key auto 4 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 4 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key auto 4 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key auto 4 L1 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 L1 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key auto 4 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [5] [6] + // |___ [3] <1> [2] [4] + public void testLayout6KeyAuto4L2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2); + assertEquals("6 key auto 4 L2 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 L2 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 L2 left", 1, params.mLeftKeys); + assertEquals("6 key auto 4 L2 right", 3, params.mRightKeys); + assertEquals("6 key auto 4 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 4 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 4 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key auto 4 L2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 L2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key auto 4 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6] [5]| + // [4] [3] [2] <1>| + public void testLayout6KeyAuto4R0() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0); + assertEquals("6 key auto 4 R0 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 R0 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 R0 left", 3, params.mLeftKeys); + assertEquals("6 key auto 4 R0 right", 1, params.mRightKeys); + assertEquals("6 key auto 4 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key auto 4 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key auto 4 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("6 key auto 4 R0 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 R0 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key auto 4 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [6] [5] ___| + // [4] [3] [2] <1> ___| + public void testLayout6KeyAuto4R1() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1); + assertEquals("6 key auto 4 R1 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 R1 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 R1 left", 3, params.mLeftKeys); + assertEquals("6 key auto 4 R1 right", 1, params.mRightKeys); + assertEquals("6 key auto 4 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key auto 4 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key auto 4 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("6 key auto 4 R1 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 R1 [6]", -1, params.getColumnPos(5)); + assertEquals("6 key auto 4 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [5] [6] ___| + // [4] [3] <1> [2] ___| + public void testLayout6KeyAuto4R2() { + MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2); + assertEquals("6 key auto 4 R2 columns", 4, params.mNumColumns); + assertEquals("6 key auto 4 R2 rows", 2, params.mNumRows); + assertEquals("6 key auto 4 R2 left", 2, params.mLeftKeys); + assertEquals("6 key auto 4 R2 right", 2, params.mRightKeys); + assertEquals("6 key auto 4 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 4 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 4 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 4 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("6 key auto 4 R2 [5]", 0, params.getColumnPos(4)); + assertEquals("6 key auto 4 R2 [6]", 1, params.getColumnPos(5)); + assertEquals("6 key auto 4 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [6] + // [5] [3] <1> [2] [4] + public void testLayout6KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0); + assertEquals("6 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 M0 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("6 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("6 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("6 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] + // |<1> [2] [3] [4] [5] + public void testLayout6KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0); + assertEquals("6 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 L0 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("6 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("6 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("6 key auto 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] + // |___ <1> [2] [3] [4] [5] + public void testLayout6KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1); + assertEquals("6 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 L1 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("6 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("6 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("6 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("6 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("6 key auto 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] + // |___ [3] <1> [2] [4] [5] + public void testLayout6KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2); + assertEquals("6 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 L2 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("6 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("6 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("6 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("6 key auto 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [6]| + // [5] [4] [3] [2] <1>| + public void testLayout6KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0); + assertEquals("6 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 R0 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("6 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("6 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("6 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("6 key auto 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] ___| + // [5] [4] [3] [2] <1> ___| + public void testLayout6KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1); + assertEquals("6 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 R1 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("6 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("6 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("6 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("6 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("6 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("6 key auto 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] ___| + // [5] [4] [3] <1> [2] ___| + public void testLayout6KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2); + assertEquals("6 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("6 key auto 5 R2 rows", 2, params.mNumRows); + assertEquals("6 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("6 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("6 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("6 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("6 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("6 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("6 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("6 key auto 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("6 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("6 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // |<1> [2] [3] [4] [5] [6] [7] ___ ___ ___| + public void testLayout7KeyAuto7L0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0); + assertEquals("7 key auto 7 L0 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 L0 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 L0 left", 0, params.mLeftKeys); + assertEquals("7 key auto 7 L0 right", 7, params.mRightKeys); + assertEquals("7 key auto 7 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 7 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key auto 7 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key auto 7 L0 [6]", 5, params.getColumnPos(5)); + assertEquals("7 key auto 7 L0 [7]", 6, params.getColumnPos(6)); + assertEquals("7 key auto 7 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ <1> [2] [3] [4] [5] [6] [7] ___ ___| + public void testLayout7KeyAuto7L1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1); + assertEquals("7 key auto 7 L1 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 L1 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 L1 left", 0, params.mLeftKeys); + assertEquals("7 key auto 7 L1 right", 7, params.mRightKeys); + assertEquals("7 key auto 7 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 7 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key auto 7 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key auto 7 L1 [6]", 5, params.getColumnPos(5)); + assertEquals("7 key auto 7 L1 [7]", 6, params.getColumnPos(6)); + assertEquals("7 key auto 7 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [3] <1> [2] [4] [5] [6] [7] ___ ___| + public void testLayout7KeyAuto7L2() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2); + assertEquals("7 key auto 7 L2 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 L2 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 L2 left", 1, params.mLeftKeys); + assertEquals("7 key auto 7 L2 right", 6, params.mRightKeys); + assertEquals("7 key auto 7 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 7 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("7 key auto 7 L2 [6]", 4, params.getColumnPos(5)); + assertEquals("7 key auto 7 L2 [7]", 5, params.getColumnPos(6)); + assertEquals("7 key auto 7 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |___ [5] [3] <1> [2] [4] [6] [7] ___ ___| + public void testLayout7KeyAuto7L3() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3); + assertEquals("7 key auto 7 L3 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 L3 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 L3 left", 2, params.mLeftKeys); + assertEquals("7 key auto 7 L3 right", 5, params.mRightKeys); + assertEquals("7 key auto 7 L3 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 L3 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 L3 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 L3 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 7 L3 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key auto 7 L3 [6]", 3, params.getColumnPos(5)); + assertEquals("7 key auto 7 L3 [7]", 4, params.getColumnPos(6)); + assertEquals("7 key auto 7 L3 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 L3 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |___ [7] [5] [3] <1> [2] [4] [6] ___ ___| + public void testLayout7KeyAuto7M0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0); + assertEquals("7 key auto 7 M0 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 M0 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 M0 left", 3, params.mLeftKeys); + assertEquals("7 key auto 7 M0 right", 4, params.mRightKeys); + assertEquals("7 key auto 7 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 7 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key auto 7 M0 [6]", 3, params.getColumnPos(5)); + assertEquals("7 key auto 7 M0 [7]", -3, params.getColumnPos(6)); + assertEquals("7 key auto 7 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 M0 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // |___ ___ [7] [5] [3] <1> [2] [4] [6] ___| + public void testLayout7KeyAuto7M1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1); + assertEquals("7 key auto 7 M1 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 M1 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 M1 left", 3, params.mLeftKeys); + assertEquals("7 key auto 7 M1 right", 4, params.mRightKeys); + assertEquals("7 key auto 7 M1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 M1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 M1 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 M1 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 7 M1 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key auto 7 M1 [6]", 3, params.getColumnPos(5)); + assertEquals("7 key auto 7 M1 [7]", -3, params.getColumnPos(6)); + assertEquals("7 key auto 7 M1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 M1 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // |___ ___ [7] [6] [5] [3] <1> [2] [4] ___| + public void testLayout7KeyAuto7R3() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3); + assertEquals("7 key auto 7 R3 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 R3 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 R3 left", 4, params.mLeftKeys); + assertEquals("7 key auto 7 R3 right", 3, params.mRightKeys); + assertEquals("7 key auto 7 R3 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 R3 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 R3 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 R3 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 7 R3 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key auto 7 R3 [6]", -3, params.getColumnPos(5)); + assertEquals("7 key auto 7 R3 [7]", -4, params.getColumnPos(6)); + assertEquals("7 key auto 7 R3 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 R3 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // |___ ___ [7] [6] [5] [4] [3] <1> [2] ___| + public void testLayout7KeyAuto7R2() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2); + assertEquals("7 key auto 7 R2 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 R2 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 R2 left", 5, params.mLeftKeys); + assertEquals("7 key auto 7 R2 right", 2, params.mRightKeys); + assertEquals("7 key auto 7 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 7 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 7 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("7 key auto 7 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("7 key auto 7 R2 [6]", -4, params.getColumnPos(5)); + assertEquals("7 key auto 7 R2 [7]", -5, params.getColumnPos(6)); + assertEquals("7 key auto 7 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 R2 default", WIDTH * 5, params.getDefaultKeyCoordX()); + } + + // |___ ___ [7] [6] [5] [4] [3] [2] <1> ___| + public void testLayout7KeyAuto7R1() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1); + assertEquals("7 key auto 7 R1 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 R1 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 R1 left", 6, params.mLeftKeys); + assertEquals("7 key auto 7 R1 right", 1, params.mRightKeys); + assertEquals("7 key auto 7 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 7 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 7 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key auto 7 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("7 key auto 7 R1 [6]", -5, params.getColumnPos(5)); + assertEquals("7 key auto 7 R1 [7]", -6, params.getColumnPos(6)); + assertEquals("7 key auto 7 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 R1 default", WIDTH * 6, params.getDefaultKeyCoordX()); + } + + // |___ ___ [7] [6] [5] [4] [3] [2] <1>| + public void testLayout7KeyAuto7R0() { + MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0); + assertEquals("7 key auto 7 R0 columns", 7, params.mNumColumns); + assertEquals("7 key auto 7 R0 rows", 1, params.mNumRows); + assertEquals("7 key auto 7 R0 left", 6, params.mLeftKeys); + assertEquals("7 key auto 7 R0 right", 1, params.mRightKeys); + assertEquals("7 key auto 7 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 7 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 7 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 7 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key auto 7 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("7 key auto 7 R0 [6]", -5, params.getColumnPos(5)); + assertEquals("7 key auto 7 R0 [7]", -6, params.getColumnPos(6)); + assertEquals("7 key auto 7 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 7 R0 default", WIDTH * 6, params.getDefaultKeyCoordX()); + } + + // [6] [7] + // [5] [3] <1> [2] [4] + public void testLayout7KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0); + assertEquals("7 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 M0 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("7 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("7 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("7 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key auto 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] + // |<1> [2] [3] [4] [5] + public void testLayout7KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0); + assertEquals("7 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 L0 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("7 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("7 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key auto 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] + // |___ <1> [2] [3] [4] [5] + public void testLayout7KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1); + assertEquals("7 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 L1 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("7 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("7 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("7 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("7 key auto 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] + // |___ [3] <1> [2] [4] [5] + public void testLayout7KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2); + assertEquals("7 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 L2 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("7 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("7 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("7 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("7 key auto 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key auto 5 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [7] [6]| + // [5] [4] [3] [2] <1>| + public void testLayout7KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0); + assertEquals("7 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 R0 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("7 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("7 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("7 key auto 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("7 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [7] [6] ___| + // [5] [4] [3] [2] <1> ___| + public void testLayout7KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1); + assertEquals("7 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 R1 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("7 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("7 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("7 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("7 key auto 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("7 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [6] [7] ___| + // [5] [4] [3] <1> [2] ___| + public void testLayout7KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2); + assertEquals("7 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("7 key auto 5 R2 rows", 2, params.mNumRows); + assertEquals("7 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("7 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("7 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("7 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("7 key auto 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("7 key auto 5 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("7 key auto 5 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("7 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [7] + // [6] [4] [5] + // [3] <1> [2] + public void testLayout7KeyAuto3M0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_M0); + assertEquals("7 key auto 3 M0 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 M0 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 M0 left", 1, params.mLeftKeys); + assertEquals("7 key auto 3 M0 right", 2, params.mRightKeys); + assertEquals("7 key auto 3 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 3 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 3 M0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 M0 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key auto 3 M0 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key auto 3 M0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // |[7] + // |[4] [5] [6] + // |<1> [2] [3] + public void testLayout7KeyAuto3L0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L0); + assertEquals("7 key auto 3 L0 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 L0 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 L0 left", 0, params.mLeftKeys); + assertEquals("7 key auto 3 L0 right", 3, params.mRightKeys); + assertEquals("7 key auto 3 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 3 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 3 L0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 L0 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key auto 3 L0 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key auto 3 L0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [7] + // |___ [4] [5] [6] + // |___ <1> [2] [3] + public void testLayout7KeyAuto3L1() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L1); + assertEquals("7 key auto 3 L1 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 L1 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 L1 left", 0, params.mLeftKeys); + assertEquals("7 key auto 3 L1 right", 3, params.mRightKeys); + assertEquals("7 key auto 3 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 3 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("7 key auto 3 L1 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 L1 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key auto 3 L1 [6]", 2, params.getColumnPos(5)); + assertEquals("7 key auto 3 L1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [7] + // |___ [6] [4] [5] + // |___ [3] <1> [2] + public void testLayout7KeyAuto3L2() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L2); + assertEquals("7 key auto 3 L2 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 L2 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 L2 left", 1, params.mLeftKeys); + assertEquals("7 key auto 3 L2 right", 2, params.mRightKeys); + assertEquals("7 key auto 3 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 3 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 3 L2 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 L2 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key auto 3 L2 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key auto 3 L2 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [7]| + // [6] [5] [4]| + // [3] [2] <1>| + public void testLayout7KeyAuto3R0() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R0); + assertEquals("7 key auto 3 R0 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 R0 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 R0 left", 2, params.mLeftKeys); + assertEquals("7 key auto 3 R0 right", 1, params.mRightKeys); + assertEquals("7 key auto 3 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 3 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 3 R0 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 R0 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key auto 3 R0 [6]", -2, params.getColumnPos(5)); + assertEquals("7 key auto 3 R0 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [7] ___| + // [6] [5] [4] ___| + // [3] [2] <1> ___| + public void testLayout7KeyAuto3R1() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R1); + assertEquals("7 key auto 3 R1 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 R1 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 R1 left", 2, params.mLeftKeys); + assertEquals("7 key auto 3 R1 right", 1, params.mRightKeys); + assertEquals("7 key auto 3 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("7 key auto 3 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("7 key auto 3 R1 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 R1 [5]", -1, params.getColumnPos(4)); + assertEquals("7 key auto 3 R1 [6]", -2, params.getColumnPos(5)); + assertEquals("7 key auto 3 R1 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [7] ___| + // [6] [4] [5] ___| + // [3] <1> [2] ___| + public void testLayout7KeyAuto3R2() { + MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R2); + assertEquals("7 key auto 3 R2 columns", 3, params.mNumColumns); + assertEquals("7 key auto 3 R2 rows", 3, params.mNumRows); + assertEquals("7 key auto 3 R2 left", 1, params.mLeftKeys); + assertEquals("7 key auto 3 R2 right", 2, params.mRightKeys); + assertEquals("7 key auto 3 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("7 key auto 3 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("7 key auto 3 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("7 key auto 3 R2 [4]", 0, params.getColumnPos(3)); + assertEquals("7 key auto 3 R2 [5]", 1, params.getColumnPos(4)); + assertEquals("7 key auto 3 R2 [6]", -1, params.getColumnPos(5)); + assertEquals("7 key auto 3 R2 [7]", 0, params.getColumnPos(6)); + assertEquals("7 key auto 3 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("7 key auto 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [8] [6] [7] + // [5] [3] <1> [2] [4] + public void testLayout8KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0); + assertEquals("8 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 M0 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("8 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("8 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("8 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("8 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("8 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] + // |<1> [2] [3] [4] [5] + public void testLayout8KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0); + assertEquals("8 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 L0 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("8 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("8 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("8 key auto 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key auto 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] + // |___ <1> [2] [3] [4] [5] + public void testLayout8KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1); + assertEquals("8 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 L1 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("8 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("8 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("8 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("8 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("8 key auto 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key auto 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("8 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [8] [6] [7] + // |___ [3] <1> [2] [4] [5] + public void testLayout8KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2); + assertEquals("8 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 L2 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("8 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("8 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("8 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("8 key auto 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key auto 5 L2 [8]", -1, params.getColumnPos(7)); + assertEquals("8 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [8] [7] [6]| + // [5] [4] [3] [2] <1>| + public void testLayout8KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0); + assertEquals("8 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 R0 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("8 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("8 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("8 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("8 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("8 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("8 key auto 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key auto 5 R0 [8]", -2, params.getColumnPos(7)); + assertEquals("8 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [8] [7] [6] ___| + // [5] [4] [3] [2] <1> ___| + public void testLayout8KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1); + assertEquals("8 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 R1 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("8 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("8 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("8 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("8 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("8 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("8 key auto 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("8 key auto 5 R1 [8]", -2, params.getColumnPos(7)); + assertEquals("8 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [8] [6] [7] ___| + // [5] [4] [3] <1> [2] ___| + public void testLayout8KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2); + assertEquals("8 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("8 key auto 5 R2 rows", 2, params.mNumRows); + assertEquals("8 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("8 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("8 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("8 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("8 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("8 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("8 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("8 key auto 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("8 key auto 5 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("8 key auto 5 R2 [8]", -1, params.getColumnPos(7)); + assertEquals("8 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("8 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout9KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0); + assertEquals("9 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 M0 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("9 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("9 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("9 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("9 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("9 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("9 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("9 key auto 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] [9] + // |<1> [2] [3] [4] [5] + public void testLayout9KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0); + assertEquals("9 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 L0 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("9 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("9 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("9 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("9 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("9 key auto 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key auto 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key auto 5 L0 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] + // |___ <1> [2] [3] [4] [5] + public void testLayout9KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1); + assertEquals("9 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 L1 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("9 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("9 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("9 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("9 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("9 key auto 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key auto 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key auto 5 L1 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key auto 5 L1 adjust",0, params.mTopRowAdjustment); + assertEquals("9 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] + // |___ [3] <1> [2] [4] [5] + public void testLayout9KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2); + assertEquals("9 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 L2 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("9 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("9 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("9 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("9 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("9 key auto 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key auto 5 L2 [8]", 2, params.getColumnPos(7)); + assertEquals("9 key auto 5 L2 [9]", 3, params.getColumnPos(8)); + assertEquals("9 key auto 5 L2 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [9] [8] [7] [6]| + // [5] [4] [3] [2] <1>| + public void testLayout9KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0); + assertEquals("9 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 R0 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("9 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("9 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("9 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("9 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("9 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("9 key auto 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("9 key auto 5 R0 [8]", -2, params.getColumnPos(7)); + assertEquals("9 key auto 5 R0 [9]", -3, params.getColumnPos(8)); + assertEquals("9 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [9] [8] [7] [6] ___| + // [5] [4] [3] [2] <1> ___| + public void testLayout9KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1); + assertEquals("9 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 R1 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("9 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("9 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("9 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("9 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("9 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("9 key auto 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("9 key auto 5 R1 [8]", -2, params.getColumnPos(7)); + assertEquals("9 key auto 5 R1 [9]", -3, params.getColumnPos(8)); + assertEquals("9 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("9 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [9] [8] [6] [7] ___| + // [5] [4] [3] <1> [2] ___| + public void testLayout9KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2); + assertEquals("9 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("9 key auto 5 R2 rows", 2, params.mNumRows); + assertEquals("9 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("9 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("9 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("9 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("9 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("9 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("9 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("9 key auto 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("9 key auto 5 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("9 key auto 5 R2 [8]", -1, params.getColumnPos(7)); + assertEquals("9 key auto 5 R2 [9]", -2, params.getColumnPos(8)); + assertEquals("9 key auto 5 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("9 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout10KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0); + assertEquals("10 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 M0 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("10 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("10 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("10 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("10 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("10 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("10 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("10 key auto 5 M0 [A]", -2, params.getColumnPos(9)); + assertEquals("10 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // |[6] [7] [8] [9] [A] + // |<1> [2] [3] [4] [5] + public void testLayout10KeyAuto5L0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0); + assertEquals("10 key auto 5 L0 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 L0 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 L0 left", 0, params.mLeftKeys); + assertEquals("10 key auto 5 L0 right", 5, params.mRightKeys); + assertEquals("10 key auto 5 L0 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 L0 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key auto 5 L0 [3]", 2, params.getColumnPos(2)); + assertEquals("10 key auto 5 L0 [4]", 3, params.getColumnPos(3)); + assertEquals("10 key auto 5 L0 [5]", 4, params.getColumnPos(4)); + assertEquals("10 key auto 5 L0 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 L0 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key auto 5 L0 [8]", 2, params.getColumnPos(7)); + assertEquals("10 key auto 5 L0 [9]", 3, params.getColumnPos(8)); + assertEquals("10 key auto 5 L0 [A]", 4, params.getColumnPos(9)); + assertEquals("10 key auto 5 L0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [6] [7] [8] [9] [A] + // |___ <1> [2] [3] [4] [5] + public void testLayout10KeyAuto5L1() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1); + assertEquals("10 key auto 5 L1 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 L1 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 L1 left", 0, params.mLeftKeys); + assertEquals("10 key auto 5 L1 right", 5, params.mRightKeys); + assertEquals("10 key auto 5 L1 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 L1 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key auto 5 L1 [3]", 2, params.getColumnPos(2)); + assertEquals("10 key auto 5 L1 [4]", 3, params.getColumnPos(3)); + assertEquals("10 key auto 5 L1 [5]", 4, params.getColumnPos(4)); + assertEquals("10 key auto 5 L1 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 L1 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key auto 5 L1 [8]", 2, params.getColumnPos(7)); + assertEquals("10 key auto 5 L1 [9]", 3, params.getColumnPos(8)); + assertEquals("10 key auto 5 L1 [A]", 4, params.getColumnPos(9)); + assertEquals("10 key auto 5 L1 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX()); + } + + // |___ [8] [6] [7] [9] [A] + // |___ [3] <1> [2] [4] [5] + public void testLayout10KeyAuto5L2() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2); + assertEquals("10 key auto 5 L2 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 L2 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 L2 left", 1, params.mLeftKeys); + assertEquals("10 key auto 5 L2 right", 4, params.mRightKeys); + assertEquals("10 key auto 5 L2 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 L2 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key auto 5 L2 [3]", -1, params.getColumnPos(2)); + assertEquals("10 key auto 5 L2 [4]", 2, params.getColumnPos(3)); + assertEquals("10 key auto 5 L2 [5]", 3, params.getColumnPos(4)); + assertEquals("10 key auto 5 L2 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 L2 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key auto 5 L2 [8]", -1, params.getColumnPos(7)); + assertEquals("10 key auto 5 L2 [9]", 2, params.getColumnPos(8)); + assertEquals("10 key auto 5 L2 [A]", 3, params.getColumnPos(9)); + assertEquals("10 key auto 5 L2 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX()); + } + + // [A] [9] [8] [7] [6]| + // [5] [4] [3] [2] <1>| + public void testLayout10KeyAuto5R0() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0); + assertEquals("10 key auto 5 R0 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 R0 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 R0 left", 4, params.mLeftKeys); + assertEquals("10 key auto 5 R0 right", 1, params.mRightKeys); + assertEquals("10 key auto 5 R0 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 R0 [2]", -1, params.getColumnPos(1)); + assertEquals("10 key auto 5 R0 [3]", -2, params.getColumnPos(2)); + assertEquals("10 key auto 5 R0 [4]", -3, params.getColumnPos(3)); + assertEquals("10 key auto 5 R0 [5]", -4, params.getColumnPos(4)); + assertEquals("10 key auto 5 R0 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 R0 [7]", -1, params.getColumnPos(6)); + assertEquals("10 key auto 5 R0 [8]", -2, params.getColumnPos(7)); + assertEquals("10 key auto 5 R0 [9]", -3, params.getColumnPos(8)); + assertEquals("10 key auto 5 R0 [A]", -4, params.getColumnPos(9)); + assertEquals("10 key auto 5 R0 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [A] [9] [8] [7] [6] ___| + // [5] [4] [3] [2] <1> ___| + public void testLayout10KeyAuto5R1() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1); + assertEquals("10 key auto 5 R1 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 R1 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 R1 left", 4, params.mLeftKeys); + assertEquals("10 key auto 5 R1 right", 1, params.mRightKeys); + assertEquals("10 key auto 5 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("10 key auto 5 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("10 key auto 5 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("10 key auto 5 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("10 key auto 5 R1 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 R1 [7]", -1, params.getColumnPos(6)); + assertEquals("10 key auto 5 R1 [8]", -2, params.getColumnPos(7)); + assertEquals("10 key auto 5 R1 [9]", -3, params.getColumnPos(8)); + assertEquals("10 key auto 5 R1 [A]", -4, params.getColumnPos(9)); + assertEquals("10 key auto 5 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX()); + } + + // [A] [9] [8] [6] [7] ___| + // [5] [4] [3] <1> [2] ___| + public void testLayout10KeyAuto5R2() { + MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2); + assertEquals("10 key auto 5 R2 columns", 5, params.mNumColumns); + assertEquals("10 key auto 5 R2 rows", 2, params.mNumRows); + assertEquals("10 key auto 5 R2 left", 3, params.mLeftKeys); + assertEquals("10 key auto 5 R2 right", 2, params.mRightKeys); + assertEquals("10 key auto 5 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("10 key auto 5 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("10 key auto 5 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("10 key auto 5 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("10 key auto 5 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("10 key auto 5 R2 [6]", 0, params.getColumnPos(5)); + assertEquals("10 key auto 5 R2 [7]", 1, params.getColumnPos(6)); + assertEquals("10 key auto 5 R2 [8]", -1, params.getColumnPos(7)); + assertEquals("10 key auto 5 R2 [9]", -2, params.getColumnPos(8)); + assertEquals("10 key auto 5 R2 [A]", -3, params.getColumnPos(9)); + assertEquals("10 key auto 5 R2 adjust", 0, params.mTopRowAdjustment); + assertEquals("10 key auto 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX()); + } + + // [B] + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout11KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0); + assertEquals("11 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("11 key auto 5 M0 rows", 3, params.mNumRows); + assertEquals("11 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("11 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("11 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("11 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("11 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("11 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("11 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("11 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("11 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("11 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("11 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("11 key auto 5 M0 [A]", -2, params.getColumnPos(9)); + assertEquals("11 key auto 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("11 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("11 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [B] [C] + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout12KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0); + assertEquals("12 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("12 key auto 5 M0 rows", 3, params.mNumRows); + assertEquals("12 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("12 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("12 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("12 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("12 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("12 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("12 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("12 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("12 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("12 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("12 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("12 key auto 5 M0 [A]", -2, params.getColumnPos(9)); + assertEquals("12 key auto 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("12 key auto 5 M0 [C]", 1, params.getColumnPos(11)); + assertEquals("12 key auto 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("12 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [D] [B] [C] + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout13KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0); + assertEquals("13 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("13 key auto 5 M0 rows", 3, params.mNumRows); + assertEquals("13 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("13 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("13 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("13 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("13 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("13 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("13 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("13 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("13 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("13 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("13 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("13 key auto 5 M0 [A]", -2, params.getColumnPos(9)); + assertEquals("13 key auto 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("13 key auto 5 M0 [C]", 1, params.getColumnPos(11)); + assertEquals("13 key auto 5 M0 [D]", -1, params.getColumnPos(12)); + assertEquals("13 key auto 5 M0 adjust", 0, params.mTopRowAdjustment); + assertEquals("13 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [D] [B] [C] [E] + // [A] [8] [6] [7] [9] + // [5] [3] <1> [2] [4] + public void testLayout14KeyAuto5M0() { + MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0); + assertEquals("13 key auto 5 M0 columns", 5, params.mNumColumns); + assertEquals("13 key auto 5 M0 rows", 3, params.mNumRows); + assertEquals("13 key auto 5 M0 left", 2, params.mLeftKeys); + assertEquals("13 key auto 5 M0 right", 3, params.mRightKeys); + assertEquals("13 key auto 5 M0 <1>", 0, params.getColumnPos(0)); + assertEquals("13 key auto 5 M0 [2]", 1, params.getColumnPos(1)); + assertEquals("13 key auto 5 M0 [3]", -1, params.getColumnPos(2)); + assertEquals("13 key auto 5 M0 [4]", 2, params.getColumnPos(3)); + assertEquals("13 key auto 5 M0 [5]", -2, params.getColumnPos(4)); + assertEquals("13 key auto 5 M0 [6]", 0, params.getColumnPos(5)); + assertEquals("13 key auto 5 M0 [7]", 1, params.getColumnPos(6)); + assertEquals("13 key auto 5 M0 [8]", -1, params.getColumnPos(7)); + assertEquals("13 key auto 5 M0 [9]", 2, params.getColumnPos(8)); + assertEquals("13 key auto 5 M0 [A]", -2, params.getColumnPos(9)); + assertEquals("13 key auto 5 M0 [B]", 0, params.getColumnPos(10)); + assertEquals("13 key auto 5 M0 [C]", 1, params.getColumnPos(11)); + assertEquals("13 key auto 5 M0 [D]", -1, params.getColumnPos(12)); + assertEquals("13 key auto 5 M0 [E]", 2, params.getColumnPos(13)); + assertEquals("13 key auto 5 M0 adjust", -1, params.mTopRowAdjustment); + assertEquals("13 key auto 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX()); + } + + // [J] [I] [H] ___| + // [G] [F] [E] [D] [C] [B] [A] [9] ___| + // [8] [7] [6] [5] [4] [3] [2] <1> ___| + public void testLayout19KeyAuto8R1() { + MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R1); + assertEquals("19 key auto 8 R1 columns", 8, params.mNumColumns); + assertEquals("19 key auto 8 R1 rows", 3, params.mNumRows); + assertEquals("19 key auto 8 R1 left", 7, params.mLeftKeys); + assertEquals("19 key auto 8 R1 right", 1, params.mRightKeys); + assertEquals("19 key auto 8 R1 <1>", 0, params.getColumnPos(0)); + assertEquals("19 key auto 8 R1 [2]", -1, params.getColumnPos(1)); + assertEquals("19 key auto 8 R1 [3]", -2, params.getColumnPos(2)); + assertEquals("19 key auto 8 R1 [4]", -3, params.getColumnPos(3)); + assertEquals("19 key auto 8 R1 [5]", -4, params.getColumnPos(4)); + assertEquals("19 key auto 8 R1 [6]", -5, params.getColumnPos(5)); + assertEquals("19 key auto 8 R1 [7]", -6, params.getColumnPos(6)); + assertEquals("19 key auto 8 R1 [8]", -7, params.getColumnPos(7)); + assertEquals("19 key auto 8 R1 [9]", 0, params.getColumnPos(8)); + assertEquals("19 key auto 8 R1 [A]", -1, params.getColumnPos(9)); + assertEquals("19 key auto 8 R1 [B]", -2, params.getColumnPos(10)); + assertEquals("19 key auto 8 R1 [C]", -3, params.getColumnPos(11)); + assertEquals("19 key auto 8 R1 [D]", -4, params.getColumnPos(12)); + assertEquals("19 key auto 8 R1 [E]", -5, params.getColumnPos(13)); + assertEquals("19 key auto 8 R1 [F]", -6, params.getColumnPos(14)); + assertEquals("19 key auto 8 R1 [G]", -7, params.getColumnPos(15)); + assertEquals("19 key auto 8 R1 [H]", 0, params.getColumnPos(16)); + assertEquals("19 key auto 8 R1 [I]", -1, params.getColumnPos(17)); + assertEquals("19 key auto 8 R1 [J]", -2, params.getColumnPos(18)); + assertEquals("19 key auto 8 R1 adjust", 0, params.mTopRowAdjustment); + assertEquals("19 key auto 8 R1 default", WIDTH * 7, params.getDefaultKeyCoordX()); + } + + // [J] [H] [I] ___| + // [G] [F] [E] [D] [C] [B] [9] [A] ___| + // [8] [7] [6] [5] [4] [3] <1> [2] ___| + public void testLayout19KeyAuto8R2() { + MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R2); + assertEquals("19 key auto 8 R2 columns", 8, params.mNumColumns); + assertEquals("19 key auto 8 R2 rows", 3, params.mNumRows); + assertEquals("19 key auto 8 R2 left", 6, params.mLeftKeys); + assertEquals("19 key auto 8 R2 right", 2, params.mRightKeys); + assertEquals("19 key auto 8 R2 <1>", 0, params.getColumnPos(0)); + assertEquals("19 key auto 8 R2 [2]", 1, params.getColumnPos(1)); + assertEquals("19 key auto 8 R2 [3]", -1, params.getColumnPos(2)); + assertEquals("19 key auto 8 R2 [4]", -2, params.getColumnPos(3)); + assertEquals("19 key auto 8 R2 [5]", -3, params.getColumnPos(4)); + assertEquals("19 key auto 8 R2 [6]", -4, params.getColumnPos(5)); + assertEquals("19 key auto 8 R2 [7]", -5, params.getColumnPos(6)); + assertEquals("19 key auto 8 R2 [8]", -6, params.getColumnPos(7)); + assertEquals("19 key auto 8 R2 [9]", 0, params.getColumnPos(8)); + assertEquals("19 key auto 8 R2 [A]", 1, params.getColumnPos(9)); + assertEquals("19 key auto 8 R2 [B]", -1, params.getColumnPos(10)); + assertEquals("19 key auto 8 R2 [C]", -2, params.getColumnPos(11)); + assertEquals("19 key auto 8 R2 [D]", -3, params.getColumnPos(12)); + assertEquals("19 key auto 8 R2 [E]", -4, params.getColumnPos(13)); + assertEquals("19 key auto 8 R2 [F]", -5, params.getColumnPos(14)); + assertEquals("19 key auto 8 R2 [G]", -6, params.getColumnPos(15)); + assertEquals("19 key auto 8 R2 [H]", 0, params.getColumnPos(16)); + assertEquals("19 key auto 8 R2 [I]", 1, params.getColumnPos(17)); + assertEquals("19 key auto 8 R2 [J]", -1, params.getColumnPos(18)); + assertEquals("19 key auto 8 R2 adjust", -1, params.mTopRowAdjustment); + assertEquals("19 key auto 8 R2 default", WIDTH * 6, params.getDefaultKeyCoordX()); + } + + // [J] [H] [I] ___| + // [G] [F] [E] [D] [B] [9] [A] [C] ___| + // [8] [7] [6] [5] [3] <1> [2] [4] ___| + public void testLayout19KeyAuto8R3() { + MoreKeysKeyboardParams params = createParams(19, 8, XPOS_R3); + assertEquals("19 key auto 8 R3 columns", 8, params.mNumColumns); + assertEquals("19 key auto 8 R3 rows", 3, params.mNumRows); + assertEquals("19 key auto 8 R3 left", 5, params.mLeftKeys); + assertEquals("19 key auto 8 R3 right", 3, params.mRightKeys); + assertEquals("19 key auto 8 R3 <1>", 0, params.getColumnPos(0)); + assertEquals("19 key auto 8 R3 [2]", 1, params.getColumnPos(1)); + assertEquals("19 key auto 8 R3 [3]", -1, params.getColumnPos(2)); + assertEquals("19 key auto 8 R3 [4]", 2, params.getColumnPos(3)); + assertEquals("19 key auto 8 R3 [5]", -2, params.getColumnPos(4)); + assertEquals("19 key auto 8 R3 [6]", -3, params.getColumnPos(5)); + assertEquals("19 key auto 8 R3 [7]", -4, params.getColumnPos(6)); + assertEquals("19 key auto 8 R3 [8]", -5, params.getColumnPos(7)); + assertEquals("19 key auto 8 R3 [9]", 0, params.getColumnPos(8)); + assertEquals("19 key auto 8 R3 [A]", 1, params.getColumnPos(9)); + assertEquals("19 key auto 8 R3 [B]", -1, params.getColumnPos(10)); + assertEquals("19 key auto 8 R3 [C]", 2, params.getColumnPos(11)); + assertEquals("19 key auto 8 R3 [D]", -2, params.getColumnPos(12)); + assertEquals("19 key auto 8 R3 [E]", -3, params.getColumnPos(13)); + assertEquals("19 key auto 8 R3 [F]", -4, params.getColumnPos(14)); + assertEquals("19 key auto 8 R3 [G]", -5, params.getColumnPos(15)); + assertEquals("19 key auto 8 R3 [H]", 0, params.getColumnPos(16)); + assertEquals("19 key auto 8 R3 [I]", 1, params.getColumnPos(17)); + assertEquals("19 key auto 8 R3 [J]", -1, params.getColumnPos(18)); + assertEquals("19 key auto 8 R3 adjust", -1, params.mTopRowAdjustment); + assertEquals("19 key auto 8 R3 default", WIDTH * 5, params.getDefaultKeyCoordX()); + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java index 6d9c3fdbb..7e51d955d 100644 --- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java +++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderFixedOrderTests.java @@ -47,7 +47,8 @@ public class MoreKeysKeyboardBuilderFixedOrderTests extends AndroidTestCase { final int coordXInParent) { final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams(); params.setParameters(numKeys, columnNum, WIDTH, HEIGHT, coordXInParent, KEYBOARD_WIDTH, - true /* isFixedOrderColumn */, 0 /* dividerWidth */); + true /* isMoreKeysFixedColumn */, true /* isMoreKeysFixedOrder */, + 0 /* dividerWidth */); return params; } diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java index b213721bd..806790eff 100644 --- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java +++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderMaxOrderTests.java @@ -22,7 +22,7 @@ import android.test.suitebuilder.annotation.MediumTest; import com.android.inputmethod.keyboard.MoreKeysKeyboard.MoreKeysKeyboardParams; @MediumTest -public class MoreKeysKeyboardBuilderTests extends AndroidTestCase { +public class MoreKeysKeyboardBuilderMaxOrderTests extends AndroidTestCase { private static final int WIDTH = 10; private static final int HEIGHT = 10; @@ -47,7 +47,8 @@ public class MoreKeysKeyboardBuilderTests extends AndroidTestCase { final int coordXInParent) { final MoreKeysKeyboardParams params = new MoreKeysKeyboardParams(); params.setParameters(numKeys, maxColumns, WIDTH, HEIGHT, coordXInParent, KEYBOARD_WIDTH, - false /* isFixedOrderColumn */, 0 /* dividerWidth */); + false /* isMoreKeysFixedColumn */, false /* isMoreKeysFixedOrder */, + 0 /* dividerWidth */); return params; } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Arabic.java b/tests/src/com/android/inputmethod/keyboard/layout/Arabic.java index fa818654e..3f85e4baa 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Arabic.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Arabic.java @@ -78,8 +78,7 @@ public final class Arabic extends LayoutBase { // U+061F: "؟" ARABIC QUESTION MARK // U+061B: "؛" ARABIC SEMICOLON return joinKeys(key("\u060C", joinMoreKeys( - ":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY)), - "_"); + ":", "!", "\u061F", "\u061B", "-", "\"", "'", SETTINGS_KEY))); } @Override @@ -90,7 +89,7 @@ public final class Arabic extends LayoutBase { // U+060C: "،" ARABIC COMMA // U+061F: "؟" ARABIC QUESTION MARK // U+061B: "؛" ARABIC SEMICOLON - return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone))); + return joinKeys(key(".", getPunctuationMoreKeys(isPhone))); } @Override diff --git a/tests/src/com/android/inputmethod/keyboard/layout/ArmenianPhonetic.java b/tests/src/com/android/inputmethod/keyboard/layout/ArmenianPhonetic.java index 42ce0c1ea..2cecedceb 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/ArmenianPhonetic.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/ArmenianPhonetic.java @@ -39,6 +39,9 @@ public final class ArmenianPhonetic extends LayoutBase { public ArmenianPhoneticCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey getAlphabetKey() { return ARMENIAN_ALPHABET_KEY; } @Override @@ -59,14 +62,14 @@ public final class ArmenianPhonetic extends LayoutBase { public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { // U+055D: "՝" ARMENIAN COMMA return isPhone ? joinKeys(key("\u055D", SETTINGS_KEY)) - : joinKeys(key("\u055D", SETTINGS_KEY), "_"); + : joinKeys(key("\u055D", SETTINGS_KEY)); } @Override public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { // U+0589: "։" ARMENIAN FULL STOP final ExpectedKey fullStopKey = key("\u0589", getPunctuationMoreKeys(isPhone)); - return isPhone ? joinKeys(fullStopKey) : joinKeys("/", fullStopKey); + return joinKeys(fullStopKey); } @Override @@ -112,29 +115,6 @@ public final class ArmenianPhonetic extends LayoutBase { return builder.build(); } - // Helper method to create alphabet layout by adding special function keys. - @Override - ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, - final boolean isPhone) { - final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); - if (isPhone) { - builder.addKeysOnTheRightOfRow(4, DELETE_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); - } else { - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(3, ENTER_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, EMOJI_KEY); - } - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); - return builder; - } - private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, // U+0567: "է" ARMENIAN SMALL LETTER EH diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java b/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java index e75cfd0ff..ba94c8dee 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Dvorak.java @@ -20,13 +20,14 @@ import com.android.inputmethod.keyboard.KeyboardId; import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder; import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey; +import com.android.inputmethod.latin.settings.CustomInputStyleSettingsFragment; import java.util.Locale; /** - * The QWERTY alphabet keyboard. + * The Dvorak alphabet keyboard. */ -public final class Dvorak extends LayoutBase { +public class Dvorak extends LayoutBase { private static final String LAYOUT_NAME = "dvorak"; public Dvorak(final LayoutCustomizer customizer) { @@ -51,17 +52,19 @@ public final class Dvorak extends LayoutBase { @Override public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { - return isPhone ? joinKeys(key("q", SETTINGS_KEY)) : - joinKeys(SETTINGS_KEY, key("_", moreKey("-"))); + // U+00A1: "¡" INVERTED EXCLAMATION MARK + return isPhone ? joinKeys(key("q", SETTINGS_KEY)) + : joinKeys(key("!", joinMoreKeys("\u00A1", SETTINGS_KEY))); } @Override public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { final ExpectedAdditionalMoreKey[] punctuationMoreKeys = convertToAdditionalMoreKeys(getPunctuationMoreKeys(isPhone)); + // U+00BF: "¿" INVERTED QUESTION MARK return isPhone ? joinKeys(key("z", punctuationMoreKeys)) - : joinKeys("/", key("?", moreKey("!"))); + : joinKeys(key("?", joinMoreKeys(punctuationMoreKeys, "\u00BF"))); } private static ExpectedAdditionalMoreKey[] convertToAdditionalMoreKeys( @@ -76,7 +79,33 @@ public final class Dvorak extends LayoutBase { } @Override - ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { return ALPHABET_COMMON; } + public ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) { + return ALPHABET_COMMON; + } + + protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) { + if (elementId == KeyboardId.ELEMENT_ALPHABET + || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { + return key("'", joinMoreKeys(additionalMoreKey("1"), "!", "\"")); + } + return key("\"", additionalMoreKey("1")); + } + + protected ExpectedKey getRow1_2Key(final boolean isPhone, final int elementId) { + if (elementId == KeyboardId.ELEMENT_ALPHABET + || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { + return key(",", joinMoreKeys(additionalMoreKey("2"), "?", "<")); + } + return key("<", additionalMoreKey("2")); + } + + protected ExpectedKey getRow1_3Key(final boolean isPhone, final int elementId) { + if (elementId == KeyboardId.ELEMENT_ALPHABET + || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { + return key(".", joinMoreKeys(additionalMoreKey("3"), ">")); + } + return key(">", additionalMoreKey("3")); + } @Override public ExpectedKey[][] getLayout(final boolean isPhone, final int elementId) { @@ -86,18 +115,9 @@ public final class Dvorak extends LayoutBase { } final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder( getCommonAlphabetLayout(isPhone)); - if (elementId == KeyboardId.ELEMENT_ALPHABET - || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED) { - builder.addKeysOnTheLeftOfRow(1, - key("'", joinMoreKeys(additionalMoreKey("1"), "!", "\"")), - key(",", joinMoreKeys(additionalMoreKey("2"), "?", "<")), - key(".", joinMoreKeys(additionalMoreKey("3"), ">"))); - } else { - builder.addKeysOnTheLeftOfRow(1, - key("\"", additionalMoreKey("1")), - key("<", additionalMoreKey("2")), - key(">", additionalMoreKey("3"))); - } + builder.replaceKeyOfLabel(ROW1_1, getRow1_1Key(isPhone, elementId)) + .replaceKeyOfLabel(ROW1_2, getRow1_2Key(isPhone, elementId)) + .replaceKeyOfLabel(ROW1_3, getRow1_3Key(isPhone, elementId)); convertCommonLayoutToKeyboard(builder, isPhone); getCustomizer().setAccentedLetters(builder); if (elementId != KeyboardId.ELEMENT_ALPHABET) { @@ -107,8 +127,13 @@ public final class Dvorak extends LayoutBase { return builder.build(); } + public static final String ROW1_1 = "ROW1_1"; + public static final String ROW1_2 = "ROW1_2"; + public static final String ROW1_3 = "ROW1_3"; + private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, + ROW1_1, ROW1_2, ROW1_3, key("p", additionalMoreKey("4")), key("y", additionalMoreKey("5")), key("f", additionalMoreKey("6")), diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java b/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java index a513740e7..7390457d0 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Farsi.java @@ -77,8 +77,7 @@ public final class Farsi extends LayoutBase { // U+061B: "؛" ARABIC SEMICOLON return joinKeys(key("\u060C", joinMoreKeys( ":", "!", "\u061F", "\u061B", "-", RtlSymbols.DOUBLE_ANGLE_QUOTES_LR_RTL, - SETTINGS_KEY)), - "_"); + SETTINGS_KEY))); } @Override @@ -86,7 +85,7 @@ public final class Farsi extends LayoutBase { if (isPhone) { return super.getKeysRightToSpacebar(isPhone); } - return joinKeys("/", key(".", getPunctuationMoreKeys(isPhone))); + return joinKeys(key(".", getPunctuationMoreKeys(isPhone))); } @Override diff --git a/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java b/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java index 2b625c32b..c2a15f3f3 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/HindiCompact.java @@ -50,7 +50,7 @@ public final class HindiCompact extends LayoutBase { public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { // U+0964: "।" DEVANAGARI DANDA final ExpectedKey periodKey = key("\u0964", getPunctuationMoreKeys(isPhone)); - return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey); + return joinKeys(periodKey); } @Override diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Khmer.java b/tests/src/com/android/inputmethod/keyboard/layout/Khmer.java index 143ccf6eb..7e4f159ab 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Khmer.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Khmer.java @@ -40,6 +40,9 @@ public final class Khmer extends LayoutBase { public KhmerCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey getAlphabetKey() { return KHMER_ALPHABET_KEY; } @Override @@ -79,29 +82,6 @@ public final class Khmer extends LayoutBase { return ALPHABET_SHIFTED_COMMON; } - // Helper method to create alphabet layout by adding special function keys. - @Override - ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, - final boolean isPhone) { - final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); - if (isPhone) { - builder.addKeysOnTheRightOfRow(4, DELETE_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); - } else { - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(3, ENTER_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, EMOJI_KEY); - } - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); - return builder; - } - private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, // U+17E1: "១" KHMER DIGIT ONE diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Lao.java b/tests/src/com/android/inputmethod/keyboard/layout/Lao.java index e7be9982a..aaa1c8a8a 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Lao.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Lao.java @@ -40,6 +40,9 @@ public final class Lao extends LayoutBase { public LaoCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey getAlphabetKey() { return LAO_ALPHABET_KEY; } @Override @@ -83,29 +86,6 @@ public final class Lao extends LayoutBase { return ALPHABET_SHIFTED_COMMON; } - // Helper method to create alphabet layout by adding special function keys. - @Override - ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, - final boolean isPhone) { - final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); - if (isPhone) { - builder.addKeysOnTheRightOfRow(4, DELETE_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); - } else { - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(3, ENTER_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, EMOJI_KEY); - } - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); - return builder; - } - private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, // U+0EA2: "ຢ" LAO LETTER YO diff --git a/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java b/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java index c5223720c..b05789b73 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/LayoutBase.java @@ -46,6 +46,10 @@ public abstract class LayoutBase extends AbstractLayoutBase { return mLocale; } + public int getNumberOfRows() { + return 4; + } + /** * Set accented letters to common layout. * @param builder the {@link ExpectedKeyboardBuilder} object that contains common keyboard @@ -145,6 +149,24 @@ public abstract class LayoutBase extends AbstractLayoutBase { } /** + * Get the enter key. + * @param isPhone true if requesting phone's key. + * @return the array of {@link ExpectedKey} that should be placed as an enter key. + */ + public ExpectedKey getEnterKey(final boolean isPhone) { + return isPhone ? key(ENTER_KEY, EMOJI_ACTION_KEY) : ENTER_KEY; + } + + /** + * Get the emoji key. + * @param isPhone true if requesting phone's key. + * @return the array of {@link ExpectedKey} that should be placed as an emoji key. + */ + public ExpectedKey getEmojiKey(final boolean isPhone) { + return EMOJI_NORMAL_KEY; + } + + /** * Get the space keys. * @param isPhone true if requesting phone's keys. * @return the array of {@link ExpectedKey} that should be placed at the center of the @@ -161,8 +183,7 @@ public abstract class LayoutBase extends AbstractLayoutBase { */ public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { // U+002C: "," COMMA - return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY)) - : joinKeys(key("\u002C", SETTINGS_KEY), "_"); + return joinKeys(key("\u002C", SETTINGS_KEY)); } /** @@ -172,7 +193,7 @@ public abstract class LayoutBase extends AbstractLayoutBase { */ public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { final ExpectedKey periodKey = key(".", getPunctuationMoreKeys(isPhone)); - return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey); + return joinKeys(periodKey); } /** @@ -237,7 +258,25 @@ public abstract class LayoutBase extends AbstractLayoutBase { */ public final LayoutCustomizer getCustomizer() { return mCustomizer; } - // Icon id. + // Icon ids. + private static final int ICON_DELETE = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_DELETE_KEY); + private static final int ICON_SPACE = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_SPACE_KEY); + private static final int ICON_TAB = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_TAB_KEY); + private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_SHORTCUT_KEY); + private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_SETTINGS_KEY); + private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY); + private static final int ICON_ENTER = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_ENTER_KEY); + private static final int ICON_EMOJI_ACTION = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_EMOJI_ACTION_KEY); + private static final int ICON_EMOJI_NORMAL = KeyboardIconsSet.getIconId( + KeyboardIconsSet.NAME_EMOJI_NORMAL_KEY); private static final int ICON_SHIFT = KeyboardIconsSet.getIconId( KeyboardIconsSet.NAME_SHIFT_KEY); private static final int ICON_SHIFTED_SHIFT = KeyboardIconsSet.getIconId( @@ -247,11 +286,21 @@ public abstract class LayoutBase extends AbstractLayoutBase { private static final int ICON_ZWJ = KeyboardIconsSet.getIconId( KeyboardIconsSet.NAME_ZWJ_KEY); - // Functional key. + // Functional keys. + public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE); + public static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB); + public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT); + public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS); + public static final ExpectedKey LANGUAGE_SWITCH_KEY = key( + ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH); + public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER); + public static final ExpectedKey EMOJI_ACTION_KEY = key(ICON_EMOJI_ACTION, Constants.CODE_EMOJI); + public static final ExpectedKey EMOJI_NORMAL_KEY = key(ICON_EMOJI_NORMAL, Constants.CODE_EMOJI); + public static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE); static final ExpectedKey CAPSLOCK_MORE_KEY = key(" ", Constants.CODE_CAPSLOCK); - static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT, + public static final ExpectedKey SHIFT_KEY = key(ICON_SHIFT, Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY); - static final ExpectedKey SHIFTED_SHIFT_KEY = key(ICON_SHIFTED_SHIFT, + public static final ExpectedKey SHIFTED_SHIFT_KEY = key(ICON_SHIFTED_SHIFT, Constants.CODE_SHIFT, CAPSLOCK_MORE_KEY); static final ExpectedKey ALPHABET_KEY = key("ABC", Constants.CODE_SWITCH_ALPHA_SYMBOL); static final ExpectedKey SYMBOLS_KEY = key("?123", Constants.CODE_SWITCH_ALPHA_SYMBOL); @@ -267,6 +316,9 @@ public abstract class LayoutBase extends AbstractLayoutBase { // U+200D: ZERO WIDTH JOINER static final ExpectedKey ZWNJ_KEY = key(ICON_ZWNJ, "\u200C"); static final ExpectedKey ZWJ_KEY = key(ICON_ZWJ, "\u200D"); + // Domain key + public static final ExpectedKey DOMAIN_KEY = + key(".com", joinMoreKeys(".net", ".org", ".gov", ".edu")).preserveCase(); // Punctuation more keys for phone form factor. public static final ExpectedKey[] PHONE_PUNCTUATION_MORE_KEYS = joinKeys( @@ -277,7 +329,7 @@ public abstract class LayoutBase extends AbstractLayoutBase { ",", "'", "#", ")", "(", "/", ";", "@", ":", "-", "\"", "+", "%", "&"); - /** + /** * Helper method to create alphabet layout adding special function keys. * @param builder the {@link ExpectedKeyboardBuilder} object that contains common keyboard * layout @@ -287,21 +339,26 @@ public abstract class LayoutBase extends AbstractLayoutBase { ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, final boolean isPhone) { final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(4, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(4, (Object[])customizer.getKeysRightToSpacebar(isPhone)); + final int numberOfRows = customizer.getNumberOfRows(); + builder.setKeysOfRow(numberOfRows, (Object[])customizer.getSpaceKeys(isPhone)); + builder.addKeysOnTheLeftOfRow( + numberOfRows, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); + builder.addKeysOnTheRightOfRow( + numberOfRows, (Object[])customizer.getKeysRightToSpacebar(isPhone)); if (isPhone) { - builder.addKeysOnTheRightOfRow(3, DELETE_KEY) - .addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_KEY)); + builder.addKeysOnTheRightOfRow(numberOfRows - 1, DELETE_KEY) + .addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey()) + .addKeysOnTheRightOfRow(numberOfRows, customizer.getEnterKey(isPhone)); } else { builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(2, ENTER_KEY) - .addKeysOnTheLeftOfRow(4, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(4, EMOJI_KEY); + .addKeysOnTheRightOfRow(numberOfRows - 2, customizer.getEnterKey(isPhone)) + .addKeysOnTheLeftOfRow(numberOfRows, customizer.getSymbolsKey()) + .addKeysOnTheRightOfRow(numberOfRows, customizer.getEmojiKey(isPhone)); } - builder.addKeysOnTheLeftOfRow(3, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(3, (Object[])customizer.getRightShiftKeys(isPhone)); + builder.addKeysOnTheLeftOfRow( + numberOfRows - 1, (Object[])customizer.getLeftShiftKeys(isPhone)); + builder.addKeysOnTheRightOfRow( + numberOfRows - 1, (Object[])customizer.getRightShiftKeys(isPhone)); return builder; } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java b/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java index f2a2dfdd8..3c70d3266 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Myanmar.java @@ -40,6 +40,9 @@ public final class Myanmar extends LayoutBase { public MyanmarCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey getAlphabetKey() { return MYANMAR_ALPHABET_KEY; } @Override @@ -52,14 +55,14 @@ public final class Myanmar extends LayoutBase { // U+002C: "," COMMA // U+104A: "၊" MYANMAR SIGN LITTLE SECTION return isPhone ? joinKeys(key("\u002C", SETTINGS_KEY)) - : joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY), "_"); + : joinKeys(key("\u104A", moreKey(","), SETTINGS_KEY)); } @Override public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { // U+104B: "။" MYANMAR SIGN SECTION final ExpectedKey periodKey = key("\u104B", getPunctuationMoreKeys(isPhone)); - return isPhone ? joinKeys(periodKey) : joinKeys("/", periodKey); + return joinKeys(periodKey); } @Override @@ -97,29 +100,6 @@ public final class Myanmar extends LayoutBase { return ALPHABET_SHIFTED_COMMON; } - // Helper method to create alphabet layout by adding special function keys. - @Override - ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, - final boolean isPhone) { - final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); - if (isPhone) { - builder.addKeysOnTheRightOfRow(4, DELETE_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); - } else { - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(3, ENTER_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, EMOJI_KEY); - } - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); - return builder; - } - private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, // U+1041: "၁" MYANMAR DIGIT ONE diff --git a/tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java b/tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java index 9da6dcc44..3f7340fd0 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/PcQwerty.java @@ -39,6 +39,9 @@ public final class PcQwerty extends LayoutBase { public PcQwertyCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) { return joinKeys(SHIFT_KEY); } @@ -55,7 +58,9 @@ public final class PcQwerty extends LayoutBase { @Override public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) { - return isPhone ? joinKeys(key(ENTER_KEY, EMOJI_KEY)) : joinKeys(EMOJI_KEY); + return isPhone + ? joinKeys(key(ENTER_KEY, EMOJI_ACTION_KEY)) + : joinKeys(EMOJI_NORMAL_KEY); } } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Symbols.java b/tests/src/com/android/inputmethod/keyboard/layout/Symbols.java index 5f3e4b196..803089721 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Symbols.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Symbols.java @@ -41,18 +41,18 @@ public class Symbols extends AbstractLayoutBase { customizer.getSingleQuoteMoreKeys(), customizer.getSingleAngleQuoteKeys()))); if (isPhone) { builder.addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone)) - .addKeysOnTheRightOfRow(3, DELETE_KEY) + .addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY) .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey()) - .addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_KEY)); + .addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone)); } else { // Tablet symbols keyboard has extra two keys at the left edge of the 3rd row. builder.addKeysOnTheLeftOfRow(3, (Object[])joinKeys("\\", "=")); - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(2, ENTER_KEY) + builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY) + .addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone)) .addKeysOnTheLeftOfRow(3, customizer.getSymbolsShiftKey(isPhone)) .addKeysOnTheRightOfRow(3, customizer.getSymbolsShiftKey(isPhone)) .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey()) - .addKeysOnTheRightOfRow(4, EMOJI_KEY); + .addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone)); } return builder.build(); } @@ -167,7 +167,7 @@ public class Symbols extends AbstractLayoutBase { // U+00BF: "¿" INVERTED QUESTION MARK key("?", moreKey("\u00BF"))) .setKeysOfRow(4, - key(","), key("_"), SPACE_KEY, key("/"), + key(","), key("_"), LayoutBase.SPACE_KEY, key("/"), // U+2026: "…" HORIZONTAL ELLIPSIS key(".", moreKey("\u2026"))) .build(); diff --git a/tests/src/com/android/inputmethod/keyboard/layout/SymbolsShifted.java b/tests/src/com/android/inputmethod/keyboard/layout/SymbolsShifted.java index 3265e10e1..19cb6075a 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/SymbolsShifted.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/SymbolsShifted.java @@ -37,20 +37,20 @@ public class SymbolsShifted extends AbstractLayoutBase { builder.replaceKeyOfLabel(OTHER_CURRENCIES, (Object[])customizer.getOtherCurrencyKeys()); if (isPhone) { builder.addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey()) - .addKeysOnTheRightOfRow(3, DELETE_KEY) + .addKeysOnTheRightOfRow(3, LayoutBase.DELETE_KEY) .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey()) - .addKeysOnTheRightOfRow(4, key(ENTER_KEY, EMOJI_KEY)); + .addKeysOnTheRightOfRow(4, customizer.getEnterKey(isPhone)); } else { // Tablet symbols shifted keyboard has extra two keys at the right edge of the 3rd row. // U+00BF: "¿" INVERTED QUESTION MARK // U+00A1: "¡" INVERTED EXCLAMATION MARK builder.addKeysOnTheRightOfRow(3, (Object[])joinKeys("\u00A1", "\u00BF")); - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(2, ENTER_KEY) + builder.addKeysOnTheRightOfRow(1, LayoutBase.DELETE_KEY) + .addKeysOnTheRightOfRow(2, customizer.getEnterKey(isPhone)) .addKeysOnTheLeftOfRow(3, customizer.getBackToSymbolsKey()) .addKeysOnTheRightOfRow(3, customizer.getBackToSymbolsKey()) .addKeysOnTheLeftOfRow(4, customizer.getAlphabetKey()) - .addKeysOnTheRightOfRow(4, EMOJI_KEY); + .addKeysOnTheRightOfRow(4, customizer.getEmojiKey(isPhone)); } return builder.build(); } @@ -122,7 +122,7 @@ public class SymbolsShifted extends AbstractLayoutBase { // U+2264: "≤" LESS-THAN OR EQUAL TO // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK key("<", joinMoreKeys("\u2039", "\u2264", "\u00AB")), - SPACE_KEY, + LayoutBase.SPACE_KEY, // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK // U+2265: "≥" GREATER-THAN EQUAL TO // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK diff --git a/tests/src/com/android/inputmethod/keyboard/layout/Thai.java b/tests/src/com/android/inputmethod/keyboard/layout/Thai.java index af4abea93..cfda2947c 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/Thai.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/Thai.java @@ -40,6 +40,9 @@ public final class Thai extends LayoutBase { public ThaiCustomizer(final Locale locale) { super(locale); } @Override + public int getNumberOfRows() { return 5; } + + @Override public ExpectedKey getAlphabetKey() { return THAI_ALPHABET_KEY; } @Override @@ -96,29 +99,6 @@ public final class Thai extends LayoutBase { return builder.build(); } - // Helper method to create alphabet layout by adding special function keys. - @Override - ExpectedKeyboardBuilder convertCommonLayoutToKeyboard(final ExpectedKeyboardBuilder builder, - final boolean isPhone) { - final LayoutCustomizer customizer = getCustomizer(); - builder.setKeysOfRow(5, (Object[])customizer.getSpaceKeys(isPhone)); - builder.addKeysOnTheLeftOfRow(5, (Object[])customizer.getKeysLeftToSpacebar(isPhone)); - builder.addKeysOnTheRightOfRow(5, (Object[])customizer.getKeysRightToSpacebar(isPhone)); - if (isPhone) { - builder.addKeysOnTheRightOfRow(4, DELETE_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, key(ENTER_KEY, EMOJI_KEY)); - } else { - builder.addKeysOnTheRightOfRow(1, DELETE_KEY) - .addKeysOnTheRightOfRow(3, ENTER_KEY) - .addKeysOnTheLeftOfRow(5, customizer.getSymbolsKey()) - .addKeysOnTheRightOfRow(5, EMOJI_KEY); - } - builder.addKeysOnTheLeftOfRow(4, (Object[])customizer.getLeftShiftKeys(isPhone)) - .addKeysOnTheRightOfRow(4, (Object[])customizer.getRightShiftKeys(isPhone)); - return builder; - } - private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder() .setKeysOfRow(1, // U+0E45: "ๅ" THAI CHARACTER LAKKHANGYAO diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java index 9e0039d84..3556cb4bf 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/AbstractLayoutBase.java @@ -16,9 +16,7 @@ package com.android.inputmethod.keyboard.layout.expected; -import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey; -import com.android.inputmethod.latin.Constants; /** * Base class to create an expected keyboard for unit test. @@ -104,33 +102,4 @@ public abstract class AbstractLayoutBase { public static ExpectedKey[] joinKeys(final Object ... keys) { return ExpectedKeyboardBuilder.joinKeys(keys); } - - // Icon ids. - private static final int ICON_DELETE = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_DELETE_KEY); - private static final int ICON_SPACE = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_SPACE_KEY); - private static final int ICON_TAB = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_TAB_KEY); - private static final int ICON_SHORTCUT = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_SHORTCUT_KEY); - private static final int ICON_SETTINGS = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_SETTINGS_KEY); - private static final int ICON_LANGUAGE_SWITCH = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_LANGUAGE_SWITCH_KEY); - private static final int ICON_ENTER = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_ENTER_KEY); - private static final int ICON_EMOJI = KeyboardIconsSet.getIconId( - KeyboardIconsSet.NAME_EMOJI_KEY); - - // Functional keys. - public static final ExpectedKey DELETE_KEY = key(ICON_DELETE, Constants.CODE_DELETE); - public static final ExpectedKey TAB_KEY = key(ICON_TAB, Constants.CODE_TAB); - public static final ExpectedKey SHORTCUT_KEY = key(ICON_SHORTCUT, Constants.CODE_SHORTCUT); - public static final ExpectedKey SETTINGS_KEY = key(ICON_SETTINGS, Constants.CODE_SETTINGS); - public static final ExpectedKey LANGUAGE_SWITCH_KEY = key( - ICON_LANGUAGE_SWITCH, Constants.CODE_LANGUAGE_SWITCH); - public static final ExpectedKey ENTER_KEY = key(ICON_ENTER, Constants.CODE_ENTER); - public static final ExpectedKey EMOJI_KEY = key(ICON_EMOJI, Constants.CODE_EMOJI); - public static final ExpectedKey SPACE_KEY = key(ICON_SPACE, Constants.CODE_SPACE); } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java index 0e1c71cd1..2674a6a69 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKey.java @@ -148,6 +148,18 @@ public class ExpectedKey { return newInstance(mVisual.toUpperCase(locale), mOutput.toUpperCase(locale)); } + public ExpectedKey preserveCase() { + final ExpectedKey[] moreKeys = getMoreKeys(); + final ExpectedKey[] casePreservedMoreKeys = new ExpectedKey[moreKeys.length]; + for (int index = 0; index < moreKeys.length; index++) { + final ExpectedKey moreKey = moreKeys[index]; + casePreservedMoreKeys[index] = newInstance( + moreKey.getVisual().preserveCase(), moreKey.getOutput().preserveCase()); + } + return newInstance( + getVisual().preserveCase(), getOutput().preserveCase(), casePreservedMoreKeys); + } + public boolean equalsTo(final Key key) { // This key has no "more keys". return mVisual.equalsTo(key) && mOutput.equalsTo(key) && key.getMoreKeys() == null; diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyOutput.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyOutput.java index 1be51e60b..8b2bb4289 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyOutput.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyOutput.java @@ -42,6 +42,7 @@ abstract class ExpectedKeyOutput { } abstract ExpectedKeyOutput toUpperCase(final Locale locale); + abstract ExpectedKeyOutput preserveCase(); abstract boolean equalsTo(final String text); abstract boolean equalsTo(final Key key); abstract boolean equalsTo(final MoreKeySpec moreKeySpec); @@ -62,13 +63,19 @@ abstract class ExpectedKeyOutput { final String codeString = StringUtils.newSingleCodePointString(mCode); // A letter may have an upper case counterpart that consists of multiple code // points, for instance the upper case of "ß" is "SS". - return newInstance(codeString.toUpperCase(locale)); + return newInstance(StringUtils.toUpperCaseOfStringForLocale( + codeString, true /* needsToUpperCase */, locale)); } // A special negative value has no upper case. return this; } @Override + ExpectedKeyOutput preserveCase() { + return new CasePreservedCode(mCode); + } + + @Override boolean equalsTo(final String text) { return StringUtils.codePointCount(text) == 1 && text.codePointAt(0) == mCode; } @@ -93,6 +100,16 @@ abstract class ExpectedKeyOutput { return Constants.isLetterCode(mCode) ? StringUtils.newSingleCodePointString(mCode) : Constants.printableCode(mCode); } + + private static class CasePreservedCode extends Code { + CasePreservedCode(final int code) { super(code); } + + @Override + ExpectedKeyOutput toUpperCase(final Locale locale) { return this; } + + @Override + ExpectedKeyOutput preserveCase() { return this; } + } } /** @@ -109,6 +126,11 @@ abstract class ExpectedKeyOutput { } @Override + ExpectedKeyOutput preserveCase() { + return new CasePreservedText(mText); + } + + @Override boolean equalsTo(final String text) { return text.equals(text); } @@ -134,5 +156,15 @@ abstract class ExpectedKeyOutput { public String toString() { return mText; } + + private static class CasePreservedText extends Text { + CasePreservedText(final String text) { super(text); } + + @Override + ExpectedKeyOutput toUpperCase(final Locale locale) { return this; } + + @Override + ExpectedKeyOutput preserveCase() { return this; } + } } } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyVisual.java b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyVisual.java index 0a0da32b6..34024a5e0 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyVisual.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/expected/ExpectedKeyVisual.java @@ -19,6 +19,7 @@ package com.android.inputmethod.keyboard.layout.expected; import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; import com.android.inputmethod.keyboard.internal.MoreKeySpec; +import com.android.inputmethod.latin.utils.StringUtils; import java.util.Locale; @@ -37,6 +38,7 @@ abstract class ExpectedKeyVisual { } abstract ExpectedKeyVisual toUpperCase(final Locale locale); + abstract ExpectedKeyVisual preserveCase(); abstract boolean equalsTo(final String text); abstract boolean equalsTo(final Key key); abstract boolean equalsTo(final MoreKeySpec moreKeySpec); @@ -59,6 +61,11 @@ abstract class ExpectedKeyVisual { } @Override + ExpectedKeyVisual preserveCase() { + return this; + } + + @Override boolean equalsTo(final String text) { return false; } @@ -99,7 +106,13 @@ abstract class ExpectedKeyVisual { @Override ExpectedKeyVisual toUpperCase(final Locale locale) { - return new Label(mLabel.toUpperCase(locale)); + return new Label(StringUtils.toUpperCaseOfStringForLocale( + mLabel, true /* needsToUpperCase */, locale)); + } + + @Override + ExpectedKeyVisual preserveCase() { + return new CasePreservedLabel(mLabel); } @Override @@ -131,5 +144,15 @@ abstract class ExpectedKeyVisual { public String toString() { return mLabel; } + + private static class CasePreservedLabel extends Label { + CasePreservedLabel(final String label) { super(label); } + + @Override + ExpectedKeyVisual toUpperCase(final Locale locale) { return this; } + + @Override + ExpectedKeyVisual preserveCase() { return this; } + } } } diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakEmail.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakEmail.java new file mode 100644 index 000000000..37ca09238 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakEmail.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2014 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.layout.tests; + +import android.test.suitebuilder.annotation.SmallTest; +import android.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.KeyboardId; +import com.android.inputmethod.keyboard.KeyboardLayoutSet; +import com.android.inputmethod.keyboard.layout.Dvorak; +import com.android.inputmethod.keyboard.layout.LayoutBase; +import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; +import com.android.inputmethod.keyboard.layout.tests.TestsEnglishDvorak.EnglishDvorakCustomizer; + +import java.util.Locale; + +/** + * en_US: English (United States)/dvorak, email input field. + */ +@SmallTest +public class TestsDvorakEmail extends LayoutTestsBase { + private static final Locale LOCALE = new Locale("en", "US"); + private static final LayoutBase LAYOUT = new DvorakEmail(new DvorakEmailCustomizer(LOCALE)); + + @Override + LayoutBase getLayout() { return LAYOUT; } + + @Override + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + final EditorInfo editorInfo, final boolean voiceInputKeyEnabled, + final boolean languageSwitchKeyEnabled) { + final EditorInfo emailField = new EditorInfo(); + emailField.inputType = + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; + return super.createKeyboardLayoutSet( + subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled); + } + + private static class DvorakEmailCustomizer extends EnglishDvorakCustomizer { + DvorakEmailCustomizer(final Locale locale) { + super(locale); + } + + @Override + public ExpectedKey getEnterKey(final boolean isPhone) { + return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone); + } + + @Override + public ExpectedKey getEmojiKey(final boolean isPhone) { + return LayoutBase.DOMAIN_KEY; + } + + @Override + public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { + return isPhone ? super.getKeysLeftToSpacebar(isPhone) + : joinKeys(key("@", LayoutBase.SETTINGS_KEY)); + } + } + + private static class DvorakEmail extends Dvorak { + public DvorakEmail(final LayoutCustomizer customizer) { + super(customizer); + } + + @Override + protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) { + if (isPhone && (elementId == KeyboardId.ELEMENT_ALPHABET + || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)) { + return key("@", joinMoreKeys(additionalMoreKey("1"))); + } + return super.getRow1_1Key(isPhone, elementId); + } + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakUrl.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakUrl.java new file mode 100644 index 000000000..3bcae0ce4 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsDvorakUrl.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2014 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.layout.tests; + +import android.test.suitebuilder.annotation.SmallTest; +import android.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.KeyboardId; +import com.android.inputmethod.keyboard.KeyboardLayoutSet; +import com.android.inputmethod.keyboard.layout.Dvorak; +import com.android.inputmethod.keyboard.layout.LayoutBase; +import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; +import com.android.inputmethod.keyboard.layout.tests.TestsEnglishDvorak.EnglishDvorakCustomizer; + +import java.util.Locale; + +/** + * en_US: English (United States)/dvorak, URL input field. + */ +@SmallTest +public class TestsDvorakUrl extends LayoutTestsBase { + private static final Locale LOCALE = new Locale("en", "US"); + private static final LayoutBase LAYOUT = new DvorakEmail(new DvorakUrlCustomizer(LOCALE)); + + @Override + LayoutBase getLayout() { return LAYOUT; } + + @Override + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + final EditorInfo editorInfo, final boolean voiceInputKeyEnabled, + final boolean languageSwitchKeyEnabled) { + final EditorInfo emailField = new EditorInfo(); + emailField.inputType = + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI; + return super.createKeyboardLayoutSet( + subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled); + } + + private static class DvorakUrlCustomizer extends EnglishDvorakCustomizer { + DvorakUrlCustomizer(final Locale locale) { + super(locale); + } + + @Override + public ExpectedKey getEnterKey(final boolean isPhone) { + return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone); + } + + @Override + public ExpectedKey getEmojiKey(final boolean isPhone) { + return LayoutBase.DOMAIN_KEY; + } + + @Override + public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { + return isPhone ? super.getKeysLeftToSpacebar(isPhone) + : joinKeys(key("/", LayoutBase.SETTINGS_KEY)); + } + } + + private static class DvorakEmail extends Dvorak { + public DvorakEmail(final LayoutCustomizer customizer) { + super(customizer); + } + + @Override + protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) { + if (isPhone && (elementId == KeyboardId.ELEMENT_ALPHABET + || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)) { + return key("/", joinMoreKeys(additionalMoreKey("1"))); + } + return super.getRow1_1Key(isPhone, elementId); + } + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsEnglishDvorak.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsEnglishDvorak.java index a05269312..e647f8aea 100644 --- a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsEnglishDvorak.java +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsEnglishDvorak.java @@ -36,7 +36,7 @@ public class TestsEnglishDvorak extends LayoutTestsBase { @Override LayoutBase getLayout() { return LAYOUT; } - private static class EnglishDvorakCustomizer extends DvorakCustomizer { + public static class EnglishDvorakCustomizer extends DvorakCustomizer { private final EnglishCustomizer mEnglishCustomizer; EnglishDvorakCustomizer(final Locale locale) { diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyEmail.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyEmail.java new file mode 100644 index 000000000..8563d6933 --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyEmail.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2014 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.layout.tests; + +import android.test.suitebuilder.annotation.SmallTest; +import android.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.KeyboardLayoutSet; +import com.android.inputmethod.keyboard.layout.LayoutBase; +import com.android.inputmethod.keyboard.layout.Qwerty; +import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; + +import java.util.Locale; + +/** + * en_US: English (United States)/qwerty, email input field. + */ +@SmallTest +public class TestsQwertyEmail extends LayoutTestsBase { + private static final Locale LOCALE = new Locale("en", "US"); + private static final LayoutBase LAYOUT = new Qwerty(new EnglishEmailCustomizer(LOCALE)); + + @Override + LayoutBase getLayout() { return LAYOUT; } + + @Override + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + final EditorInfo editorInfo, final boolean voiceInputKeyEnabled, + final boolean languageSwitchKeyEnabled) { + final EditorInfo emailField = new EditorInfo(); + emailField.inputType = + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS; + return super.createKeyboardLayoutSet( + subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled); + } + + private static class EnglishEmailCustomizer extends EnglishCustomizer { + EnglishEmailCustomizer(final Locale locale) { + super(locale); + } + + @Override + public ExpectedKey getEnterKey(final boolean isPhone) { + return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone); + } + + @Override + public ExpectedKey getEmojiKey(final boolean isPhone) { + return LayoutBase.DOMAIN_KEY; + } + + @Override + public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { + return joinKeys(key("@", LayoutBase.SETTINGS_KEY)); + } + } +} diff --git a/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyUrl.java b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyUrl.java new file mode 100644 index 000000000..1c1a2bbbd --- /dev/null +++ b/tests/src/com/android/inputmethod/keyboard/layout/tests/TestsQwertyUrl.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2014 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.layout.tests; + +import android.test.suitebuilder.annotation.SmallTest; +import android.text.InputType; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodSubtype; + +import com.android.inputmethod.keyboard.KeyboardLayoutSet; +import com.android.inputmethod.keyboard.layout.LayoutBase; +import com.android.inputmethod.keyboard.layout.Qwerty; +import com.android.inputmethod.keyboard.layout.expected.ExpectedKey; + +import java.util.Locale; + +/** + * en_US: English (United States)/qwerty, URL input field. + */ +@SmallTest +public class TestsQwertyUrl extends LayoutTestsBase { + private static final Locale LOCALE = new Locale("en", "US"); + private static final LayoutBase LAYOUT = new Qwerty(new EnglishUrlCustomizer(LOCALE)); + + @Override + LayoutBase getLayout() { return LAYOUT; } + + @Override + protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype, + final EditorInfo editorInfo, final boolean voiceInputKeyEnabled, + final boolean languageSwitchKeyEnabled) { + final EditorInfo emailField = new EditorInfo(); + emailField.inputType = + InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI; + return super.createKeyboardLayoutSet( + subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled); + } + + private static class EnglishUrlCustomizer extends EnglishCustomizer { + EnglishUrlCustomizer(final Locale locale) { + super(locale); + } + + @Override + public ExpectedKey getEnterKey(final boolean isPhone) { + return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone); + } + + @Override + public ExpectedKey getEmojiKey(final boolean isPhone) { + return LayoutBase.DOMAIN_KEY; + } + + @Override + public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) { + return joinKeys(key("/", LayoutBase.SETTINGS_KEY)); + } + } +} diff --git a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java index 199922491..f9d72269e 100644 --- a/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java +++ b/tests/src/com/android/inputmethod/latin/RichInputConnectionAndTextRangeTests.java @@ -215,18 +215,23 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase { "abc 'def", mSpacingAndPunctuations, 2), PrevWordsInfo.EMPTY_PREV_WORDS_INFO); } - /** - * Test logic in getting the word range at the cursor. - */ - private static final int[] SPACE = { Constants.CODE_SPACE }; - static final int[] TAB = { Constants.CODE_TAB }; - private static final int[] SPACE_TAB = StringUtils.toSortedCodePointArray(" \t"); - // A character that needs surrogate pair to represent its code point (U+2008A). - private static final String SUPPLEMENTARY_CHAR = "\uD840\uDC8A"; - private static final String HIRAGANA_WORD = "\u3042\u3044\u3046\u3048\u304A"; // あいうえお - private static final String GREEK_WORD = "\u03BA\u03B1\u03B9"; // και - public void testGetWordRangeAtCursor() { + /** + * Test logic in getting the word range at the cursor. + */ + final SpacingAndPunctuations SPACE = new SpacingAndPunctuations( + mSpacingAndPunctuations, new int[] { Constants.CODE_SPACE }); + final SpacingAndPunctuations TAB = new SpacingAndPunctuations( + mSpacingAndPunctuations, new int[] { Constants.CODE_TAB }); + final int[] SPACE_TAB = StringUtils.toSortedCodePointArray(" \t"); + // A character that needs surrogate pair to represent its code point (U+2008A). + final String SUPPLEMENTARY_CHAR_STRING = "\uD840\uDC8A"; + final SpacingAndPunctuations SUPPLEMENTARY_CHAR = new SpacingAndPunctuations( + mSpacingAndPunctuations, StringUtils.toSortedCodePointArray( + SUPPLEMENTARY_CHAR_STRING)); + final String HIRAGANA_WORD = "\u3042\u3044\u3046\u3048\u304A"; // あいうえお + final String GREEK_WORD = "\u03BA\u03B1\u03B9"; // και + ExtractedText et = new ExtractedText(); final MockInputMethodService mockInputMethodService = new MockInputMethodService(); final RichInputConnection ic = new RichInputConnection(mockInputMethodService); @@ -249,10 +254,9 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase { // splitting on supplementary character mockInputMethodService.setInputConnection( - new MockConnection("one word" + SUPPLEMENTARY_CHAR + "wo", "rd", et)); + new MockConnection("one word" + SUPPLEMENTARY_CHAR_STRING + "wo", "rd", et)); ic.beginBatchEdit(); - r = ic.getWordRangeAtCursor(StringUtils.toSortedCodePointArray(SUPPLEMENTARY_CHAR), - ScriptUtils.SCRIPT_LATIN); + r = ic.getWordRangeAtCursor(SUPPLEMENTARY_CHAR, ScriptUtils.SCRIPT_LATIN); ic.endBatchEdit(); assertTrue(TextUtils.equals("word", r.mWord)); @@ -260,8 +264,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase { mockInputMethodService.setInputConnection( new MockConnection(HIRAGANA_WORD + "wo", "rd" + GREEK_WORD, et)); ic.beginBatchEdit(); - r = ic.getWordRangeAtCursor(StringUtils.toSortedCodePointArray(SUPPLEMENTARY_CHAR), - ScriptUtils.SCRIPT_LATIN); + r = ic.getWordRangeAtCursor(SUPPLEMENTARY_CHAR, ScriptUtils.SCRIPT_LATIN); ic.endBatchEdit(); assertTrue(TextUtils.equals("word", r.mWord)); @@ -269,8 +272,7 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase { mockInputMethodService.setInputConnection( new MockConnection("text" + GREEK_WORD, "text", et)); ic.beginBatchEdit(); - r = ic.getWordRangeAtCursor(StringUtils.toSortedCodePointArray(SUPPLEMENTARY_CHAR), - ScriptUtils.SCRIPT_GREEK); + r = ic.getWordRangeAtCursor(SUPPLEMENTARY_CHAR, ScriptUtils.SCRIPT_GREEK); ic.endBatchEdit(); assertTrue(TextUtils.equals(GREEK_WORD, r.mWord)); } @@ -286,6 +288,8 @@ public class RichInputConnectionAndTextRangeTests extends AndroidTestCase { } private void helpTestGetSuggestionSpansAtWord(final int cursorPos) { + final SpacingAndPunctuations SPACE = new SpacingAndPunctuations( + mSpacingAndPunctuations, new int[] { Constants.CODE_SPACE }); final MockInputMethodService mockInputMethodService = new MockInputMethodService(); final RichInputConnection ic = new RichInputConnection(mockInputMethodService); diff --git a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java index 66b4a9c71..869c550e0 100644 --- a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java +++ b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java @@ -23,24 +23,50 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import java.util.ArrayList; import java.util.Locale; -import java.util.Random; @SmallTest public class SuggestedWordsTests extends AndroidTestCase { + + /** + * Helper method to create a dummy {@link SuggestedWordInfo} with specifying + * {@link SuggestedWordInfo#KIND_TYPED}. + * + * @param word the word to be used to create {@link SuggestedWordInfo}. + * @return a new instance of {@link SuggestedWordInfo}. + */ + private static SuggestedWordInfo createTypedWordInfo(final String word) { + // Use 100 as the frequency because the numerical value does not matter as + // long as it's > 1 and < INT_MAX. + return new SuggestedWordInfo(word, 100 /* score */, + SuggestedWordInfo.KIND_TYPED, + null /* sourceDict */, + SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, + 1 /* autoCommitFirstWordConfidence */); + } + + /** + * Helper method to create a dummy {@link SuggestedWordInfo} with specifying + * {@link SuggestedWordInfo#KIND_CORRECTION}. + * + * @param word the word to be used to create {@link SuggestedWordInfo}. + * @return a new instance of {@link SuggestedWordInfo}. + */ + private static SuggestedWordInfo createCorrectionWordInfo(final String word) { + return new SuggestedWordInfo(word, 1 /* score */, + SuggestedWordInfo.KIND_CORRECTION, + null /* sourceDict */, + SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, + SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */); + } + public void testGetSuggestedWordsExcludingTypedWord() { final String TYPED_WORD = "typed"; - final int TYPED_WORD_FREQ = 5; final int NUMBER_OF_ADDED_SUGGESTIONS = 5; + final int KIND_OF_SECOND_CORRECTION = SuggestedWordInfo.KIND_CORRECTION; final ArrayList<SuggestedWordInfo> list = new ArrayList<>(); - list.add(new SuggestedWordInfo(TYPED_WORD, TYPED_WORD_FREQ, - SuggestedWordInfo.KIND_TYPED, null /* sourceDict */, - SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, - SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */)); + list.add(createTypedWordInfo(TYPED_WORD)); for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) { - list.add(new SuggestedWordInfo("" + i, 1, SuggestedWordInfo.KIND_CORRECTION, - null /* sourceDict */, - SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, - SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */)); + list.add(createCorrectionWordInfo(Integer.toString(i))); } final SuggestedWords words = new SuggestedWords( @@ -48,35 +74,29 @@ public class SuggestedWordsTests extends AndroidTestCase { false /* typedWordValid */, false /* willAutoCorrect */, false /* isObsoleteSuggestions */, - false /* isPrediction*/); + SuggestedWords.INPUT_STYLE_NONE); assertEquals(NUMBER_OF_ADDED_SUGGESTIONS + 1, words.size()); assertEquals("typed", words.getWord(0)); assertTrue(words.getInfo(0).isKindOf(SuggestedWordInfo.KIND_TYPED)); assertEquals("0", words.getWord(1)); - assertTrue(words.getInfo(1).isKindOf(SuggestedWordInfo.KIND_CORRECTION)); + assertTrue(words.getInfo(1).isKindOf(KIND_OF_SECOND_CORRECTION)); assertEquals("4", words.getWord(5)); - assertTrue(words.getInfo(5).isKindOf(SuggestedWordInfo.KIND_CORRECTION)); + assertTrue(words.getInfo(5).isKindOf(KIND_OF_SECOND_CORRECTION)); - final SuggestedWords wordsWithoutTyped = words.getSuggestedWordsExcludingTypedWord(); + final SuggestedWords wordsWithoutTyped = + words.getSuggestedWordsExcludingTypedWordForRecorrection(); + // Make sure that the typed word has indeed been excluded, by testing the size of the + // suggested words, the string and the kind of the top suggestion, which should match + // the string and kind of what we inserted after the typed word. assertEquals(words.size() - 1, wordsWithoutTyped.size()); assertEquals("0", wordsWithoutTyped.getWord(0)); - assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION)); - } - - // Helper for testGetTransformedWordInfo - private SuggestedWordInfo createWordInfo(final String s) { - // Use 100 as the frequency because the numerical value does not matter as - // long as it's > 1 and < INT_MAX. - return new SuggestedWordInfo(s, 100, - SuggestedWordInfo.KIND_TYPED, null /* sourceDict */, - SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, - new Random().nextInt(1000000) /* autoCommitFirstWordConfidence */); + assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(KIND_OF_SECOND_CORRECTION)); } // Helper for testGetTransformedWordInfo private SuggestedWordInfo transformWordInfo(final String info, final int trailingSingleQuotesCount) { - final SuggestedWordInfo suggestedWordInfo = createWordInfo(info); + final SuggestedWordInfo suggestedWordInfo = createTypedWordInfo(info); final SuggestedWordInfo returnedWordInfo = Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo, Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */, @@ -100,4 +120,43 @@ public class SuggestedWordsTests extends AndroidTestCase { result = transformWordInfo("didn't", 3); assertEquals(result.mWord, "didn't''"); } + + public void testGetTypedWordInfoOrNull() { + final String TYPED_WORD = "typed"; + final int NUMBER_OF_ADDED_SUGGESTIONS = 5; + final ArrayList<SuggestedWordInfo> list = new ArrayList<>(); + list.add(createTypedWordInfo(TYPED_WORD)); + for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) { + list.add(createCorrectionWordInfo(Integer.toString(i))); + } + + // Make sure getTypedWordInfoOrNull() returns non-null object. + final SuggestedWords wordsWithTypedWord = new SuggestedWords( + list, null /* rawSuggestions */, + false /* typedWordValid */, + false /* willAutoCorrect */, + false /* isObsoleteSuggestions */, + SuggestedWords.INPUT_STYLE_NONE); + final SuggestedWordInfo typedWord = wordsWithTypedWord.getTypedWordInfoOrNull(); + assertNotNull(typedWord); + assertEquals(TYPED_WORD, typedWord.mWord); + + // Make sure getTypedWordInfoOrNull() returns null. + final SuggestedWords wordsWithoutTypedWord = + wordsWithTypedWord.getSuggestedWordsExcludingTypedWordForRecorrection(); + assertNull(wordsWithoutTypedWord.getTypedWordInfoOrNull()); + + // Make sure getTypedWordInfoOrNull() returns null. + assertNull(SuggestedWords.EMPTY.getTypedWordInfoOrNull()); + + final SuggestedWords emptySuggestedWords = new SuggestedWords( + new ArrayList<SuggestedWordInfo>(), null /* rawSuggestions */, + false /* typedWordValid */, + false /* willAutoCorrect */, + false /* isObsoleteSuggestions */, + SuggestedWords.INPUT_STYLE_NONE); + assertNull(emptySuggestedWords.getTypedWordInfoOrNull()); + + assertNull(SuggestedWords.EMPTY.getTypedWordInfoOrNull()); + } } diff --git a/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java b/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java index 2cc22fae4..eb76032b1 100644 --- a/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java +++ b/tests/src/com/android/inputmethod/latin/settings/SpacingAndPunctuationsTests.java @@ -429,7 +429,7 @@ public class SpacingAndPunctuationsTests extends AndroidTestCase { assertFalse("willAutoCorrect", suggestedWords.mWillAutoCorrect); assertTrue("isPunctuationSuggestions", suggestedWords.isPunctuationSuggestions()); assertFalse("isObsoleteSuggestions", suggestedWords.mIsObsoleteSuggestions); - assertFalse("isPrediction", suggestedWords.mIsPrediction); + assertFalse("isPrediction", suggestedWords.isPrediction()); assertEquals("size", punctuationLabels.length, suggestedWords.size()); for (int index = 0; index < suggestedWords.size(); index++) { assertEquals("punctuation label at " + index, diff --git a/tests/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelperTests.java b/tests/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelperTests.java new file mode 100644 index 000000000..f3273a2d1 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelperTests.java @@ -0,0 +1,221 @@ +/* + * Copyright (C) 2014 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.suggestions; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.inputmethod.latin.SuggestedWords; + +@SmallTest +public class SuggestionStripLayoutHelperTests extends AndroidTestCase { + private static void confirmShowTypedWord(final String message, final int inputType) { + assertFalse(message, SuggestionStripLayoutHelper.shouldOmitTypedWord( + inputType, + false /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse(message, SuggestionStripLayoutHelper.shouldOmitTypedWord( + inputType, + true /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse(message, SuggestionStripLayoutHelper.shouldOmitTypedWord( + inputType, + false /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + assertFalse(message, SuggestionStripLayoutHelper.shouldOmitTypedWord( + inputType, + true /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + } + + public void testShouldShowTypedWord() { + confirmShowTypedWord("no input style", + SuggestedWords.INPUT_STYLE_NONE); + confirmShowTypedWord("application specifed", + SuggestedWords.INPUT_STYLE_APPLICATION_SPECIFIED); + confirmShowTypedWord("recorrection", + SuggestedWords.INPUT_STYLE_RECORRECTION); + } + + public void testshouldOmitTypedWordWhileTyping() { + assertFalse("typing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TYPING, + false /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse("typing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TYPING, + true /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertTrue("typing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TYPING, + false /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + assertTrue("typing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TYPING, + true /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + } + + public void testshouldOmitTypedWordWhileGesturing() { + assertFalse("gesturing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_UPDATE_BATCH, + false /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse("gesturing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_UPDATE_BATCH, + true /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse("gesturing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_UPDATE_BATCH, + false /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + assertTrue("gesturing", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_UPDATE_BATCH, + true /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + } + + public void testshouldOmitTypedWordWhenGestured() { + assertFalse("gestured", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TAIL_BATCH, + false /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertFalse("gestured", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TAIL_BATCH, + true /* gestureFloatingPreviewTextEnabled */, + false /* shouldShowUiToAcceptTypedWord */)); + assertTrue("gestured", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TAIL_BATCH, + false /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + assertTrue("gestured", SuggestionStripLayoutHelper.shouldOmitTypedWord( + SuggestedWords.INPUT_STYLE_TAIL_BATCH, + true /* gestureFloatingPreviewTextEnabled */, + true /* shouldShowUiToAcceptTypedWord */)); + } + + // Note that this unit test assumes that the number of suggested words in the suggestion strip + // is 3. + private static final int POSITION_OMIT = -1; + private static final int POSITION_LEFT = 0; + private static final int POSITION_CENTER = 1; + private static final int POSITION_RIGHT = 2; + + public void testGetPositionInSuggestionStrip() { + assertEquals("1st word without auto correction", POSITION_CENTER, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_TYPED_WORD /* indexInSuggestedWords */, + false /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("2nd word without auto correction", POSITION_LEFT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_AUTO_CORRECTION /* indexInSuggestedWords */, + false /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("3rd word without auto correction", POSITION_RIGHT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 2 /* indexInSuggestedWords */, + false /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + + assertEquals("typed word with auto correction", POSITION_LEFT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_TYPED_WORD /* indexInSuggestedWords */, + true /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("2nd word with auto correction", POSITION_CENTER, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_AUTO_CORRECTION /* indexInSuggestedWords */, + true /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("3rd word with auto correction", POSITION_RIGHT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 2 /* indexInSuggestedWords */, + true /* willAutoCorrect */, + false /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + + assertEquals("1st word without auto correction", POSITION_OMIT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_TYPED_WORD /* indexInSuggestedWords */, + false /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("2nd word without auto correction", POSITION_CENTER, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_AUTO_CORRECTION /* indexInSuggestedWords */, + false /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("3rd word without auto correction", POSITION_LEFT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 2 /* indexInSuggestedWords */, + false /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("4th word without auto correction", POSITION_RIGHT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 3 /* indexInSuggestedWords */, + false /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + + assertEquals("typed word with auto correction", POSITION_OMIT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_TYPED_WORD /* indexInSuggestedWords */, + true /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("2nd word with auto correction", POSITION_CENTER, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + SuggestedWords.INDEX_OF_AUTO_CORRECTION /* indexInSuggestedWords */, + true /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("3rd word with auto correction", POSITION_LEFT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 2 /* indexInSuggestedWords */, + true /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + assertEquals("4th word with auto correction", POSITION_RIGHT, + SuggestionStripLayoutHelper.getPositionInSuggestionStrip( + 3 /* indexInSuggestedWords */, + true /* willAutoCorrect */, + true /* omitTypedWord */, + POSITION_CENTER /* centerPositionInStrip */, + POSITION_LEFT /* typedWordPositionWhenAutoCorrect */)); + } +} diff --git a/tests/src/com/android/inputmethod/latin/utils/ImportantNoticeUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/ImportantNoticeUtilsTests.java new file mode 100644 index 000000000..819d76328 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/utils/ImportantNoticeUtilsTests.java @@ -0,0 +1,222 @@ +/* + * Copyright (C) 2014 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.utils; + +import static com.android.inputmethod.latin.utils.ImportantNoticeUtils.KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE; +import static com.android.inputmethod.latin.utils.ImportantNoticeUtils.KEY_IMPORTANT_NOTICE_VERSION; + +import android.content.Context; +import android.content.SharedPreferences; +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; +import android.text.TextUtils; + +import java.util.concurrent.TimeUnit; + +@SmallTest +public class ImportantNoticeUtilsTests extends AndroidTestCase { + // This should be aligned with R.integer.config_important_notice_version. + private static final int CURRENT_IMPORTANT_NOTICE_VERSION = 1; + + private ImportantNoticePreferences mImportantNoticePreferences; + + private static class ImportantNoticePreferences { + private final SharedPreferences mPref; + + private Integer mVersion; + private Long mLastTime; + + public ImportantNoticePreferences(final Context context) { + mPref = ImportantNoticeUtils.getImportantNoticePreferences(context); + } + + private Integer getInt(final String key) { + if (mPref.contains(key)) { + return mPref.getInt(key, 0); + } + return null; + } + + public Long getLong(final String key) { + if (mPref.contains(key)) { + return mPref.getLong(key, 0); + } + return null; + } + + private void putInt(final String key, final Integer value) { + if (value == null) { + removePreference(key); + } else { + mPref.edit().putInt(key, value).apply(); + } + } + + private void putLong(final String key, final Long value) { + if (value == null) { + removePreference(key); + } else { + mPref.edit().putLong(key, value).apply(); + } + } + + private void removePreference(final String key) { + mPref.edit().remove(key).apply(); + } + + public void save() { + mVersion = getInt(KEY_IMPORTANT_NOTICE_VERSION); + mLastTime = getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE); + } + + public void restore() { + putInt(KEY_IMPORTANT_NOTICE_VERSION, mVersion); + putLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE, mLastTime); + } + + public void clear() { + removePreference(KEY_IMPORTANT_NOTICE_VERSION); + removePreference(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE); + } + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + mImportantNoticePreferences = new ImportantNoticePreferences(getContext()); + mImportantNoticePreferences.save(); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + mImportantNoticePreferences.restore(); + } + + public void testCurrentVersion() { + assertEquals("Current version", CURRENT_IMPORTANT_NOTICE_VERSION, + ImportantNoticeUtils.getCurrentImportantNoticeVersion(getContext())); + } + + public void testUpdateVersion() { + mImportantNoticePreferences.clear(); + + assertEquals("Current boolean before update", true, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version before update", 0, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version before update ", 1, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Current title before update", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents before update", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + + ImportantNoticeUtils.updateLastImportantNoticeVersion(getContext()); + + assertEquals("Current boolean after update", false, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version after update", 1, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version after update", 2, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Current title after update", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents after update", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + } + + private static void sleep(final long millseconds) { + try { Thread.sleep(millseconds); } catch (final Exception e) { /* ignore */ } + } + + public void testTimeout() { + final long lastTime = System.currentTimeMillis() + - ImportantNoticeUtils.TIMEOUT_OF_IMPORTANT_NOTICE + + TimeUnit.MILLISECONDS.toMillis(1000); + mImportantNoticePreferences.clear(); + assertEquals("Before set last time", null, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + assertEquals("Set last time", false, + ImportantNoticeUtils.hasTimeoutPassed(getContext(), lastTime)); + assertEquals("After set last time", (Long)lastTime, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + + // Call {@link ImportantNoticeUtils#shouldShowImportantNotice(Context)} before timeout. + assertEquals("Current boolean before timeout 1", true, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version before timeout 1", 0, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version before timeout 1", 1, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Last time before timeout 1", (Long)lastTime, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + assertEquals("Current title before timeout 1", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents before timeout 1", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + + sleep(TimeUnit.MILLISECONDS.toMillis(600)); + + // Call {@link ImportantNoticeUtils#shouldShowImportantNotice(Context)} before timeout + // again. + assertEquals("Current boolean before timeout 2", true, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version before timeout 2", 0, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version before timeout 2", 1, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Last time before timeout 2", (Long)lastTime, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + assertEquals("Current title before timeout 2", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents before timeout 2", false, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + + sleep(TimeUnit.MILLISECONDS.toMillis(600)); + + // Call {@link ImportantNoticeUtils#shouldShowImportantNotice(Context)} after timeout. + assertEquals("Current boolean after timeout 1", false, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version after timeout 1", 1, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version after timeout 1", 2, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Last time aflter timeout 1", null, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + assertEquals("Current title after timeout 1", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents after timeout 1", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + + sleep(TimeUnit.MILLISECONDS.toMillis(600)); + + // Call {@link ImportantNoticeUtils#shouldShowImportantNotice(Context)} after timeout again. + assertEquals("Current boolean after timeout 2", false, + ImportantNoticeUtils.shouldShowImportantNotice(getContext())); + assertEquals("Last version after timeout 2", 1, + ImportantNoticeUtils.getLastImportantNoticeVersion(getContext())); + assertEquals("Next version after timeout 2", 2, + ImportantNoticeUtils.getNextImportantNoticeVersion(getContext())); + assertEquals("Last time aflter timeout 2", null, + mImportantNoticePreferences.getLong(KEY_TIMESTAMP_OF_FIRST_IMPORTANT_NOTICE)); + assertEquals("Current title after timeout 2", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeTitle(getContext()))); + assertEquals("Current contents after timeout 2", true, TextUtils.isEmpty( + ImportantNoticeUtils.getNextImportantNoticeContents(getContext()))); + } +} diff --git a/tests/src/com/android/inputmethod/latin/utils/StringUtilsTests.java b/tests/src/com/android/inputmethod/latin/utils/StringUtilsTests.java new file mode 100644 index 000000000..ba2e99802 --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/utils/StringUtilsTests.java @@ -0,0 +1,192 @@ +/* + * Copyright (C) 2014 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.utils; + +import android.test.AndroidTestCase; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.inputmethod.latin.Constants; +import com.android.inputmethod.latin.utils.StringUtils; + +import java.util.Locale; + +@SmallTest +public class StringUtilsTests extends AndroidTestCase { + private static final Locale US = Locale.US; + private static final Locale GERMAN = Locale.GERMAN; + private static final Locale TURKEY = new Locale("tr", "TR"); + private static final Locale GREECE = new Locale("el", "GR"); + + private static void assert_toUpperCaseOfStringForLocale(final Locale locale, + final String lowerCase, final String expected) { + assertEquals(lowerCase + " in " + locale, expected, + StringUtils.toUpperCaseOfStringForLocale( + lowerCase, true /* needsToUpperCase */, locale)); + } + + public void test_toUpperCaseOfStringForLocale() { + assert_toUpperCaseOfStringForLocale(US, null, null); + assert_toUpperCaseOfStringForLocale(US, "", ""); + assert_toUpperCaseOfStringForLocale(US, "aeiou", "AEIOU"); + // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE + // U+00E8: "è" LATIN SMALL LETTER E WITH GRAVE + // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX + // U+00F6: "ö" LATIN SMALL LETTER O WITH DIAERESIS + // U+016B: "ū" LATIN SMALL LETTER U WITH MACRON + // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE + // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA + // U+00C0: "À" LATIN CAPITAL LETTER A WITH GRAVE + // U+00C8: "È" LATIN CAPITAL LETTER E WITH GRAVE + // U+00CE: "Î" LATIN CAPITAL LETTER I WITH CIRCUMFLEX + // U+00D6: "Ö" LATIN CAPITAL LETTER O WITH DIAERESIS + // U+016A: "Ū" LATIN CAPITAL LETTER U WITH MACRON + // U+00D1: "Ñ" LATIN CAPITAL LETTER N WITH TILDE + // U+00C7: "Ç" LATIN CAPITAL LETTER C WITH CEDILLA + assert_toUpperCaseOfStringForLocale(US, + "\u00E0\u00E8\u00EE\u00F6\u016B\u00F1\u00E7", + "\u00C0\u00C8\u00CE\u00D6\u016A\u00D1\u00C7"); + // U+00DF: "ß" LATIN SMALL LETTER SHARP S + // U+015B: "ś" LATIN SMALL LETTER S WITH ACUTE + // U+0161: "š" LATIN SMALL LETTER S WITH CARON + // U+015A: "Ś" LATIN CAPITAL LETTER S WITH ACUTE + // U+0160: "Š" LATIN CAPITAL LETTER S WITH CARONZ + assert_toUpperCaseOfStringForLocale(GERMAN, + "\u00DF\u015B\u0161", + "SS\u015A\u0160"); + // U+0259: "ə" LATIN SMALL LETTER SCHWA + // U+0069: "i" LATIN SMALL LETTER I + // U+0131: "ı" LATIN SMALL LETTER DOTLESS I + // U+018F: "Ə" LATIN SMALL LETTER SCHWA + // U+0130: "İ" LATIN SMALL LETTER I WITH DOT ABOVE + // U+0049: "I" LATIN SMALL LETTER I + assert_toUpperCaseOfStringForLocale(TURKEY, + "\u0259\u0069\u0131", + "\u018F\u0130\u0049"); + // U+03C3: "σ" GREEK SMALL LETTER SIGMA + // U+03C2: "ς" GREEK SMALL LETTER FINAL SIGMA + // U+03A3: "Σ" GREEK CAPITAL LETTER SIGMA + assert_toUpperCaseOfStringForLocale(GREECE, + "\u03C3\u03C2", + "\u03A3\u03A3"); + // U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS + // U+03AD: "έ" GREEK SMALL LETTER EPSILON WITH TONOS + // U+03AE: "ή" GREEK SMALL LETTER ETA WITH TONOS + // U+03AF: "ί" GREEK SMALL LETTER IOTA WITH TONOS + // U+03CC: "ό" GREEK SMALL LETTER OMICRON WITH TONOS + // U+03CD: "ύ" GREEK SMALL LETTER UPSILON WITH TONOS + // U+03CE: "ώ" GREEK SMALL LETTER OMEGA WITH TONOS + // U+0386: "Ά" GREEK CAPITAL LETTER ALPHA WITH TONOS + // U+0388: "Έ" GREEK CAPITAL LETTER EPSILON WITH TONOS + // U+0389: "Ή" GREEK CAPITAL LETTER ETA WITH TONOS + // U+038A: "Ί" GREEK CAPITAL LETTER IOTA WITH TONOS + // U+038C: "Ό" GREEK CAPITAL LETTER OMICRON WITH TONOS + // U+038E: "Ύ" GREEK CAPITAL LETTER UPSILON WITH TONOS + // U+038F: "Ώ" GREEK CAPITAL LETTER OMEGA WITH TONOS + assert_toUpperCaseOfStringForLocale(GREECE, + "\u03AC\u03AD\u03AE\u03AF\u03CC\u03CD\u03CE", + "\u0386\u0388\u0389\u038A\u038C\u038E\u038F"); + // U+03CA: "ϊ" GREEK SMALL LETTER IOTA WITH DIALYTIKA + // U+03CB: "ϋ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA + // U+0390: "ΐ" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS + // U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + // U+03AA: "Ϊ" GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + // U+03AB: "Ϋ" GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA + // U+0399: "Ι" GREEK CAPITAL LETTER IOTA + // U+03A5: "Υ" GREEK CAPITAL LETTER UPSILON + // U+0308: COMBINING DIAERESIS + // U+0301: COMBINING GRAVE ACCENT + assert_toUpperCaseOfStringForLocale(GREECE, + "\u03CA\u03CB\u0390\u03B0", + "\u03AA\u03AB\u0399\u0308\u0301\u03A5\u0308\u0301"); + } + + private static void assert_toUpperCaseOfCodeForLocale(final Locale locale, final int lowerCase, + final int expected) { + assertEquals(lowerCase + " in " + locale, expected, + StringUtils.toUpperCaseOfCodeForLocale( + lowerCase, true /* needsToUpperCase */, locale)); + } + + public void test_toUpperCaseOfCodeForLocale() { + assert_toUpperCaseOfCodeForLocale(US, Constants.CODE_ENTER, Constants.CODE_ENTER); + assert_toUpperCaseOfCodeForLocale(US, Constants.CODE_SPACE, Constants.CODE_SPACE); + assert_toUpperCaseOfCodeForLocale(US, Constants.CODE_COMMA, Constants.CODE_COMMA); + // U+0069: "i" LATIN SMALL LETTER I + // U+0131: "ı" LATIN SMALL LETTER DOTLESS I + // U+0130: "İ" LATIN SMALL LETTER I WITH DOT ABOVE + // U+0049: "I" LATIN SMALL LETTER I + assert_toUpperCaseOfCodeForLocale(US, 0x0069, 0x0049); // i -> I + assert_toUpperCaseOfCodeForLocale(US, 0x0131, 0x0049); // ı -> I + assert_toUpperCaseOfCodeForLocale(TURKEY, 0x0069, 0x0130); // i -> İ + assert_toUpperCaseOfCodeForLocale(TURKEY, 0x0131, 0x0049); // ı -> I + // U+00DF: "ß" LATIN SMALL LETTER SHARP S + // The title case of "ß" is "SS". + assert_toUpperCaseOfCodeForLocale(US, 0x00DF, Constants.CODE_UNSPECIFIED); + // U+03AC: "ά" GREEK SMALL LETTER ALPHA WITH TONOS + // U+0386: "Ά" GREEK CAPITAL LETTER ALPHA WITH TONOS + assert_toUpperCaseOfCodeForLocale(GREECE, 0x03AC, 0x0386); + // U+03CA: "ϊ" GREEK SMALL LETTER IOTA WITH DIALYTIKA + // U+03AA: "Ϊ" GREEK CAPITAL LETTER IOTA WITH DIALYTIKA + assert_toUpperCaseOfCodeForLocale(GREECE, 0x03CA, 0x03AA); + // U+03B0: "ΰ" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS + // The title case of "ΰ" is "\u03A5\u0308\u0301". + assert_toUpperCaseOfCodeForLocale(GREECE, 0x03B0, Constants.CODE_UNSPECIFIED); + } + + private static void assert_capitalizeFirstCodePoint(final Locale locale, final String text, + final String expected) { + assertEquals(text + " in " + locale, expected, + StringUtils.capitalizeFirstCodePoint(text, locale)); + } + + public void test_capitalizeFirstCodePoint() { + assert_capitalizeFirstCodePoint(US, "", ""); + assert_capitalizeFirstCodePoint(US, "a", "A"); + assert_capitalizeFirstCodePoint(US, "à", "À"); + assert_capitalizeFirstCodePoint(US, "ß", "SS"); + assert_capitalizeFirstCodePoint(US, "text", "Text"); + assert_capitalizeFirstCodePoint(US, "iGoogle", "IGoogle"); + assert_capitalizeFirstCodePoint(TURKEY, "iyi", "İyi"); + assert_capitalizeFirstCodePoint(TURKEY, "ısırdı", "Isırdı"); + assert_capitalizeFirstCodePoint(GREECE, "ά", "Ά"); + assert_capitalizeFirstCodePoint(GREECE, "άνεση", "Άνεση"); + } + + private static void assert_capitalizeFirstAndDowncaseRest(final Locale locale, + final String text, final String expected) { + assertEquals(text + " in " + locale, expected, + StringUtils.capitalizeFirstAndDowncaseRest(text, locale)); + } + + public void test_capitalizeFirstAndDowncaseRest() { + assert_capitalizeFirstAndDowncaseRest(US, "", ""); + assert_capitalizeFirstAndDowncaseRest(US, "a", "A"); + assert_capitalizeFirstAndDowncaseRest(US, "à", "À"); + assert_capitalizeFirstAndDowncaseRest(US, "ß", "SS"); + assert_capitalizeFirstAndDowncaseRest(US, "text", "Text"); + assert_capitalizeFirstAndDowncaseRest(US, "iGoogle", "Igoogle"); + assert_capitalizeFirstAndDowncaseRest(US, "invite", "Invite"); + assert_capitalizeFirstAndDowncaseRest(US, "INVITE", "Invite"); + assert_capitalizeFirstAndDowncaseRest(TURKEY, "iyi", "İyi"); + assert_capitalizeFirstAndDowncaseRest(TURKEY, "İYİ", "İyi"); + assert_capitalizeFirstAndDowncaseRest(TURKEY, "ısırdı", "Isırdı"); + assert_capitalizeFirstAndDowncaseRest(TURKEY, "ISIRDI", "Isırdı"); + assert_capitalizeFirstAndDowncaseRest(GREECE, "ά", "Ά"); + assert_capitalizeFirstAndDowncaseRest(GREECE, "άνεση", "Άνεση"); + assert_capitalizeFirstAndDowncaseRest(GREECE, "ΆΝΕΣΗ", "Άνεση"); + } +} |