| /* |
| * Copyright (C) 2013 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.suitebuilder.annotation.LargeTest; |
| import android.view.inputmethod.BaseInputConnection; |
| |
| import com.android.inputmethod.latin.common.Constants; |
| |
| @LargeTest |
| public class InputLogicTestsLanguageWithoutSpaces extends InputTestsBase { |
| public void testAutoCorrectForLanguageWithoutSpaces() { |
| final String STRING_TO_TYPE = "tgis is"; |
| final String EXPECTED_RESULT = "thisis"; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(STRING_TO_TYPE); |
| assertEquals("simple auto-correct for language without spaces", EXPECTED_RESULT, |
| mEditText.getText().toString()); |
| } |
| |
| public void testRevertAutoCorrectForLanguageWithoutSpaces() { |
| final String STRING_TO_TYPE = "tgis "; |
| final String EXPECTED_INTERMEDIATE_RESULT = "this"; |
| final String EXPECTED_FINAL_RESULT = "tgis"; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(STRING_TO_TYPE); |
| assertEquals("simple auto-correct for language without spaces", |
| EXPECTED_INTERMEDIATE_RESULT, mEditText.getText().toString()); |
| type(Constants.CODE_DELETE); |
| assertEquals("simple auto-correct for language without spaces", |
| EXPECTED_FINAL_RESULT, mEditText.getText().toString()); |
| // Check we are back to composing the word |
| assertEquals("don't resume suggestion on backspace", 0, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("don't resume suggestion on backspace", 4, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| } |
| |
| public void testDontResumeSuggestionOnBackspace() { |
| final String WORD_TO_TYPE = "and this "; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(WORD_TO_TYPE); |
| assertEquals("don't resume suggestion on backspace", -1, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("don't resume suggestion on backspace", -1, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| type(" "); |
| type(Constants.CODE_DELETE); |
| assertEquals("don't resume suggestion on backspace", -1, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("don't resume suggestion on backspace", -1, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| } |
| |
| public void testStartComposingInsideText() { |
| final String WORD_TO_TYPE = "abcdefgh "; |
| final int typedLength = WORD_TO_TYPE.length() - 1; // -1 because space gets eaten |
| final int CURSOR_POS = 4; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(WORD_TO_TYPE); |
| mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); |
| mInputConnection.setSelection(CURSOR_POS, CURSOR_POS); |
| mLatinIME.onUpdateSelection(typedLength, typedLength, |
| CURSOR_POS, CURSOR_POS, -1, -1); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| runMessages(); |
| assertEquals("start composing inside text", -1, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("start composing inside text", -1, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| type("xxxx"); |
| assertEquals("start composing inside text", 4, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("start composing inside text", 8, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| } |
| |
| public void testMovingCursorInsideWordAndType() { |
| final String WORD_TO_TYPE = "abcdefgh"; |
| final int typedLength = WORD_TO_TYPE.length(); |
| final int CURSOR_POS = 4; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(WORD_TO_TYPE); |
| mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, 0, typedLength); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| runMessages(); |
| mInputConnection.setSelection(CURSOR_POS, CURSOR_POS); |
| mLatinIME.onUpdateSelection(typedLength, typedLength, |
| CURSOR_POS, CURSOR_POS, 0, typedLength); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| runMessages(); |
| assertEquals("move cursor inside text", 0, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("move cursor inside text", typedLength, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| type("x"); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| runMessages(); |
| assertEquals("start typing while cursor inside composition", CURSOR_POS, |
| BaseInputConnection.getComposingSpanStart(mEditText.getText())); |
| assertEquals("start typing while cursor inside composition", CURSOR_POS + 1, |
| BaseInputConnection.getComposingSpanEnd(mEditText.getText())); |
| } |
| |
| public void testPredictions() { |
| final String WORD_TO_TYPE = "Barack "; |
| changeKeyboardLocaleAndDictLocale("th", "en_US"); |
| type(WORD_TO_TYPE); |
| sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); |
| runMessages(); |
| // Make sure there is no space |
| assertEquals("predictions in lang without spaces", "Barack", |
| mEditText.getText().toString()); |
| // Test the first prediction is displayed |
| final SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest(); |
| assertEquals("predictions in lang without spaces", "Obama", |
| suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null); |
| } |
| } |