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
22c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalardimport com.android.inputmethod.latin.suggestions.SuggestionStripView;
23c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard
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);
79c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
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
92c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard    public void testPredictions() {
93c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        final String WORD_TO_TYPE = "Barack ";
94c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        changeKeyboardLocaleAndDictLocale("th", "en_US");
95c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        type(WORD_TO_TYPE);
96c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        sleep(DELAY_TO_WAIT_FOR_PREDICTIONS);
97c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        runMessages();
98c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        // Make sure there is no space
99c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        assertEquals("predictions in lang without spaces", "Barack",
100c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard                mEditText.getText().toString());
101c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        // Test the first prediction is displayed
102c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard        assertEquals("predictions in lang without spaces", "Obama",
103c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard                mLatinIME.getFirstSuggestedWord());
104c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard    }
105c239a34262358e51aedb15f2e315bbe9bcd57c4bJean Chalard}
106