183c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard/* 283c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * Copyright (C) 2012 The Android Open Source Project 383c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * 483c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * Licensed under the Apache License, Version 2.0 (the "License"); you may not 583c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * use this file except in compliance with the License. You may obtain a copy of 683c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * the License at 783c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * 883c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * http://www.apache.org/licenses/LICENSE-2.0 983c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * 1083c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * Unless required by applicable law or agreed to in writing, software 1183c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 1283c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 1383c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * License for the specific language governing permissions and limitations under 1483c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard * the License. 1583c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard */ 1683c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 1783c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalardpackage com.android.inputmethod.latin; 1883c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 1983c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalardimport com.android.inputmethod.keyboard.Keyboard; 200bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard 218592ed408e8e81138172eefe2df28f00807a1e1fJean Chalardpublic class InputLogicTests extends InputTestsBase { 22f717c5685e3299349d5abe1ecc7d13446b9779bcJean Chalard 2383c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard public void testTypeWord() { 241e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String WORD_TO_TYPE = "abcd"; 251e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(WORD_TO_TYPE); 261e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard assertEquals("type word", WORD_TO_TYPE, mTextView.getText().toString()); 2783c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard } 2883c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 2983c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard public void testPickSuggestionThenBackspace() { 309159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard final String WORD_TO_TYPE = "this"; 31f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thi"; 321e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(WORD_TO_TYPE); 339bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_TYPE); 349159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 3583c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard type(Keyboard.CODE_DELETE); 369159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard assertEquals("press suggestion then backspace", EXPECTED_RESULT, 379159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mTextView.getText().toString()); 389159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard } 399159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard 40bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testPickAutoCorrectionThenBackspace() { 41bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_TYPE = "tgis"; 42bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_PICK = "this"; 43f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thi"; 44bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(WORD_TO_TYPE); 45bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // Choose the auto-correction, which is always in position 0. For "tgis", the 46bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // auto-correction should be "this". 479bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_PICK); 48bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 49bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", WORD_TO_PICK, 50bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 51bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(Keyboard.CODE_DELETE); 52bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT, 53bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 54bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 55bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 569159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard public void testPickTypedWordOverAutoCorrectionThenBackspace() { 579159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard final String WORD_TO_TYPE = "tgis"; 58f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "tgi"; 599159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard type(WORD_TO_TYPE); 609159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // Choose the typed word, which should be in position 1 (because position 0 should 619159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // be occupied by the "this" auto-correction, as checked by testAutoCorrect()) 629bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(1, WORD_TO_TYPE); 639159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 64bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", WORD_TO_TYPE, 65bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 669159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard type(Keyboard.CODE_DELETE); 679159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT, 681e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mTextView.getText().toString()); 6983c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard } 7083c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 71bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testPickDifferentSuggestionThenBackspace() { 72bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_TYPE = "tgis"; 73bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_PICK = "thus"; 74f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thu"; 75bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(WORD_TO_TYPE); 76bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // Choose the second suggestion, which should be in position 2 and should be "thus" 77bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // when "tgis is typed. 789bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(2, WORD_TO_PICK); 79bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 80bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick different suggestion then backspace", WORD_TO_PICK, 81bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 82bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(Keyboard.CODE_DELETE); 83bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick different suggestion then backspace", EXPECTED_RESULT, 84bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 85bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 86bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 871e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard public void testDeleteSelection() { 881e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String STRING_TO_TYPE = "some text delete me some text"; 891e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final int SELECTION_START = 10; 901e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final int SELECTION_END = 19; 911e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String EXPECTED_RESULT = "some text some text"; 921e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(STRING_TO_TYPE); 931e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // There is no IMF to call onUpdateSelection for us so we must do it by hand. 941e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // Send once to simulate the cursor actually responding to the move caused by typing. 951e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // This is necessary because LatinIME is bookkeeping to avoid confusing a real cursor 961e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // move with a move triggered by LatinIME inputting stuff. 971e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 981e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mInputConnection.setSelection(SELECTION_START, SELECTION_END); 991e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // And now we simulate the user actually selecting some text. 1001e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mLatinIME.onUpdateSelection(0, 0, SELECTION_START, SELECTION_END, -1, -1); 1011e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(Keyboard.CODE_DELETE); 1021e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard assertEquals("delete selection", EXPECTED_RESULT, mTextView.getText().toString()); 1031e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard } 1040bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard 1050bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard public void testAutoCorrect() { 1060bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard final String STRING_TO_TYPE = "tgis "; 1070bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard final String EXPECTED_RESULT = "this "; 1080bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard type(STRING_TO_TYPE); 1090bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard assertEquals("simple auto-correct", EXPECTED_RESULT, mTextView.getText().toString()); 110bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 111bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 112bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testAutoCorrectWithPeriod() { 113bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String STRING_TO_TYPE = "tgis."; 114bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String EXPECTED_RESULT = "this."; 115bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(STRING_TO_TYPE); 116bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("auto-correct with period", EXPECTED_RESULT, mTextView.getText().toString()); 117bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 118bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 119bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testAutoCorrectWithPeriodThenRevert() { 120bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String STRING_TO_TYPE = "tgis."; 121bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String EXPECTED_RESULT = "tgis."; 122bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(STRING_TO_TYPE); 123bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 124bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(Keyboard.CODE_DELETE); 125bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("auto-correct with period then revert", EXPECTED_RESULT, 126bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 1270bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard } 12860e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard 1290e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard public void testAutoCorrectWithSpaceThenRevert() { 1300e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String STRING_TO_TYPE = "tgis "; 1310e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String EXPECTED_RESULT = "tgis "; 1320e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(STRING_TO_TYPE); 1330e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 1340e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(Keyboard.CODE_DELETE); 1350e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard assertEquals("auto-correct with space then revert", EXPECTED_RESULT, 1360e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mTextView.getText().toString()); 1370e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard } 1380e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard 1390e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard public void testAutoCorrectToSelfDoesNotRevert() { 1400e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String STRING_TO_TYPE = "this "; 1410e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String EXPECTED_RESULT = "this"; 1420e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(STRING_TO_TYPE); 1430e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 1440e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(Keyboard.CODE_DELETE); 1450e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard assertEquals("auto-correct with space does not revert", EXPECTED_RESULT, 1460e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mTextView.getText().toString()); 1470e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard } 1480e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard 14960e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard public void testDoubleSpace() { 15060e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String STRING_TO_TYPE = "this "; 15160e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String EXPECTED_RESULT = "this. "; 15260e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard type(STRING_TO_TYPE); 15360e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString()); 15460e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard } 15560e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard 15660e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard public void testCancelDoubleSpace() { 157fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard final String STRING_TO_TYPE = "this "; 15860e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String EXPECTED_RESULT = "this "; 15960e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard type(STRING_TO_TYPE); 16060e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard type(Keyboard.CODE_DELETE); 16160e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString()); 162a02e703289d2704963f140c44d630dcc0a65e34aJean Chalard } 16341df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard 16441df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard public void testBackspaceAtStartAfterAutocorrect() { 16541df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final String STRING_TO_TYPE = "tgis "; 16641df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final String EXPECTED_RESULT = "this "; 16741df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final int NEW_CURSOR_POSITION = 0; 16841df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard type(STRING_TO_TYPE); 16941df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 17041df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION); 17141df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); 17241df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard type(Keyboard.CODE_DELETE); 173fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard assertEquals("auto correct then move cursor to start of line then backspace", 17441df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard EXPECTED_RESULT, mTextView.getText().toString()); 17560e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard } 1769184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard 1779184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard public void testAutoCorrectThenMoveCursorThenBackspace() { 1789184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final String STRING_TO_TYPE = "and tgis "; 1799184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final String EXPECTED_RESULT = "andthis "; 1809184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final int NEW_CURSOR_POSITION = STRING_TO_TYPE.indexOf('t'); 1819184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard type(STRING_TO_TYPE); 1829184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 1839184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION); 1849184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard mLatinIME.onUpdateSelection(0, 0, NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); 1859184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard type(Keyboard.CODE_DELETE); 186fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard assertEquals("auto correct then move cursor then backspace", 1879184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard EXPECTED_RESULT, mTextView.getText().toString()); 1889184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard } 189cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 190cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testNoSpaceAfterManualPick() { 191cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD_TO_TYPE = "this"; 192cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = WORD_TO_TYPE; 193cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD_TO_TYPE); 1949bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_TYPE); 195cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("no space after manual pick", EXPECTED_RESULT, 196cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard mTextView.getText().toString()); 197cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 198cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 199cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenType() { 200cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 201cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = "is"; 202cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this is"; 203cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2049bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 205cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 206cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString()); 207cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 208cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 209cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenSeparator() { 210cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 211cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = "!"; 212cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this!"; 213cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2149bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 215cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 216cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString()); 217cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 218cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 219f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard public void testManualPickThenStripperThenPick() { 220f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String WORD_TO_TYPE = "this"; 221f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String STRIPPER = "\n"; 222f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String EXPECTED_RESULT = "this\nthis"; 223f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(WORD_TO_TYPE); 224f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard pickSuggestionManually(0, WORD_TO_TYPE); 225f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(STRIPPER); 226f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(WORD_TO_TYPE); 227f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard pickSuggestionManually(0, WORD_TO_TYPE); 228f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard assertEquals("manual pick then \\n then manual pick", EXPECTED_RESULT, 229f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard mTextView.getText().toString()); 230f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard } 231f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard 232cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenSpaceThenType() { 233cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 234cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = " is"; 235cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this is"; 236cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2379bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 238cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 239845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard assertEquals("manual pick then space then type", EXPECTED_RESULT, 240845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard mTextView.getText().toString()); 241845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard } 242845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard 243845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard public void testManualPickThenManualPick() { 244845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String WORD1_TO_TYPE = "this"; 245845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String WORD2_TO_PICK = "is"; 246845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String EXPECTED_RESULT = "this is"; 247845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard type(WORD1_TO_TYPE); 2489bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 249845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // Here we fake picking a word through bigram prediction. This test is taking 250845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // advantage of the fact that Latin IME blindly trusts the caller of #pickSuggestionManually 251845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // to actually pass the right string. 2529bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(1, WORD2_TO_PICK); 253845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard assertEquals("manual pick then manual pick", EXPECTED_RESULT, 254845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard mTextView.getText().toString()); 255845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard } 256845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard 257825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard public void testDeleteWholeComposingWord() { 258825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard final String WORD_TO_TYPE = "this"; 259825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard type(WORD_TO_TYPE); 260825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard for (int i = 0; i < WORD_TO_TYPE.length(); ++i) { 261825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard type(Keyboard.CODE_DELETE); 262825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard } 263825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard assertEquals("delete whole composing word", "", mTextView.getText().toString()); 264825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard } 2659159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // TODO: Add some tests for non-BMP characters 26683c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard} 267