10d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard/*
20d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard * Copyright (C) 2012 The Android Open Source Project
30d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard *
4ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
5ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * you may not use this file except in compliance with the License.
6ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * You may obtain a copy of the License at
70d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard *
8ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
90d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard *
100d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard * Unless required by applicable law or agreed to in writing, software
11ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
12ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * See the License for the specific language governing permissions and
14ce6bcdd1a547c9874f05a08074cafdfea16196d6Tadashi G. Takaoka * limitations under the License.
150d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard */
160d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
170d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalardpackage com.android.inputmethod.latin;
180d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
19b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaokaimport android.test.suitebuilder.annotation.LargeTest;
20b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaoka
219f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalardimport com.android.inputmethod.latin.R;
229f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard
23b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaoka@LargeTest
240d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalardpublic class PunctuationTests extends InputTestsBase {
250d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
269f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard    final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
279f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard
280d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testWordThenSpaceThenPunctuationFromStripTwice() {
290d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this ";
300d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String PUNCTUATION_FROM_STRIP = "!";
310d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this!! ";
329f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard        final boolean defaultNextWordPredictionOption =
3383f4a9866ab68ac452a57fa0c91d9fdf7aff8ddaJean Chalard                mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
349f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard        final boolean previousNextWordPredictionOption =
359f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard                setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, false,
369f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard                        defaultNextWordPredictionOption);
379f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard        try {
389f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            mLatinIME.loadSettings();
399f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            type(WORD_TO_TYPE);
409f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
419f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            runMessages();
429f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            assertTrue("type word then type space should display punctuation strip",
439f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard                    mLatinIME.isShowingPunctuationList());
449bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge            pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
459bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge            pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
469f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            assertEquals("type word then type space then punctuation from strip twice",
47d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                    EXPECTED_RESULT, mEditText.getText().toString());
489f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard        } finally {
499f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard            setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, previousNextWordPredictionOption,
509f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard                    defaultNextWordPredictionOption);
519f7392ea9d9313b276bda59ec488cd5f994c1894Jean Chalard        }
520d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
530d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
540d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testWordThenSpaceThenPunctuationFromKeyboardTwice() {
550d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this !!";
560d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this !!";
570d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
580d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manual pick then space then punctuation from keyboard twice", EXPECTED_RESULT,
59d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                mEditText.getText().toString());
600d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
610d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
620d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManualPickThenPunctuationFromStripTwiceThenType() {
630d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD1_TO_TYPE = "this";
640d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD2_TO_TYPE = "is";
650d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String PUNCTUATION_FROM_STRIP = "!";
660d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this!! is";
670d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD1_TO_TYPE);
689bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD1_TO_TYPE);
699bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
709bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
710d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD2_TO_TYPE);
720d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT,
73d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                mEditText.getText().toString());
740d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
750d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
760d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManualPickThenManualPickWithPunctAtStart() {
770d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD1_TO_TYPE = "this";
780d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD2_TO_PICK = "!is";
790d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this!is";
800d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD1_TO_TYPE);
819bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD1_TO_TYPE);
829bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(1, WORD2_TO_PICK);
830d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manual pick then manual pick a word with punct at start", EXPECTED_RESULT,
84d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                mEditText.getText().toString());
850d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
860d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
870d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManuallyPickedWordThenColon() {
880d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this";
890d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String PUNCTUATION = ":";
900d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this:";
910d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
929bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD_TO_TYPE);
930d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(PUNCTUATION);
940d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manually pick word then colon",
95d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
960d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
970d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
980d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManuallyPickedWordThenOpenParen() {
990d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this";
1000d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String PUNCTUATION = "(";
1010d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this (";
1020d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1039bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD_TO_TYPE);
1040d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(PUNCTUATION);
1050d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manually pick word then open paren",
106d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1070d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1080d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1090d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManuallyPickedWordThenCloseParen() {
1100d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this";
1110d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String PUNCTUATION = ")";
1120d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this)";
1130d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1149bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD_TO_TYPE);
1150d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(PUNCTUATION);
1160d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manually pick word then close paren",
117d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1180d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1190d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1200d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManuallyPickedWordThenSmiley() {
1210d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this";
1220d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String SPECIAL_KEY = ":-)";
1230d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this :-)";
1240d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1259bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD_TO_TYPE);
1260d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        mLatinIME.onTextInput(SPECIAL_KEY);
1270d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manually pick word then press the smiley key",
128d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1290d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1300d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1310d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testManuallyPickedWordThenDotCom() {
1320d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this";
1330d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String SPECIAL_KEY = ".com";
1340d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this.com";
1350d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1369bfb6202154e06d7156f2f374dd9359f1be4eb68Kurt Partridge        pickSuggestionManually(0, WORD_TO_TYPE);
1370d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        mLatinIME.onTextInput(SPECIAL_KEY);
1380d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("manually pick word then press the .com key",
139d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1400d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1410d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1420d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testTypeWordTypeDotThenPressDotCom() {
1430d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "this.";
1440d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String SPECIAL_KEY = ".com";
1450d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "this.com";
1460d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1470d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        mLatinIME.onTextInput(SPECIAL_KEY);
1480d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("type word type dot then press the .com key",
149d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1500d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1510d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1520d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testAutoCorrectionWithSingleQuoteInside() {
1530d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "you'f ";
1540d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "you'd ";
1550d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1560d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("auto-correction with single quote inside",
157d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1580d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1590d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard
1600d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    public void testAutoCorrectionWithSingleQuotesAround() {
1610d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String WORD_TO_TYPE = "'tgis' ";
1620d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        final String EXPECTED_RESULT = "'this' ";
1630d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        type(WORD_TO_TYPE);
1640d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard        assertEquals("auto-correction with single quotes around",
165d5781eef628c2cd4ac38029040746daa4679d637Satoshi Kataoka                EXPECTED_RESULT, mEditText.getText().toString());
1660d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard    }
1670d708b0cf5eb4334995dc67ba4ad38b18467faebJean Chalard}
168