diff options
Diffstat (limited to 'tests')
5 files changed, 232 insertions, 38 deletions
diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java index 0e6caaf87..dc098db1e 100644 --- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateMultiTouchTests.java @@ -34,6 +34,26 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase { releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED); } + // Chording input in shifted. + public void testChordingShifted() { + // Press shift key, enter alphabet shifted. + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + + // Press shift key and hold, enter into choring shift state. + pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + // Press/release letter key. + chordingPressAndReleaseKey('Z', ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + // Release shift key, switch back to alphabet shifted. + releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + + // Press "?123" key and hold, enter into choring symbols state. + pressKey(CODE_SYMBOL, SYMBOLS_UNSHIFTED); + // Press/release symbol letter key. + chordingPressAndReleaseKey('1', SYMBOLS_UNSHIFTED, SYMBOLS_UNSHIFTED); + // Release "123?" key, switch back to alphabet shift unshifted. + releaseKey(CODE_SYMBOL, ALPHABET_UNSHIFTED); + } + // Chording input in shift locked. public void testChordingShiftLocked() { // Long press shift key, enter alphabet shift locked. @@ -206,8 +226,8 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase { // Chording input in automatic upper case. public void testChordingAutomaticUpperCase() { - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Update shift state with auto caps enabled. pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); @@ -240,4 +260,114 @@ public class KeyboardStateMultiTouchTests extends KeyboardStateTestsBase { // Release shift key releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED); } + + // Multi touch input in manual shifted. + public void testMultiTouchManualShifted() { + // Press/release shift key, enter into alphabet shifted. + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + + // Press 'X' key and hold + pressKey('X', ALPHABET_MANUAL_SHIFTED); + // Press 'z' key and hold, switch back to alphabet unshifted. + chordingPressKey('z', ALPHABET_UNSHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_UNSHIFTED); + // Release 'z' key + releaseKey('z', ALPHABET_UNSHIFTED); + } + + // Multi touch input in automatic upper case. + public void testMultiTouchAutomaticUpperCase() { + // Set auto word caps mode on. + setAutoCapsMode(CAP_MODE_WORDS); + // Update shift state with auto caps enabled. + pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); + + // Press 'X' key and hold + pressKey('X', ALPHABET_AUTOMATIC_SHIFTED); + // Press 'z' key and hold, switch back to alphabet unshifted. + chordingPressKey('z', ALPHABET_UNSHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_UNSHIFTED); + // Release 'z' key + releaseKey('z', ALPHABET_UNSHIFTED); + } + + // Multi touch input in capitalize character mode. + public void testMultiTouchCapModeCharacter() { + // Set auto character caps mode on. + setAutoCapsMode(CAP_MODE_CHARACTERS); + // Update shift state with auto caps enabled. + pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); + + // Press 'X' key and hold + pressKey('X', ALPHABET_AUTOMATIC_SHIFTED); + // Press 'Z' key and hold, stay in automatic shifted mode. + chordingPressKey('Z', ALPHABET_AUTOMATIC_SHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_AUTOMATIC_SHIFTED); + // Release 'Z' key + releaseKey('Z', ALPHABET_AUTOMATIC_SHIFTED); + } + + // Multi touch shift chording input in manual shifted. + public void testMultiTouchShiftChordingManualShifted() { + // Press/release shift key, enter into alphabet shifted. + pressAndReleaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED, ALPHABET_MANUAL_SHIFTED); + + // Press shift key and hold, stays in alphabet shifted. + pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + // Press 'X' key and hold + chordingPressKey('X', ALPHABET_MANUAL_SHIFTED); + // Press 'Z' key and hold, stays in alphabet shifted. + chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_MANUAL_SHIFTED); + // Release 'Z' key + releaseKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release shift key. + releaseKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + } + + // Multi touch shift chording input in automatic upper case. + public void testMultiTouchShiftChordingAutomaticUpperCase() { + // Set auto word caps mode on. + setAutoCapsMode(CAP_MODE_WORDS); + // Update shift state with auto caps enabled. + pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); + + // Press shift key and hold, switch to alphabet shifted. + pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + // Press 'X' key and hold + chordingPressKey('X', ALPHABET_MANUAL_SHIFTED); + // Press 'Z' key and hold, stays in alphabet shifted. + chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_MANUAL_SHIFTED); + // Release 'Z' key + releaseKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release shift key. + releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED); + } + + // Multi touch shift chording input in capitalize character mode. + public void testMultiTouchShiftChordingCapModeCharacter() { + // Set auto character caps mode on. + setAutoCapsMode(CAP_MODE_CHARACTERS); + // Update shift state with auto caps enabled. + pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); + + // Press shift key and hold, switch to alphabet shifted. + pressKey(CODE_SHIFT, ALPHABET_MANUAL_SHIFTED); + // Press 'X' key and hold + chordingPressKey('X', ALPHABET_MANUAL_SHIFTED); + // Press 'Z' key and hold, stay in automatic shifted mode. + chordingPressKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release 'X' key + releaseKey('X', ALPHABET_MANUAL_SHIFTED); + // Release 'Z' key + releaseKey('Z', ALPHABET_MANUAL_SHIFTED); + // Release shift key. + releaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED); + } } diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java index de2a50fcf..b9f53184a 100644 --- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateSingleTouchTests.java @@ -202,8 +202,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Automatic upper case test public void testAutomaticUpperCase() { - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Load keyboard, should be in automatic shifted. loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED); @@ -239,7 +239,7 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Long press shift key. public void testLongPressShift() { // Set auto caps mode off. - setAutoCapsMode(NO_AUTO_CAPS); + setAutoCapsMode(CAP_MODE_OFF); // Load keyboard, should be in alphabet. loadKeyboard(ALPHABET_UNSHIFTED); // Long press shift key, enter alphabet shift locked. @@ -268,8 +268,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Press/release shift key, back to alphabet. pressAndReleaseKey(CODE_SHIFT, ALPHABET_SHIFT_LOCK_SHIFTED, ALPHABET_UNSHIFTED); - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Load keyboard, should be in automatic shifted. loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED); // Long press shift key, enter alphabet shift locked. @@ -303,8 +303,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Second shift key tap. secondPressAndReleaseKey(CODE_SHIFT, ALPHABET_UNSHIFTED, ALPHABET_UNSHIFTED); - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Load keyboard, should be in automatic shifted. loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED); @@ -322,7 +322,7 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Update shift state. public void testUpdateShiftState() { // Set auto caps mode off. - setAutoCapsMode(NO_AUTO_CAPS); + setAutoCapsMode(CAP_MODE_OFF); // Load keyboard, should be in alphabet. loadKeyboard(ALPHABET_UNSHIFTED); // Update shift state, remained in alphabet. @@ -350,8 +350,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Update shift state, remained in symbols shifted. updateShiftState(SYMBOLS_SHIFTED); - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Load keyboard, should be in automatic shifted. loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED); // Update shift state, remained in automatic shifted. @@ -592,11 +592,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Change focus to auto caps text field. public void testChangeFocusAutoCaps() { - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); - - // Update shift state. - updateShiftState(ALPHABET_AUTOMATIC_SHIFTED); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Change focus to new text field. loadKeyboard(ALPHABET_AUTOMATIC_SHIFTED); @@ -735,8 +732,8 @@ public class KeyboardStateSingleTouchTests extends KeyboardStateTestsBase { // Rapidly press/release letter key. secondPressAndReleaseKey('J', ALPHABET_MANUAL_SHIFTED, ALPHABET_UNSHIFTED); - // Set auto caps mode on. - setAutoCapsMode(AUTO_CAPS); + // Set capitalize the first character of all words mode. + setAutoCapsMode(CAP_MODE_WORDS); // Press/release auto caps trigger letter to enter alphabet automatic shifted. pressAndReleaseKey(CODE_AUTO_CAPS_TRIGGER, ALPHABET_UNSHIFTED, ALPHABET_AUTOMATIC_SHIFTED); // Press/release shift key diff --git a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java index 96a54668c..9472a1fe5 100644 --- a/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java +++ b/tests/src/com/android/inputmethod/keyboard/internal/KeyboardStateTestsBase.java @@ -29,12 +29,12 @@ public class KeyboardStateTestsBase extends AndroidTestCase super.setUp(); mSwitcher = new MockKeyboardSwitcher(); - mSwitcher.setAutoCapsMode(NO_AUTO_CAPS); + mSwitcher.setAutoCapsMode(CAP_MODE_OFF); loadKeyboard(ALPHABET_UNSHIFTED); } - public void setAutoCapsMode(boolean autoCaps) { + public void setAutoCapsMode(int autoCaps) { mSwitcher.setAutoCapsMode(autoCaps); } @@ -64,14 +64,14 @@ public class KeyboardStateTestsBase extends AndroidTestCase assertLayout(afterRotate, mSwitcher.getLayoutId()); } - private void pressKeyWithoutTimerExpire(int code, int afterPress) { - mSwitcher.onPressKey(code); + private void pressKeyWithoutTimerExpire(int code, boolean isSinglePointer, int afterPress) { + mSwitcher.onPressKey(code, isSinglePointer); assertLayout(afterPress, mSwitcher.getLayoutId()); } public void pressKey(int code, int afterPress) { mSwitcher.expireDoubleTapTimeout(); - pressKeyWithoutTimerExpire(code, afterPress); + pressKeyWithoutTimerExpire(code, true, afterPress); } public void releaseKey(int code, int afterRelease) { @@ -86,7 +86,8 @@ public class KeyboardStateTestsBase extends AndroidTestCase } public void chordingPressKey(int code, int afterPress) { - pressKey(code, afterPress); + mSwitcher.expireDoubleTapTimeout(); + pressKeyWithoutTimerExpire(code, false, afterPress); } public void chordingReleaseKey(int code, int afterRelease) { @@ -114,7 +115,7 @@ public class KeyboardStateTestsBase extends AndroidTestCase } public void secondPressAndReleaseKey(int code, int afterPress, int afterRelease) { - pressKeyWithoutTimerExpire(code, afterPress); + pressKeyWithoutTimerExpire(code, true, afterPress); releaseKey(code, afterRelease); } } diff --git a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java index 999e08a8d..dd4caadf1 100644 --- a/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java +++ b/tests/src/com/android/inputmethod/keyboard/internal/MockKeyboardSwitcher.java @@ -16,6 +16,8 @@ package com.android.inputmethod.keyboard.internal; +import android.text.TextUtils; + import com.android.inputmethod.keyboard.Keyboard; public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { @@ -26,8 +28,10 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { // Argument for {@link KeyboardState#onCodeInput}. public static final boolean SINGLE = true; public static final boolean MULTI = false; - public static final boolean NO_AUTO_CAPS = false; - public static final boolean AUTO_CAPS = true; + public static final int CAP_MODE_OFF = + com.android.inputmethod.latin.Constants.TextUtils.CAP_MODE_OFF; + public static final int CAP_MODE_WORDS = TextUtils.CAP_MODE_WORDS; + public static final int CAP_MODE_CHARACTERS = TextUtils.CAP_MODE_CHARACTERS; public static final int CODE_SHIFT = Keyboard.CODE_SHIFT; public static final int CODE_SYMBOL = Keyboard.CODE_SWITCH_ALPHA_SYMBOL; @@ -45,9 +49,9 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { private int mLayout = Constants.ALPHABET_UNSHIFTED; - private boolean mAutoCapsMode = Constants.NO_AUTO_CAPS; + private int mAutoCapsMode = Constants.CAP_MODE_OFF; // Following InputConnection's behavior. Simulating InputType.TYPE_TEXT_FLAG_CAP_WORDS. - private boolean mAutoCapsState = true; + private int mAutoCapsState = Constants.CAP_MODE_OFF; private boolean mIsInDoubleTapTimeout; private int mLongPressTimeoutCode; @@ -71,8 +75,9 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { } } - public void setAutoCapsMode(boolean autoCaps) { + public void setAutoCapsMode(int autoCaps) { mAutoCapsMode = autoCaps; + mAutoCapsState = autoCaps; } public void expireDoubleTapTimeout() { @@ -116,7 +121,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { @Override public void requestUpdatingShiftState() { - mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState); + mState.onUpdateShiftState(mAutoCapsState); } @Override @@ -158,7 +163,7 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { } public void updateShiftState() { - mState.onUpdateShiftState(mAutoCapsMode && mAutoCapsState); + mState.onUpdateShiftState(mAutoCapsState); } public void loadKeyboard(String layoutSwitchBackSymbols) { @@ -169,8 +174,8 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { mState.onSaveKeyboardState(); } - public void onPressKey(int code) { - mState.onPressKey(code); + public void onPressKey(int code, boolean isSinglePointer) { + mState.onPressKey(code, isSinglePointer, mAutoCapsState); } public void onReleaseKey(int code, boolean withSliding) { @@ -181,10 +186,15 @@ public class MockKeyboardSwitcher implements KeyboardState.SwitchActions { } public void onCodeInput(int code, boolean isSinglePointer) { - if (Keyboard.isLetterCode(code)) { - mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER); + if (mAutoCapsMode == Constants.CAP_MODE_WORDS) { + if (Keyboard.isLetterCode(code)) { + mAutoCapsState = (code == Constants.CODE_AUTO_CAPS_TRIGGER) + ? mAutoCapsMode : Constants.CAP_MODE_OFF; + } + } else { + mAutoCapsState = mAutoCapsMode; } - mState.onCodeInput(code, isSinglePointer, mAutoCapsMode && mAutoCapsState); + mState.onCodeInput(code, isSinglePointer, mAutoCapsState); } public void onCancelInput(boolean isSinglePointer) { diff --git a/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java b/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java new file mode 100644 index 000000000..a2e71c11a --- /dev/null +++ b/tests/src/com/android/inputmethod/latin/ForgettingCurveTests.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.latin; + +import android.test.AndroidTestCase; + +public class ForgettingCurveTests extends AndroidTestCase { + public void testFcToFreq() { + for (int i = 0; i < Byte.MAX_VALUE; ++i) { + final byte fc = (byte)i; + final int e = UserHistoryForgettingCurveUtils.fcToElapsedTime(fc); + final int c = UserHistoryForgettingCurveUtils.fcToCount(fc); + final int l = UserHistoryForgettingCurveUtils.fcToLevel(fc); + final byte fc2 = UserHistoryForgettingCurveUtils.calcFc(e, c, l); + assertEquals(fc, fc2); + } + byte fc = 0; + int l; + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < (UserHistoryForgettingCurveUtils.COUNT_MAX + 1); ++j) { + fc = UserHistoryForgettingCurveUtils.pushCount(fc, true); + } + l = UserHistoryForgettingCurveUtils.fcToLevel(fc); + assertEquals(l, Math.max(1, Math.min(i + 1, 3))); + } + fc = 0; + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < (UserHistoryForgettingCurveUtils.COUNT_MAX + 1); ++j) { + fc = UserHistoryForgettingCurveUtils.pushCount(fc, false); + } + l = UserHistoryForgettingCurveUtils.fcToLevel(fc); + assertEquals(l, Math.min(i + 1, 3)); + } + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < (UserHistoryForgettingCurveUtils.ELAPSED_TIME_MAX + 1); ++j) { + fc = UserHistoryForgettingCurveUtils.pushElapsedTime(fc); + } + l = UserHistoryForgettingCurveUtils.fcToLevel(fc); + assertEquals(l, Math.max(0, 2 - i)); + } + } +} |