aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTests.java260
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestHelper.java22
-rw-r--r--tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java5
3 files changed, 275 insertions, 12 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTests.java
new file mode 100644
index 000000000..3cd6a8944
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTests.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard.internal;
+
+import android.test.AndroidTestCase;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.internal.KeyboardState.SwitchActions;
+
+public class KeyboardStateTests extends AndroidTestCase {
+ private static final int ALPHABET_UNSHIFTED = 0;
+ private static final int ALPHABET_MANUAL_SHIFTED = 1;
+ private static final int ALPHABET_AUTOMATIC_SHIFTED = 2;
+ private static final int ALPHABET_SHIFT_LOCKED = 3;
+ private static final int SYMBOLS_UNSHIFTED = 4;
+ private static final int SYMBOLS_SHIFTED = 5;
+
+ static class KeyboardSwitcher implements KeyboardState.SwitchActions {
+ public int mLayout = ALPHABET_UNSHIFTED;
+
+ @Override
+ public void setAlphabetKeyboard() {
+ mLayout = ALPHABET_UNSHIFTED;
+ }
+
+ @Override
+ public void setShifted(int shiftMode) {
+ if (shiftMode == SwitchActions.UNSHIFT) {
+ mLayout = ALPHABET_UNSHIFTED;
+ } else if (shiftMode == SwitchActions.MANUAL_SHIFT) {
+ mLayout = ALPHABET_MANUAL_SHIFTED;
+ } else if (shiftMode == SwitchActions.AUTOMATIC_SHIFT) {
+ mLayout = ALPHABET_AUTOMATIC_SHIFTED;
+ }
+ }
+
+ @Override
+ public void setShiftLocked(boolean shiftLocked) {
+ if (shiftLocked) {
+ mLayout = ALPHABET_SHIFT_LOCKED;
+ } else {
+ mLayout = ALPHABET_UNSHIFTED;
+ }
+ }
+
+ @Override
+ public void setSymbolsKeyboard() {
+ mLayout = SYMBOLS_UNSHIFTED;
+ }
+
+ @Override
+ public void setSymbolsShiftedKeyboard() {
+ mLayout = SYMBOLS_SHIFTED;
+ }
+ }
+
+ private KeyboardSwitcher mSwitcher;
+ private KeyboardState mState;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ mSwitcher = new KeyboardSwitcher();
+ mState = new KeyboardState(mSwitcher);
+
+ final String layoutSwitchBackCharacter = "";
+ // TODO: Unit tests for non-distinct multi touch device.
+ final boolean hasDistinctMultitouch = true;
+ mState.onLoadKeyboard(layoutSwitchBackCharacter, hasDistinctMultitouch);
+ }
+
+ // Argument for KeyboardState.onPressShift and onReleaseShift.
+ private static final boolean NOT_SLIDING = false;
+ private static final boolean SLIDING = true;
+ // Argument for KeyboardState.onCodeInput.
+ private static final boolean SINGLE = true;
+ private static final boolean MULTI = false;
+
+
+ private void assertAlphabetNormal() {
+ assertEquals(ALPHABET_UNSHIFTED, mSwitcher.mLayout);
+ }
+
+ private void assertAlphabetManualShifted() {
+ assertEquals(ALPHABET_MANUAL_SHIFTED, mSwitcher.mLayout);
+ }
+
+ private void assertAlphabetAutomaticShifted() {
+ assertEquals(ALPHABET_AUTOMATIC_SHIFTED, mSwitcher.mLayout);
+ }
+
+ private void assertAlphabetShiftLocked() {
+ assertEquals(ALPHABET_SHIFT_LOCKED, mSwitcher.mLayout);
+ }
+
+ private void assertSymbolsNormal() {
+ assertEquals(SYMBOLS_UNSHIFTED, mSwitcher.mLayout);
+ }
+
+ private void assertSymbolsShifted() {
+ assertEquals(SYMBOLS_SHIFTED, mSwitcher.mLayout);
+ }
+
+ // Initial state test.
+ public void testLoadKeyboard() {
+ assertAlphabetNormal();
+ }
+
+ // Shift key in alphabet mode.
+ public void testShift() {
+ // Press/release shift key.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+
+ // Press/release shift key.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetNormal();
+
+ // TODO: Sliding test
+ }
+
+ // Switching between alphabet and symbols.
+ public void testAlphabetAndSymbols() {
+ // Press/release "?123" key.
+ mState.onPressSymbol();
+ assertSymbolsNormal();
+ mState.onReleaseSymbol();
+ assertSymbolsNormal();
+
+ // Press/release "ABC" key.
+ mState.onPressSymbol();
+ assertAlphabetNormal();
+ mState.onReleaseSymbol();
+ assertAlphabetNormal();
+
+ // TODO: Sliding test
+ // TODO: Snap back test
+ }
+
+ // Switching between symbols and symbols shifted.
+ public void testSymbolsAndSymbolsShifted() {
+ // Press/release "?123" key.
+ mState.onPressSymbol();
+ assertSymbolsNormal();
+ mState.onReleaseSymbol();
+ assertSymbolsNormal();
+
+ // Press/release "=\<" key.
+ mState.onPressShift(NOT_SLIDING);
+ assertSymbolsShifted();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertSymbolsShifted();
+
+ // Press/release "ABC" key.
+ mState.onPressSymbol();
+ assertAlphabetNormal();
+ mState.onReleaseSymbol();
+ assertAlphabetNormal();
+
+ // TODO: Sliding test
+ // TODO: Snap back test
+ }
+
+ // Automatic upper case test
+ public void testAutomaticUpperCase() {
+ // Update shift state with auto caps enabled.
+ mState.onUpdateShiftState(true);
+ assertAlphabetAutomaticShifted();
+
+ // Press shift key.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ // Release shift key.
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetNormal();
+
+ // TODO: Chording test.
+ }
+
+ // TODO: UpdateShiftState with shift locked, etc.
+
+ // TODO: Multitouch test
+
+ // TODO: Change focus test.
+
+ // TODO: Change orientation test.
+
+ // Long press shift key.
+ // TODO: Move long press recognizing timer/logic into KeyboardState.
+ public void testLongPressShift() {
+ // Long press shift key
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ // Long press recognized in LatinKeyboardView.KeyTimerHandler.
+ mState.onToggleCapsLock();
+ assertAlphabetShiftLocked();
+ mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
+ assertAlphabetShiftLocked();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetShiftLocked();
+
+ // Long press shift key.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ // Long press recognized in LatinKeyboardView.KeyTimerHandler.
+ mState.onToggleCapsLock();
+ assertAlphabetNormal();
+ mState.onCodeInput(Keyboard.CODE_CAPSLOCK, SINGLE);
+ assertAlphabetNormal();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetNormal();
+ }
+
+ // Double tap shift key.
+ // TODO: Move double tap recognizing timer/logic into KeyboardState.
+ public void testDoubleTapShift() {
+ // First shift key tap.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
+ assertAlphabetManualShifted();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ // Second shift key tap.
+ // Double tap recognized in LatinKeyboardView.KeyTimerHandler.
+ mState.onToggleCapsLock();
+ assertAlphabetShiftLocked();
+ mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
+ assertAlphabetShiftLocked();
+
+ // First shift key tap.
+ mState.onPressShift(NOT_SLIDING);
+ assertAlphabetManualShifted();
+ mState.onCodeInput(Keyboard.CODE_SHIFT, SINGLE);
+ assertAlphabetManualShifted();
+ mState.onReleaseShift(NOT_SLIDING);
+ assertAlphabetNormal();
+ // Second shift key tap.
+ // Second tap is ignored in LatinKeyboardView.KeyTimerHandler.
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestHelper.java b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
index 0d90e0ef3..06b192440 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestHelper.java
@@ -28,6 +28,7 @@ import java.util.Locale;
public class SuggestHelper {
protected final Suggest mSuggest;
+ protected int mCorrectionMode;
protected final LatinKeyboard mKeyboard;
private final KeyDetector mKeyDetector;
@@ -50,14 +51,14 @@ public class SuggestHelper {
}
private void init() {
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL);
+ setCorrectionMode(Suggest.CORRECTION_FULL);
mKeyDetector.setKeyboard(mKeyboard, 0, 0);
mKeyDetector.setProximityCorrectionEnabled(true);
mKeyDetector.setProximityThreshold(mKeyboard.mMostCommonKeyWidth);
}
public void setCorrectionMode(int correctionMode) {
- mSuggest.setCorrectionMode(correctionMode);
+ mCorrectionMode = correctionMode;
}
public boolean hasMainDictionary() {
@@ -78,13 +79,13 @@ public class SuggestHelper {
// TODO: This may be slow, but is OK for test so far.
public SuggestedWords getSuggestions(CharSequence typed) {
return mSuggest.getSuggestions(createWordComposer(typed), null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
}
public CharSequence getFirstSuggestion(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -92,7 +93,7 @@ public class SuggestHelper {
public CharSequence getAutoCorrection(CharSequence typed) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
@@ -101,7 +102,7 @@ public class SuggestHelper {
public int getSuggestIndex(CharSequence typed, CharSequence expected) {
WordComposer word = createWordComposer(typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, null,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
// Note that suggestions.getWord(0) is the word user typed.
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
@@ -113,7 +114,8 @@ public class SuggestHelper {
private void getBigramSuggestions(CharSequence previous, CharSequence typed) {
if (!TextUtils.isEmpty(previous) && (typed.length() > 1)) {
WordComposer firstChar = createWordComposer(Character.toString(typed.charAt(0)));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
}
}
@@ -121,7 +123,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return suggestions.size() > 1 ? suggestions.getWord(1) : null;
}
@@ -129,7 +131,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
return (suggestions.size() > 1 && mSuggest.hasAutoCorrection())
? suggestions.getWord(1) : null;
}
@@ -139,7 +141,7 @@ public class SuggestHelper {
WordComposer word = createWordComposer(typed);
getBigramSuggestions(previous, typed);
SuggestedWords suggestions = mSuggest.getSuggestions(word, previous,
- mKeyboard.getProximityInfo());
+ mKeyboard.getProximityInfo(), mCorrectionMode);
for (int i = 1; i < suggestions.size(); i++) {
if (TextUtils.equals(suggestions.getWord(i), expected))
return i;
diff --git a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
index 023e20a10..863c2b254 100644
--- a/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
+++ b/tests/src/com/android/inputmethod/latin/UserBigramSuggestHelper.java
@@ -38,7 +38,7 @@ public class UserBigramSuggestHelper extends SuggestHelper {
Suggest.DIC_USER);
mUserBigram.setDatabaseMax(userBigramMax);
mUserBigram.setDatabaseDelete(userBigramDelete);
- mSuggest.setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
+ setCorrectionMode(Suggest.CORRECTION_FULL_BIGRAM);
mSuggest.setUserBigramDictionary(mUserBigram);
}
@@ -59,7 +59,8 @@ public class UserBigramSuggestHelper extends SuggestHelper {
flushUserBigrams();
if (!TextUtils.isEmpty(previous) && !TextUtils.isEmpty(Character.toString(typed))) {
WordComposer firstChar = createWordComposer(Character.toString(typed));
- mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo());
+ mSuggest.getSuggestions(firstChar, previous, mKeyboard.getProximityInfo(),
+ mCorrectionMode);
boolean reloading = mUserBigram.reloadDictionaryIfRequired();
if (reloading) mUserBigram.waitForDictionaryLoading();
mUserBigram.getBigrams(firstChar, previous, mSuggest);