1c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard/* 2c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * Copyright (C) 2013 The Android Open Source Project 3c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * 4c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); 5c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * you may not use this file except in compliance with the License. 6c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * You may obtain a copy of the License at 7c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * 8c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * http://www.apache.org/licenses/LICENSE-2.0 9c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * 10c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * Unless required by applicable law or agreed to in writing, software 11c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * distributed under the License is distributed on an "AS IS" BASIS, 12c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * See the License for the specific language governing permissions and 14c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard * limitations under the License. 15c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard */ 16c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 17c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalardpackage com.android.inputmethod.latin; 18c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 19c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalardimport android.test.suitebuilder.annotation.LargeTest; 20c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalardimport android.view.inputmethod.BaseInputConnection; 21c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 229342484e8d573a40f470b6a593df31c602fa4076Ken Wakasaimport com.android.inputmethod.latin.common.Constants; 239342484e8d573a40f470b6a593df31c602fa4076Ken Wakasa 24c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard@LargeTest 25c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalardpublic class InputLogicTestsLanguageWithoutSpaces extends InputTestsBase { 26c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard public void testAutoCorrectForLanguageWithoutSpaces() { 27c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String STRING_TO_TYPE = "tgis is"; 28c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String EXPECTED_RESULT = "thisis"; 29c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 30c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(STRING_TO_TYPE); 31c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("simple auto-correct for language without spaces", EXPECTED_RESULT, 32c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard mEditText.getText().toString()); 33c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard } 34c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 35c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard public void testRevertAutoCorrectForLanguageWithoutSpaces() { 36c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String STRING_TO_TYPE = "tgis "; 37c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String EXPECTED_INTERMEDIATE_RESULT = "this"; 38c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String EXPECTED_FINAL_RESULT = "tgis"; 39c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 40c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(STRING_TO_TYPE); 41c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("simple auto-correct for language without spaces", 42c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard EXPECTED_INTERMEDIATE_RESULT, mEditText.getText().toString()); 43c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(Constants.CODE_DELETE); 44c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("simple auto-correct for language without spaces", 45c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard EXPECTED_FINAL_RESULT, mEditText.getText().toString()); 46c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard // Check we are back to composing the word 47c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", 0, 48c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 49c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", 4, 50c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 51c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard } 52c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 53c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard public void testDontResumeSuggestionOnBackspace() { 54c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String WORD_TO_TYPE = "and this "; 55c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 56c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(WORD_TO_TYPE); 57c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", -1, 58c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 59c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", -1, 60c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 61c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(" "); 62c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(Constants.CODE_DELETE); 63c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", -1, 64c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 65c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("don't resume suggestion on backspace", -1, 66c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 67c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard } 68c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 69c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard public void testStartComposingInsideText() { 70c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String WORD_TO_TYPE = "abcdefgh "; 71c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final int typedLength = WORD_TO_TYPE.length() - 1; // -1 because space gets eaten 72c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final int CURSOR_POS = 4; 73c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 74c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(WORD_TO_TYPE); 75c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); 76c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard mInputConnection.setSelection(CURSOR_POS, CURSOR_POS); 77c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 78c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard CURSOR_POS, CURSOR_POS, -1, -1); 799ddbee8570af667b5b325ae4136853aaea85c5b9Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 80c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard runMessages(); 81c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("start composing inside text", -1, 82c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 83c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("start composing inside text", -1, 84c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 85c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type("xxxx"); 86c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("start composing inside text", 4, 87c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 88c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("start composing inside text", 8, 89c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 90c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard } 91c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard 928e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard public void testMovingCursorInsideWordAndType() { 938e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard final String WORD_TO_TYPE = "abcdefgh"; 948e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard final int typedLength = WORD_TO_TYPE.length(); 958e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard final int CURSOR_POS = 4; 968e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 978e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard type(WORD_TO_TYPE); 988e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, 0, typedLength); 998e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 1008e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard runMessages(); 1018e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard mInputConnection.setSelection(CURSOR_POS, CURSOR_POS); 1028e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 1038e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard CURSOR_POS, CURSOR_POS, 0, typedLength); 1048e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 1058e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard runMessages(); 1068e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard assertEquals("move cursor inside text", 0, 1078e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 1088e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard assertEquals("move cursor inside text", typedLength, 1098e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 1108e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard type("x"); 1118e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 1128e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 1138e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard runMessages(); 1148e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard assertEquals("start typing while cursor inside composition", CURSOR_POS, 1158e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard BaseInputConnection.getComposingSpanStart(mEditText.getText())); 1168e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard assertEquals("start typing while cursor inside composition", CURSOR_POS + 1, 1178e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard BaseInputConnection.getComposingSpanEnd(mEditText.getText())); 1188e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard } 1198e235191dd3501fc3562fe0654d41501ec9760d0Jean Chalard 120c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard public void testPredictions() { 121c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard final String WORD_TO_TYPE = "Barack "; 122c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard changeKeyboardLocaleAndDictLocale("th", "en_US"); 123c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard type(WORD_TO_TYPE); 1249ddbee8570af667b5b325ae4136853aaea85c5b9Jean Chalard sleep(DELAY_TO_WAIT_FOR_PREDICTIONS_MILLIS); 125c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard runMessages(); 126c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard // Make sure there is no space 127c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("predictions in lang without spaces", "Barack", 128c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard mEditText.getText().toString()); 129c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard // Test the first prediction is displayed 13063be066544f19928d6a29c58c028cce7c95fa457Jean Chalard final SuggestedWords suggestedWords = mLatinIME.getSuggestedWordsForTest(); 131c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard assertEquals("predictions in lang without spaces", "Obama", 132dfbe2bfe089b301819039e9b3a7d2c307e6beac7Jean Chalard suggestedWords.size() > 0 ? suggestedWords.getWord(0) : null); 133c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard } 134c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard} 135