diff options
Diffstat (limited to 'tests/src')
8 files changed, 265 insertions, 63 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/BlueUnderlineTests.java b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java index 81f744da9..a9947c1bd 100644 --- a/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java +++ b/tests/src/com/android/inputmethod/latin/BlueUnderlineTests.java @@ -18,6 +18,9 @@ package com.android.inputmethod.latin; import com.android.inputmethod.keyboard.Keyboard; +import android.text.style.SuggestionSpan; +import android.text.style.UnderlineSpan; + public class BlueUnderlineTests extends InputTestsBase { public void testBlueUnderline() { @@ -27,7 +30,7 @@ public class BlueUnderlineTests extends InputTestsBase { type(STRING_TO_TYPE); sleep(DELAY_TO_WAIT_FOR_UNDERLINE); runMessages(); - final Span span = new Span(mTextView.getText()); + final SpanGetter span = new SpanGetter(mTextView.getText(), SuggestionSpan.class); assertEquals("show blue underline, span start", EXPECTED_SPAN_START, span.mStart); assertEquals("show blue underline, span end", EXPECTED_SPAN_END, span.mEnd); assertEquals("show blue underline, span color", true, span.isAutoCorrectionIndicator()); @@ -44,7 +47,7 @@ public class BlueUnderlineTests extends InputTestsBase { type(STRING_2_TO_TYPE); // We haven't have time to look into the dictionary yet, so the line should still be // blue to avoid any flicker. - final Span spanBefore = new Span(mTextView.getText()); + final SpanGetter spanBefore = new SpanGetter(mTextView.getText(), SuggestionSpan.class); assertEquals("extend blue underline, span start", EXPECTED_SPAN_START, spanBefore.mStart); assertEquals("extend blue underline, span end", EXPECTED_SPAN_END, spanBefore.mEnd); assertEquals("extend blue underline, span color", true, @@ -52,14 +55,15 @@ public class BlueUnderlineTests extends InputTestsBase { sleep(DELAY_TO_WAIT_FOR_UNDERLINE); runMessages(); // Now we have been able to re-evaluate the word, there shouldn't be an auto-correction span - final Span spanAfter = new Span(mTextView.getText()); + final SpanGetter spanAfter = new SpanGetter(mTextView.getText(), SuggestionSpan.class); assertNull("hide blue underline", spanAfter.mSpan); } public void testBlueUnderlineOnBackspace() { final String STRING_TO_TYPE = "tgis"; - final int EXPECTED_SPAN_START = 0; - final int EXPECTED_SPAN_END = 4; + final int EXPECTED_SUGGESTION_SPAN_START = -1; + final int EXPECTED_UNDERLINE_SPAN_START = 0; + final int EXPECTED_UNDERLINE_SPAN_END = 4; type(STRING_TO_TYPE); sleep(DELAY_TO_WAIT_FOR_UNDERLINE); runMessages(); @@ -72,13 +76,14 @@ public class BlueUnderlineTests extends InputTestsBase { type(Keyboard.CODE_DELETE); sleep(DELAY_TO_WAIT_FOR_UNDERLINE); runMessages(); - final Span span = new Span(mTextView.getText()); - assertEquals("show blue underline after backspace, span start", - EXPECTED_SPAN_START, span.mStart); - assertEquals("show blue underline after backspace, span end", - EXPECTED_SPAN_END, span.mEnd); - assertEquals("show blue underline after backspace, span color", true, - span.isAutoCorrectionIndicator()); + final SpanGetter suggestionSpan = new SpanGetter(mTextView.getText(), SuggestionSpan.class); + assertEquals("show no blue underline after backspace, span start should be -1", + EXPECTED_SUGGESTION_SPAN_START, suggestionSpan.mStart); + final SpanGetter underlineSpan = new SpanGetter(mTextView.getText(), UnderlineSpan.class); + assertEquals("should be composing, so should have an underline span", + EXPECTED_UNDERLINE_SPAN_START, underlineSpan.mStart); + assertEquals("should be composing, so should have an underline span", + EXPECTED_UNDERLINE_SPAN_END, underlineSpan.mEnd); } public void testBlueUnderlineDisappearsWhenCursorMoved() { @@ -96,7 +101,7 @@ public class BlueUnderlineTests extends InputTestsBase { mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); sleep(DELAY_TO_WAIT_FOR_UNDERLINE); runMessages(); - final Span span = new Span(mTextView.getText()); + final SpanGetter span = new SpanGetter(mTextView.getText(), SuggestionSpan.class); assertNull("blue underline removed when cursor is moved", span.mSpan); } } 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)); + } + } +} diff --git a/tests/src/com/android/inputmethod/latin/InputLogicTests.java b/tests/src/com/android/inputmethod/latin/InputLogicTests.java index 6c3cb16c7..f1ccfdd1d 100644 --- a/tests/src/com/android/inputmethod/latin/InputLogicTests.java +++ b/tests/src/com/android/inputmethod/latin/InputLogicTests.java @@ -28,7 +28,7 @@ public class InputLogicTests extends InputTestsBase { public void testPickSuggestionThenBackspace() { final String WORD_TO_TYPE = "this"; - final String EXPECTED_RESULT = "this"; + final String EXPECTED_RESULT = "thi"; type(WORD_TO_TYPE); pickSuggestionManually(0, WORD_TO_TYPE); mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); @@ -40,7 +40,7 @@ public class InputLogicTests extends InputTestsBase { public void testPickAutoCorrectionThenBackspace() { final String WORD_TO_TYPE = "tgis"; final String WORD_TO_PICK = "this"; - final String EXPECTED_RESULT = "tgis"; + final String EXPECTED_RESULT = "thi"; type(WORD_TO_TYPE); // Choose the auto-correction, which is always in position 0. For "tgis", the // auto-correction should be "this". @@ -55,7 +55,7 @@ public class InputLogicTests extends InputTestsBase { public void testPickTypedWordOverAutoCorrectionThenBackspace() { final String WORD_TO_TYPE = "tgis"; - final String EXPECTED_RESULT = "tgis"; + final String EXPECTED_RESULT = "tgi"; type(WORD_TO_TYPE); // Choose the typed word, which should be in position 1 (because position 0 should // be occupied by the "this" auto-correction, as checked by testAutoCorrect()) @@ -71,7 +71,7 @@ public class InputLogicTests extends InputTestsBase { public void testPickDifferentSuggestionThenBackspace() { final String WORD_TO_TYPE = "tgis"; final String WORD_TO_PICK = "thus"; - final String EXPECTED_RESULT = "tgis"; + final String EXPECTED_RESULT = "thu"; type(WORD_TO_TYPE); // Choose the second suggestion, which should be in position 2 and should be "thus" // when "tgis is typed. diff --git a/tests/src/com/android/inputmethod/latin/InputTestsBase.java b/tests/src/com/android/inputmethod/latin/InputTestsBase.java index c73a931ea..eb47fd517 100644 --- a/tests/src/com/android/inputmethod/latin/InputTestsBase.java +++ b/tests/src/com/android/inputmethod/latin/InputTestsBase.java @@ -24,6 +24,7 @@ import android.preference.PreferenceManager; import android.test.ServiceTestCase; import android.text.InputType; import android.text.SpannableStringBuilder; +import android.text.style.CharacterStyle; import android.text.style.SuggestionSpan; import android.view.LayoutInflater; import android.view.View; @@ -57,18 +58,19 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> { new HashMap<String, InputMethodSubtype>(); // A helper class to ease span tests - public static class Span { + public static class SpanGetter { final SpannableStringBuilder mInputText; - final SuggestionSpan mSpan; + final CharacterStyle mSpan; final int mStart; final int mEnd; // The supplied CharSequence should be an instance of SpannableStringBuilder, - // and it should contain exactly zero or one SuggestionSpan. Otherwise, an exception + // and it should contain exactly zero or one span. Otherwise, an exception // is thrown. - public Span(final CharSequence inputText) { + public SpanGetter(final CharSequence inputText, + final Class<? extends CharacterStyle> spanType) { mInputText = (SpannableStringBuilder)inputText; - final SuggestionSpan[] spans = - mInputText.getSpans(0, mInputText.length(), SuggestionSpan.class); + final CharacterStyle[] spans = + mInputText.getSpans(0, mInputText.length(), spanType); if (0 == spans.length) { mSpan = null; mStart = -1; @@ -78,11 +80,12 @@ public class InputTestsBase extends ServiceTestCase<LatinIME> { mStart = mInputText.getSpanStart(mSpan); mEnd = mInputText.getSpanEnd(mSpan); } else { - throw new RuntimeException("Expected one SuggestionSpan, found " + spans.length); + throw new RuntimeException("Expected one span, found " + spans.length); } } public boolean isAutoCorrectionIndicator() { - return 0 != (SuggestionSpan.FLAG_AUTO_CORRECTION & mSpan.getFlags()); + return (mSpan instanceof SuggestionSpan) && + 0 != (SuggestionSpan.FLAG_AUTO_CORRECTION & ((SuggestionSpan)mSpan).getFlags()); } } |