aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java15
-rw-r--r--tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java88
2 files changed, 82 insertions, 21 deletions
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index d7693af41..38fcb683d 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import android.text.TextUtils;
import android.view.inputmethod.CompletionInfo;
+import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.utils.StringUtils;
@@ -420,4 +421,18 @@ public class SuggestedWords {
mWillAutoCorrect, mIsObsoleteSuggestions, mIsPrediction,
INPUT_STYLE_TAIL_BATCH);
}
+
+ /**
+ * @return the {@link SuggestedWordInfo} which corresponds to the word that is originally
+ * typed by the user. Otherwise returns {@code null}. Note that gesture input is not
+ * considered to be a typed word.
+ */
+ @UsedForTesting
+ public SuggestedWordInfo getTypedWordInfoOrNull() {
+ if (this == EMPTY) {
+ return null;
+ }
+ final SuggestedWordInfo info = getInfo(SuggestedWords.INDEX_OF_TYPED_WORD);
+ return (info.getKind() == SuggestedWordInfo.KIND_TYPED) ? info : null;
+ }
}
diff --git a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
index a5f20b565..2785dec43 100644
--- a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
+++ b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java
@@ -23,24 +23,49 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.util.ArrayList;
import java.util.Locale;
-import java.util.Random;
@SmallTest
public class SuggestedWordsTests extends AndroidTestCase {
+
+ /**
+ * Helper method to create a dummy {@link SuggestedWordInfo} with specifying
+ * {@link SuggestedWordInfo#KIND_TYPED}.
+ *
+ * @param word the word to be used to create {@link SuggestedWordInfo}.
+ * @return a new instance of {@link SuggestedWordInfo}.
+ */
+ private static SuggestedWordInfo createTypedWordInfo(final String word) {
+ // Use 100 as the frequency because the numerical value does not matter as
+ // long as it's > 1 and < INT_MAX.
+ return new SuggestedWordInfo(word, 100 /* score */,
+ SuggestedWordInfo.KIND_TYPED,
+ null /* sourceDict */,
+ SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
+ 1 /* autoCommitFirstWordConfidence */);
+ }
+
+ /**
+ * Helper method to create a dummy {@link SuggestedWordInfo} with specifying
+ * {@link SuggestedWordInfo#KIND_CORRECTION}.
+ *
+ * @param word the word to be used to create {@link SuggestedWordInfo}.
+ * @return a new instance of {@link SuggestedWordInfo}.
+ */
+ private static SuggestedWordInfo createCorrectionWordInfo(final String word) {
+ return new SuggestedWordInfo(word, 1 /* score */,
+ SuggestedWordInfo.KIND_CORRECTION,
+ null /* sourceDict */,
+ SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
+ SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */);
+ }
+
public void testGetSuggestedWordsExcludingTypedWord() {
final String TYPED_WORD = "typed";
- final int TYPED_WORD_FREQ = 5;
final int NUMBER_OF_ADDED_SUGGESTIONS = 5;
final ArrayList<SuggestedWordInfo> list = new ArrayList<>();
- list.add(new SuggestedWordInfo(TYPED_WORD, TYPED_WORD_FREQ,
- SuggestedWordInfo.KIND_TYPED, null /* sourceDict */,
- SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
- SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */));
+ list.add(createTypedWordInfo(TYPED_WORD));
for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) {
- list.add(new SuggestedWordInfo("" + i, 1, SuggestedWordInfo.KIND_CORRECTION,
- null /* sourceDict */,
- SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
- SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */));
+ list.add(createCorrectionWordInfo(Integer.toString(i)));
}
final SuggestedWords words = new SuggestedWords(
@@ -66,19 +91,9 @@ public class SuggestedWordsTests extends AndroidTestCase {
}
// Helper for testGetTransformedWordInfo
- private SuggestedWordInfo createWordInfo(final String s) {
- // Use 100 as the frequency because the numerical value does not matter as
- // long as it's > 1 and < INT_MAX.
- return new SuggestedWordInfo(s, 100,
- SuggestedWordInfo.KIND_TYPED, null /* sourceDict */,
- SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
- new Random().nextInt(1000000) /* autoCommitFirstWordConfidence */);
- }
-
- // Helper for testGetTransformedWordInfo
private SuggestedWordInfo transformWordInfo(final String info,
final int trailingSingleQuotesCount) {
- final SuggestedWordInfo suggestedWordInfo = createWordInfo(info);
+ final SuggestedWordInfo suggestedWordInfo = createTypedWordInfo(info);
final SuggestedWordInfo returnedWordInfo =
Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo,
Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */,
@@ -102,4 +117,35 @@ public class SuggestedWordsTests extends AndroidTestCase {
result = transformWordInfo("didn't", 3);
assertEquals(result.mWord, "didn't''");
}
+
+ public void testGetTypedWordInfoOrNull() {
+ final String TYPED_WORD = "typed";
+ final int NUMBER_OF_ADDED_SUGGESTIONS = 5;
+ final ArrayList<SuggestedWordInfo> list = new ArrayList<>();
+ list.add(createTypedWordInfo(TYPED_WORD));
+ for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) {
+ list.add(createCorrectionWordInfo(Integer.toString(i)));
+ }
+
+ // Make sure getTypedWordInfoOrNull() returns non-null object.
+ final SuggestedWords wordsWithTypedWord = new SuggestedWords(
+ list, null /* rawSuggestions */,
+ false /* typedWordValid */,
+ false /* willAutoCorrect */,
+ false /* isObsoleteSuggestions */,
+ false /* isPrediction*/,
+ SuggestedWords.INPUT_STYLE_NONE);
+ final SuggestedWordInfo typedWord = wordsWithTypedWord.getTypedWordInfoOrNull();
+ assertNotNull(typedWord);
+ assertEquals(TYPED_WORD, typedWord.mWord);
+
+ // Make sure getTypedWordInfoOrNull() returns null.
+ final SuggestedWords wordsWithoutTypedWord =
+ wordsWithTypedWord.getSuggestedWordsExcludingTypedWord(
+ SuggestedWords.INPUT_STYLE_NONE);
+ assertNull(wordsWithoutTypedWord.getTypedWordInfoOrNull());
+
+ // Make sure getTypedWordInfoOrNull() returns null.
+ assertNull(SuggestedWords.EMPTY.getTypedWordInfoOrNull());
+ }
}