2012-03-23 05:22:47 +00:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2012 The Android Open Source Project
|
|
|
|
*
|
2013-02-12 07:15:47 +00:00
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
2012-03-23 05:22:47 +00:00
|
|
|
*
|
2013-02-12 07:15:47 +00:00
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
2012-03-23 05:22:47 +00:00
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
2013-02-12 07:15:47 +00:00
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
2012-03-23 05:22:47 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
package com.android.inputmethod.latin;
|
|
|
|
|
2013-12-18 07:53:54 +00:00
|
|
|
import android.provider.Settings.Secure;
|
2013-02-04 23:25:24 +00:00
|
|
|
import android.test.suitebuilder.annotation.LargeTest;
|
|
|
|
|
2012-04-16 04:03:23 +00:00
|
|
|
import com.android.inputmethod.latin.R;
|
|
|
|
|
2013-02-04 23:25:24 +00:00
|
|
|
@LargeTest
|
2012-03-23 05:22:47 +00:00
|
|
|
public class PunctuationTests extends InputTestsBase {
|
|
|
|
|
2012-04-16 04:03:23 +00:00
|
|
|
final String NEXT_WORD_PREDICTION_OPTION = "next_word_prediction";
|
|
|
|
|
2012-03-23 05:22:47 +00:00
|
|
|
public void testWordThenSpaceThenPunctuationFromStripTwice() {
|
|
|
|
final String WORD_TO_TYPE = "this ";
|
|
|
|
final String PUNCTUATION_FROM_STRIP = "!";
|
|
|
|
final String EXPECTED_RESULT = "this!! ";
|
2012-04-16 04:03:23 +00:00
|
|
|
final boolean defaultNextWordPredictionOption =
|
2012-06-20 22:00:45 +00:00
|
|
|
mLatinIME.getResources().getBoolean(R.bool.config_default_next_word_prediction);
|
2012-04-16 04:03:23 +00:00
|
|
|
final boolean previousNextWordPredictionOption =
|
|
|
|
setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, false,
|
|
|
|
defaultNextWordPredictionOption);
|
|
|
|
try {
|
|
|
|
mLatinIME.loadSettings();
|
|
|
|
type(WORD_TO_TYPE);
|
|
|
|
sleep(DELAY_TO_WAIT_FOR_UNDERLINE);
|
|
|
|
runMessages();
|
|
|
|
assertTrue("type word then type space should display punctuation strip",
|
|
|
|
mLatinIME.isShowingPunctuationList());
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
|
|
|
|
pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
|
2012-04-16 04:03:23 +00:00
|
|
|
assertEquals("type word then type space then punctuation from strip twice",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-04-16 04:03:23 +00:00
|
|
|
} finally {
|
|
|
|
setBooleanPreference(NEXT_WORD_PREDICTION_OPTION, previousNextWordPredictionOption,
|
|
|
|
defaultNextWordPredictionOption);
|
|
|
|
}
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testWordThenSpaceThenPunctuationFromKeyboardTwice() {
|
|
|
|
final String WORD_TO_TYPE = "this !!";
|
|
|
|
final String EXPECTED_RESULT = "this !!";
|
|
|
|
type(WORD_TO_TYPE);
|
|
|
|
assertEquals("manual pick then space then punctuation from keyboard twice", EXPECTED_RESULT,
|
2013-05-01 04:33:39 +00:00
|
|
|
mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManualPickThenPunctuationFromStripTwiceThenType() {
|
|
|
|
final String WORD1_TO_TYPE = "this";
|
|
|
|
final String WORD2_TO_TYPE = "is";
|
|
|
|
final String PUNCTUATION_FROM_STRIP = "!";
|
|
|
|
final String EXPECTED_RESULT = "this!! is";
|
|
|
|
type(WORD1_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD1_TO_TYPE);
|
|
|
|
pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
|
|
|
|
pickSuggestionManually(0, PUNCTUATION_FROM_STRIP);
|
2012-03-23 05:22:47 +00:00
|
|
|
type(WORD2_TO_TYPE);
|
|
|
|
assertEquals("pick word then pick punctuation twice then type", EXPECTED_RESULT,
|
2013-05-01 04:33:39 +00:00
|
|
|
mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManualPickThenManualPickWithPunctAtStart() {
|
|
|
|
final String WORD1_TO_TYPE = "this";
|
|
|
|
final String WORD2_TO_PICK = "!is";
|
|
|
|
final String EXPECTED_RESULT = "this!is";
|
|
|
|
type(WORD1_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD1_TO_TYPE);
|
|
|
|
pickSuggestionManually(1, WORD2_TO_PICK);
|
2012-03-23 05:22:47 +00:00
|
|
|
assertEquals("manual pick then manual pick a word with punct at start", EXPECTED_RESULT,
|
2013-05-01 04:33:39 +00:00
|
|
|
mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManuallyPickedWordThenColon() {
|
|
|
|
final String WORD_TO_TYPE = "this";
|
|
|
|
final String PUNCTUATION = ":";
|
|
|
|
final String EXPECTED_RESULT = "this:";
|
|
|
|
type(WORD_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD_TO_TYPE);
|
2012-03-23 05:22:47 +00:00
|
|
|
type(PUNCTUATION);
|
|
|
|
assertEquals("manually pick word then colon",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManuallyPickedWordThenOpenParen() {
|
|
|
|
final String WORD_TO_TYPE = "this";
|
|
|
|
final String PUNCTUATION = "(";
|
|
|
|
final String EXPECTED_RESULT = "this (";
|
|
|
|
type(WORD_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD_TO_TYPE);
|
2012-03-23 05:22:47 +00:00
|
|
|
type(PUNCTUATION);
|
|
|
|
assertEquals("manually pick word then open paren",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManuallyPickedWordThenCloseParen() {
|
|
|
|
final String WORD_TO_TYPE = "this";
|
|
|
|
final String PUNCTUATION = ")";
|
|
|
|
final String EXPECTED_RESULT = "this)";
|
|
|
|
type(WORD_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD_TO_TYPE);
|
2012-03-23 05:22:47 +00:00
|
|
|
type(PUNCTUATION);
|
|
|
|
assertEquals("manually pick word then close paren",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManuallyPickedWordThenSmiley() {
|
|
|
|
final String WORD_TO_TYPE = "this";
|
|
|
|
final String SPECIAL_KEY = ":-)";
|
|
|
|
final String EXPECTED_RESULT = "this :-)";
|
|
|
|
type(WORD_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD_TO_TYPE);
|
2012-03-23 05:22:47 +00:00
|
|
|
mLatinIME.onTextInput(SPECIAL_KEY);
|
|
|
|
assertEquals("manually pick word then press the smiley key",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testManuallyPickedWordThenDotCom() {
|
|
|
|
final String WORD_TO_TYPE = "this";
|
|
|
|
final String SPECIAL_KEY = ".com";
|
|
|
|
final String EXPECTED_RESULT = "this.com";
|
|
|
|
type(WORD_TO_TYPE);
|
2012-04-12 04:42:22 +00:00
|
|
|
pickSuggestionManually(0, WORD_TO_TYPE);
|
2012-03-23 05:22:47 +00:00
|
|
|
mLatinIME.onTextInput(SPECIAL_KEY);
|
|
|
|
assertEquals("manually pick word then press the .com key",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testTypeWordTypeDotThenPressDotCom() {
|
|
|
|
final String WORD_TO_TYPE = "this.";
|
|
|
|
final String SPECIAL_KEY = ".com";
|
|
|
|
final String EXPECTED_RESULT = "this.com";
|
|
|
|
type(WORD_TO_TYPE);
|
|
|
|
mLatinIME.onTextInput(SPECIAL_KEY);
|
|
|
|
assertEquals("type word type dot then press the .com key",
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testAutoCorrectionWithSingleQuoteInside() {
|
|
|
|
final String WORD_TO_TYPE = "you'f ";
|
|
|
|
final String EXPECTED_RESULT = "you'd ";
|
|
|
|
type(WORD_TO_TYPE);
|
2013-12-18 07:53:54 +00:00
|
|
|
assertEquals("auto-correction with single quote inside. ID = "
|
|
|
|
+ Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID)
|
|
|
|
+ " ; Suggestions = " + mLatinIME.getSuggestedWords(),
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void testAutoCorrectionWithSingleQuotesAround() {
|
|
|
|
final String WORD_TO_TYPE = "'tgis' ";
|
|
|
|
final String EXPECTED_RESULT = "'this' ";
|
|
|
|
type(WORD_TO_TYPE);
|
2013-12-18 07:53:54 +00:00
|
|
|
assertEquals("auto-correction with single quotes around. ID = "
|
|
|
|
+ Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID)
|
|
|
|
+ " ; Suggestions = " + mLatinIME.getSuggestedWords(),
|
2013-05-01 04:33:39 +00:00
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|
2014-01-17 01:40:05 +00:00
|
|
|
|
|
|
|
public void testAutoSpaceWithDoubleQuotes() {
|
|
|
|
final String STRING_TO_TYPE = "He said\"hello\"to me. I replied,\"hi\"."
|
|
|
|
+ "Then, 5\"passed. He said\"bye\"and left.";
|
|
|
|
final String EXPECTED_RESULT = "He said \"hello\" to me. I replied, \"hi\". "
|
|
|
|
+ "Then, 5\" passed. He said \"bye\" and left. \"";
|
|
|
|
// Split by double quote, so that we can type the double quotes individually.
|
|
|
|
for (final String partToType : STRING_TO_TYPE.split("\"")) {
|
|
|
|
// Split at word boundaries. This regexp means "anywhere that is preceded
|
|
|
|
// by a word character but not followed by a word character, OR that is not
|
|
|
|
// preceded by a word character but followed by a word character".
|
|
|
|
// We need to input word by word because auto-spaces are only active when
|
|
|
|
// manually picking or gesturing (which we can't simulate yet), but only words
|
|
|
|
// can be picked.
|
|
|
|
final String[] wordsToType = partToType.split("(?<=\\w)(?!\\w)|(?<!\\w)(?=\\w)");
|
|
|
|
for (final String wordToType : wordsToType) {
|
|
|
|
type(wordToType);
|
|
|
|
if (wordToType.matches("^\\w+$")) {
|
|
|
|
// Only pick selection if that was a word, because if that was not a word,
|
|
|
|
// then we don't have a composition.
|
|
|
|
pickSuggestionManually(0, wordToType);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
type("\"");
|
|
|
|
}
|
|
|
|
assertEquals("auto-space with double quotes",
|
|
|
|
EXPECTED_RESULT, mEditText.getText().toString());
|
|
|
|
}
|
2012-03-23 05:22:47 +00:00
|
|
|
}
|