am 7d146cdb: am cd6ef9a8: Indroduce SuggestedWords#getTypedWordInfoOrNull

* commit '7d146cdbe86692f153fb5b7f781f701a8c04050d':
  Indroduce SuggestedWords#getTypedWordInfoOrNull
This commit is contained in:
Yohei Yukawa 2014-08-25 08:25:24 +00:00 committed by Android Git Automerger
commit c06c6e42ad
2 changed files with 82 additions and 21 deletions

View file

@ -19,6 +19,7 @@ package com.android.inputmethod.latin;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.CompletionInfo;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.define.DebugFlags; import com.android.inputmethod.latin.define.DebugFlags;
import com.android.inputmethod.latin.utils.StringUtils; import com.android.inputmethod.latin.utils.StringUtils;
@ -420,4 +421,18 @@ public class SuggestedWords {
mWillAutoCorrect, mIsObsoleteSuggestions, mIsPrediction, mWillAutoCorrect, mIsObsoleteSuggestions, mIsPrediction,
INPUT_STYLE_TAIL_BATCH); 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;
}
} }

View file

@ -23,24 +23,49 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Locale; import java.util.Locale;
import java.util.Random;
@SmallTest @SmallTest
public class SuggestedWordsTests extends AndroidTestCase { public class SuggestedWordsTests extends AndroidTestCase {
public void testGetSuggestedWordsExcludingTypedWord() {
final String TYPED_WORD = "typed"; /**
final int TYPED_WORD_FREQ = 5; * Helper method to create a dummy {@link SuggestedWordInfo} with specifying
final int NUMBER_OF_ADDED_SUGGESTIONS = 5; * {@link SuggestedWordInfo#KIND_TYPED}.
final ArrayList<SuggestedWordInfo> list = new ArrayList<>(); *
list.add(new SuggestedWordInfo(TYPED_WORD, TYPED_WORD_FREQ, * @param word the word to be used to create {@link SuggestedWordInfo}.
SuggestedWordInfo.KIND_TYPED, null /* sourceDict */, * @return a new instance of {@link SuggestedWordInfo}.
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, */
SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */)); private static SuggestedWordInfo createTypedWordInfo(final String word) {
for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) { // Use 100 as the frequency because the numerical value does not matter as
list.add(new SuggestedWordInfo("" + i, 1, SuggestedWordInfo.KIND_CORRECTION, // long as it's > 1 and < INT_MAX.
return new SuggestedWordInfo(word, 100 /* score */,
SuggestedWordInfo.KIND_TYPED,
null /* sourceDict */, null /* sourceDict */,
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */)); 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 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)));
} }
final SuggestedWords words = new SuggestedWords( final SuggestedWords words = new SuggestedWords(
@ -65,20 +90,10 @@ public class SuggestedWordsTests extends AndroidTestCase {
assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION)); assertTrue(wordsWithoutTyped.getInfo(0).isKindOf(SuggestedWordInfo.KIND_CORRECTION));
} }
// 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 // Helper for testGetTransformedWordInfo
private SuggestedWordInfo transformWordInfo(final String info, private SuggestedWordInfo transformWordInfo(final String info,
final int trailingSingleQuotesCount) { final int trailingSingleQuotesCount) {
final SuggestedWordInfo suggestedWordInfo = createWordInfo(info); final SuggestedWordInfo suggestedWordInfo = createTypedWordInfo(info);
final SuggestedWordInfo returnedWordInfo = final SuggestedWordInfo returnedWordInfo =
Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo, Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo,
Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */, Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */,
@ -102,4 +117,35 @@ public class SuggestedWordsTests extends AndroidTestCase {
result = transformWordInfo("didn't", 3); result = transformWordInfo("didn't", 3);
assertEquals(result.mWord, "didn't''"); 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());
}
} }