InputLogicTests.java revision 516b63db2866f144a00ec7e1e6c29cb0865f5ff3
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 198592ed408e8e81138172eefe2df28f00807a1e1fJean Chalardpublic class InputLogicTests extends InputTestsBase { 20f717c5685e3299349d5abe1ecc7d13446b9779bcJean Chalard 2183c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard public void testTypeWord() { 221e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String WORD_TO_TYPE = "abcd"; 231e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(WORD_TO_TYPE); 241e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard assertEquals("type word", WORD_TO_TYPE, mTextView.getText().toString()); 2583c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard } 2683c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 2783c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard public void testPickSuggestionThenBackspace() { 289159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard final String WORD_TO_TYPE = "this"; 29f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thi"; 301e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(WORD_TO_TYPE); 319bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_TYPE); 329159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 33240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 349159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard assertEquals("press suggestion then backspace", EXPECTED_RESULT, 359159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mTextView.getText().toString()); 369159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard } 379159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard 38bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testPickAutoCorrectionThenBackspace() { 39bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_TYPE = "tgis"; 40bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_PICK = "this"; 41f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thi"; 42bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(WORD_TO_TYPE); 43bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // Choose the auto-correction, which is always in position 0. For "tgis", the 44bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // auto-correction should be "this". 459bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_PICK); 46bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 47bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", WORD_TO_PICK, 48bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 49240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 50bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT, 51bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 52bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 53bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 549159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard public void testPickTypedWordOverAutoCorrectionThenBackspace() { 559159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard final String WORD_TO_TYPE = "tgis"; 56f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "tgi"; 579159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard type(WORD_TO_TYPE); 589159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // Choose the typed word, which should be in position 1 (because position 0 should 599159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // be occupied by the "this" auto-correction, as checked by testAutoCorrect()) 609bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(1, WORD_TO_TYPE); 619159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 62bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick typed word over auto-correction then backspace", WORD_TO_TYPE, 63bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 64240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 659159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard assertEquals("pick typed word over auto-correction then backspace", EXPECTED_RESULT, 661e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mTextView.getText().toString()); 6783c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard } 6883c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard 69bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testPickDifferentSuggestionThenBackspace() { 70bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_TYPE = "tgis"; 71bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String WORD_TO_PICK = "thus"; 72f83a6821bbf3863415378ea39d3b705954318e41Jean Chalard final String EXPECTED_RESULT = "thu"; 73bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(WORD_TO_TYPE); 74bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // Choose the second suggestion, which should be in position 2 and should be "thus" 75bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard // when "tgis is typed. 769bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(2, WORD_TO_PICK); 77bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, WORD_TO_TYPE.length(), WORD_TO_TYPE.length(), -1, -1); 78bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick different suggestion then backspace", WORD_TO_PICK, 79bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 80240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 81bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("pick different suggestion then backspace", EXPECTED_RESULT, 82bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 83bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 84bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 851e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard public void testDeleteSelection() { 861e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String STRING_TO_TYPE = "some text delete me some text"; 872752287c425b9be87800136bd616ee63940caaacJean Chalard final int typedLength = STRING_TO_TYPE.length(); 881e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final int SELECTION_START = 10; 891e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final int SELECTION_END = 19; 901e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard final String EXPECTED_RESULT = "some text some text"; 911e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard type(STRING_TO_TYPE); 921e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // There is no IMF to call onUpdateSelection for us so we must do it by hand. 931e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // Send once to simulate the cursor actually responding to the move caused by typing. 941e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // This is necessary because LatinIME is bookkeeping to avoid confusing a real cursor 951e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // move with a move triggered by LatinIME inputting stuff. 962752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); 971e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard mInputConnection.setSelection(SELECTION_START, SELECTION_END); 981e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard // And now we simulate the user actually selecting some text. 992752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 1002752287c425b9be87800136bd616ee63940caaacJean Chalard SELECTION_START, SELECTION_END, -1, -1); 101240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 1021e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard assertEquals("delete selection", EXPECTED_RESULT, mTextView.getText().toString()); 103516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard } 104516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard 105516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard public void testDeleteSelectionTwice() { 106516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard final String STRING_TO_TYPE = "some text delete me some text"; 107516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard final int typedLength = STRING_TO_TYPE.length(); 108516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard final int SELECTION_START = 10; 109516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard final int SELECTION_END = 19; 110516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard final String EXPECTED_RESULT = "some text some text"; 111516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard type(STRING_TO_TYPE); 112516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard // There is no IMF to call onUpdateSelection for us so we must do it by hand. 113516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard // Send once to simulate the cursor actually responding to the move caused by typing. 114516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard // This is necessary because LatinIME is bookkeeping to avoid confusing a real cursor 115516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard // move with a move triggered by LatinIME inputting stuff. 116516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); 117516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard mInputConnection.setSelection(SELECTION_START, SELECTION_END); 118516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard // And now we simulate the user actually selecting some text. 119516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 120516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard SELECTION_START, SELECTION_END, -1, -1); 121516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard type(Constants.CODE_DELETE); 122516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard type(Constants.CODE_DELETE); 123516b63db2866f144a00ec7e1e6c29cb0865f5ff3Jean Chalard assertEquals("delete selection twice", EXPECTED_RESULT, mTextView.getText().toString()); 1241e4684ad24914cde713980bb4174810bbf8bae10Jean Chalard } 1250bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard 1260bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard public void testAutoCorrect() { 1270bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard final String STRING_TO_TYPE = "tgis "; 1280bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard final String EXPECTED_RESULT = "this "; 1290bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard type(STRING_TO_TYPE); 1300bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard assertEquals("simple auto-correct", EXPECTED_RESULT, mTextView.getText().toString()); 131bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 132bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 133bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testAutoCorrectWithPeriod() { 134bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String STRING_TO_TYPE = "tgis."; 135bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String EXPECTED_RESULT = "this."; 136bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(STRING_TO_TYPE); 137bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("auto-correct with period", EXPECTED_RESULT, mTextView.getText().toString()); 138bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard } 139bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard 140bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard public void testAutoCorrectWithPeriodThenRevert() { 141bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String STRING_TO_TYPE = "tgis."; 142bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard final String EXPECTED_RESULT = "tgis."; 143bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard type(STRING_TO_TYPE); 144bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 145240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 146bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard assertEquals("auto-correct with period then revert", EXPECTED_RESULT, 147bb15f92d4f80677587fae87fa2dd7a29ec465b4cJean Chalard mTextView.getText().toString()); 1480bfe359ee42af9c4487ce56acf42c74a2510980dJean Chalard } 14960e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard 1500e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard public void testAutoCorrectWithSpaceThenRevert() { 1510e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String STRING_TO_TYPE = "tgis "; 1520e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String EXPECTED_RESULT = "tgis "; 1530e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(STRING_TO_TYPE); 1540e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 155240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 1560e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard assertEquals("auto-correct with space then revert", EXPECTED_RESULT, 1570e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mTextView.getText().toString()); 1580e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard } 1590e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard 1600e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard public void testAutoCorrectToSelfDoesNotRevert() { 1610e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String STRING_TO_TYPE = "this "; 1620e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard final String EXPECTED_RESULT = "this"; 1630e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard type(STRING_TO_TYPE); 1640e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mLatinIME.onUpdateSelection(0, 0, STRING_TO_TYPE.length(), STRING_TO_TYPE.length(), -1, -1); 165240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 1660e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard assertEquals("auto-correct with space does not revert", EXPECTED_RESULT, 1670e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard mTextView.getText().toString()); 1680e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard } 1690e9e7e337defe97d4ede8c59d0e925f5401f9292Jean Chalard 17060e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard public void testDoubleSpace() { 17160e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String STRING_TO_TYPE = "this "; 17260e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String EXPECTED_RESULT = "this. "; 17360e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard type(STRING_TO_TYPE); 17460e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString()); 17560e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard } 17660e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard 17760e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard public void testCancelDoubleSpace() { 178fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard final String STRING_TO_TYPE = "this "; 17960e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard final String EXPECTED_RESULT = "this "; 18060e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard type(STRING_TO_TYPE); 181240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 18260e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard assertEquals("double space make a period", EXPECTED_RESULT, mTextView.getText().toString()); 183a02e703289d2704963f140c44d630dcc0a65e34aJean Chalard } 18441df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard 18541df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard public void testBackspaceAtStartAfterAutocorrect() { 18641df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final String STRING_TO_TYPE = "tgis "; 1872752287c425b9be87800136bd616ee63940caaacJean Chalard final int typedLength = STRING_TO_TYPE.length(); 18841df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final String EXPECTED_RESULT = "this "; 18941df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard final int NEW_CURSOR_POSITION = 0; 19041df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard type(STRING_TO_TYPE); 1912752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); 19241df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION); 1932752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 1942752287c425b9be87800136bd616ee63940caaacJean Chalard NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); 195240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 196fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard assertEquals("auto correct then move cursor to start of line then backspace", 19741df8a98fd0b89de87c7531903262c75dc7e505bJean Chalard EXPECTED_RESULT, mTextView.getText().toString()); 19860e7718462a8c7b025ac8375b585c1da3db1e1feJean Chalard } 1999184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard 2009184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard public void testAutoCorrectThenMoveCursorThenBackspace() { 2019184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final String STRING_TO_TYPE = "and tgis "; 2022752287c425b9be87800136bd616ee63940caaacJean Chalard final int typedLength = STRING_TO_TYPE.length(); 2039184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final String EXPECTED_RESULT = "andthis "; 2049184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard final int NEW_CURSOR_POSITION = STRING_TO_TYPE.indexOf('t'); 2059184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard type(STRING_TO_TYPE); 2062752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(0, 0, typedLength, typedLength, -1, -1); 2079184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard mInputConnection.setSelection(NEW_CURSOR_POSITION, NEW_CURSOR_POSITION); 2082752287c425b9be87800136bd616ee63940caaacJean Chalard mLatinIME.onUpdateSelection(typedLength, typedLength, 2092752287c425b9be87800136bd616ee63940caaacJean Chalard NEW_CURSOR_POSITION, NEW_CURSOR_POSITION, -1, -1); 210240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 211fb684cebe8f5dac1bdb6cfa7085a07ddc66acedeJean Chalard assertEquals("auto correct then move cursor then backspace", 2129184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard EXPECTED_RESULT, mTextView.getText().toString()); 2139184d8b2352e11a25026ea9eed7f404836a7d476Jean Chalard } 214cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 215cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testNoSpaceAfterManualPick() { 216cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD_TO_TYPE = "this"; 217cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = WORD_TO_TYPE; 218cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD_TO_TYPE); 2199bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD_TO_TYPE); 220cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("no space after manual pick", EXPECTED_RESULT, 221cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard mTextView.getText().toString()); 222cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 223cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 224cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenType() { 225cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 226cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = "is"; 227cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this is"; 228cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2299bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 230cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 231cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("manual pick then type", EXPECTED_RESULT, mTextView.getText().toString()); 232cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 233cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 234cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenSeparator() { 235cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 236cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = "!"; 237cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this!"; 238cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2399bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 240cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 241cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard assertEquals("manual pick then separator", EXPECTED_RESULT, mTextView.getText().toString()); 242cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard } 243cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard 244f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard public void testManualPickThenStripperThenPick() { 245f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String WORD_TO_TYPE = "this"; 246f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String STRIPPER = "\n"; 247f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard final String EXPECTED_RESULT = "this\nthis"; 248f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(WORD_TO_TYPE); 249f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard pickSuggestionManually(0, WORD_TO_TYPE); 250f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(STRIPPER); 251f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard type(WORD_TO_TYPE); 252f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard pickSuggestionManually(0, WORD_TO_TYPE); 253f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard assertEquals("manual pick then \\n then manual pick", EXPECTED_RESULT, 254f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard mTextView.getText().toString()); 255f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard } 256f68fe7a9c9262a3591eeba61f34a91855a34c930Jean Chalard 257cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard public void testManualPickThenSpaceThenType() { 258cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD1_TO_TYPE = "this"; 259cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String WORD2_TO_TYPE = " is"; 260cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard final String EXPECTED_RESULT = "this is"; 261cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD1_TO_TYPE); 2629bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 263cca2183f5a9174b94e39e68fab9bc749c86743efJean Chalard type(WORD2_TO_TYPE); 264845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard assertEquals("manual pick then space then type", EXPECTED_RESULT, 265845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard mTextView.getText().toString()); 266845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard } 267845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard 268845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard public void testManualPickThenManualPick() { 269845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String WORD1_TO_TYPE = "this"; 270845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String WORD2_TO_PICK = "is"; 271845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard final String EXPECTED_RESULT = "this is"; 272845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard type(WORD1_TO_TYPE); 2739bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(0, WORD1_TO_TYPE); 274845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // Here we fake picking a word through bigram prediction. This test is taking 275845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // advantage of the fact that Latin IME blindly trusts the caller of #pickSuggestionManually 276845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard // to actually pass the right string. 2779bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge pickSuggestionManually(1, WORD2_TO_PICK); 278845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard assertEquals("manual pick then manual pick", EXPECTED_RESULT, 279845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard mTextView.getText().toString()); 280845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard } 281845b24d9d31072b98958c557366617ad1c34f1b7Jean Chalard 282825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard public void testDeleteWholeComposingWord() { 283825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard final String WORD_TO_TYPE = "this"; 284825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard type(WORD_TO_TYPE); 285825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard for (int i = 0; i < WORD_TO_TYPE.length(); ++i) { 286240871ecafde7834ebb4270cd7758fc904a5f3a7Tadashi G. Takaoka type(Constants.CODE_DELETE); 287825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard } 288825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard assertEquals("delete whole composing word", "", mTextView.getText().toString()); 289825e2bbd910cce3055a4ca808d3744bc0b2ceddaJean Chalard } 2909159b9953d857de83ae2f90a121fcd259f5ee01dJean Chalard // TODO: Add some tests for non-BMP characters 29183c72d1dae7e91ba8ae50d79b11b1c0dd67451c2Jean Chalard} 292