Home | History | Annotate | Download | only in latin
      1 /*
      2  * Copyright (C) 2013 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.latin;
     18 
     19 import android.test.AndroidTestCase;
     20 import android.test.suitebuilder.annotation.SmallTest;
     21 
     22 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
     23 
     24 import java.util.ArrayList;
     25 import java.util.Locale;
     26 
     27 @SmallTest
     28 public class SuggestedWordsTests extends AndroidTestCase {
     29 
     30     /**
     31      * Helper method to create a dummy {@link SuggestedWordInfo} with specifying
     32      * {@link SuggestedWordInfo#KIND_TYPED}.
     33      *
     34      * @param word the word to be used to create {@link SuggestedWordInfo}.
     35      * @return a new instance of {@link SuggestedWordInfo}.
     36      */
     37     private static SuggestedWordInfo createTypedWordInfo(final String word) {
     38         // Use 100 as the frequency because the numerical value does not matter as
     39         // long as it's > 1 and < INT_MAX.
     40         return new SuggestedWordInfo(word, "" /* prevWordsContext */, 100 /* score */,
     41                 SuggestedWordInfo.KIND_TYPED,
     42                 null /* sourceDict */,
     43                 SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
     44                 1 /* autoCommitFirstWordConfidence */);
     45     }
     46 
     47     /**
     48      * Helper method to create a dummy {@link SuggestedWordInfo} with specifying
     49      * {@link SuggestedWordInfo#KIND_CORRECTION}.
     50      *
     51      * @param word the word to be used to create {@link SuggestedWordInfo}.
     52      * @return a new instance of {@link SuggestedWordInfo}.
     53      */
     54     private static SuggestedWordInfo createCorrectionWordInfo(final String word) {
     55         return new SuggestedWordInfo(word, "" /* prevWordsContext */, 1 /* score */,
     56                 SuggestedWordInfo.KIND_CORRECTION,
     57                 null /* sourceDict */,
     58                 SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
     59                 SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */);
     60     }
     61 
     62     private static ArrayList<SuggestedWordInfo> createCorrectionWordInfos(final String... words) {
     63         final ArrayList<SuggestedWordInfo> infos = new ArrayList<>();
     64         for (final String word : words) {
     65             infos.add(createCorrectionWordInfo(word));
     66         }
     67         return infos;
     68     }
     69 
     70     // Helper for testGetTransformedWordInfo
     71     private static SuggestedWordInfo transformWordInfo(final String info,
     72             final int trailingSingleQuotesCount) {
     73         final SuggestedWordInfo suggestedWordInfo = createTypedWordInfo(info);
     74         final SuggestedWordInfo returnedWordInfo =
     75                 Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo,
     76                 Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */,
     77                 trailingSingleQuotesCount);
     78         assertEquals(suggestedWordInfo.mAutoCommitFirstWordConfidence,
     79                 returnedWordInfo.mAutoCommitFirstWordConfidence);
     80         return returnedWordInfo;
     81     }
     82 
     83     public void testRemoveDupesNoDupes() {
     84         final ArrayList<SuggestedWordInfo> infos = createCorrectionWordInfos("a", "c");
     85         assertEquals(-1, SuggestedWordInfo.removeDups("b", infos));
     86         assertEquals(2, infos.size());
     87     }
     88 
     89     public void testRemoveDupesTypedWordNotDupe() {
     90         final ArrayList<SuggestedWordInfo> infos = createCorrectionWordInfos("a", "a", "c");
     91         assertEquals(-1, SuggestedWordInfo.removeDups("b", infos));
     92         assertEquals(2, infos.size());
     93     }
     94 
     95     public void testRemoveDupesTypedWordOnlyDupe() {
     96         final ArrayList<SuggestedWordInfo> infos = createCorrectionWordInfos("a", "b", "c");
     97         assertEquals(1, SuggestedWordInfo.removeDups("b", infos));
     98         assertEquals(2, infos.size());
     99     }
    100 
    101     public void testRemoveDupesTypedWordNotOnlyDupe() {
    102         final ArrayList<SuggestedWordInfo> infos = createCorrectionWordInfos("a", "b", "b", "c");
    103         assertEquals(1, SuggestedWordInfo.removeDups("b", infos));
    104         assertEquals(2, infos.size());
    105     }
    106 
    107     public void testGetTransformedSuggestedWordInfo() {
    108         SuggestedWordInfo result = transformWordInfo("word", 0);
    109         assertEquals(result.mWord, "word");
    110         result = transformWordInfo("word", 1);
    111         assertEquals(result.mWord, "word'");
    112         result = transformWordInfo("word", 3);
    113         assertEquals(result.mWord, "word'''");
    114         result = transformWordInfo("didn't", 0);
    115         assertEquals(result.mWord, "didn't");
    116         result = transformWordInfo("didn't", 1);
    117         assertEquals(result.mWord, "didn't");
    118         result = transformWordInfo("didn't", 3);
    119         assertEquals(result.mWord, "didn't''");
    120     }
    121 
    122     public void testGetTypedWordInfoOrNull() {
    123         final String TYPED_WORD = "typed";
    124         final SuggestedWordInfo TYPED_WORD_INFO = createTypedWordInfo(TYPED_WORD);
    125         final int NUMBER_OF_ADDED_SUGGESTIONS = 5;
    126         final ArrayList<SuggestedWordInfo> list = new ArrayList<>();
    127         list.add(TYPED_WORD_INFO);
    128         for (int i = 0; i < NUMBER_OF_ADDED_SUGGESTIONS; ++i) {
    129             list.add(createCorrectionWordInfo(Integer.toString(i)));
    130         }
    131 
    132         // Make sure getTypedWordInfoOrNull() returns non-null object.
    133         final SuggestedWords wordsWithTypedWord = new SuggestedWords(
    134                 list, null /* rawSuggestions */,
    135                 TYPED_WORD_INFO,
    136                 false /* typedWordValid */,
    137                 false /* willAutoCorrect */,
    138                 false /* isObsoleteSuggestions */,
    139                 SuggestedWords.INPUT_STYLE_NONE,
    140                 SuggestedWords.NOT_A_SEQUENCE_NUMBER);
    141         final SuggestedWordInfo typedWord = wordsWithTypedWord.getTypedWordInfoOrNull();
    142         assertNotNull(typedWord);
    143         assertEquals(TYPED_WORD, typedWord.mWord);
    144 
    145         // Make sure getTypedWordInfoOrNull() returns null when no typed word.
    146         list.remove(0);
    147         final SuggestedWords wordsWithoutTypedWord = new SuggestedWords(
    148                 list, null /* rawSuggestions */,
    149                 null /* typedWord */,
    150                 false /* typedWordValid */,
    151                 false /* willAutoCorrect */,
    152                 false /* isObsoleteSuggestions */,
    153                 SuggestedWords.INPUT_STYLE_NONE,
    154                 SuggestedWords.NOT_A_SEQUENCE_NUMBER);
    155         assertNull(wordsWithoutTypedWord.getTypedWordInfoOrNull());
    156 
    157         // Make sure getTypedWordInfoOrNull() returns null.
    158         assertNull(SuggestedWords.getEmptyInstance().getTypedWordInfoOrNull());
    159 
    160         final SuggestedWords emptySuggestedWords = new SuggestedWords(
    161                 new ArrayList<SuggestedWordInfo>(), null /* rawSuggestions */,
    162                 null /* typedWord */,
    163                 false /* typedWordValid */,
    164                 false /* willAutoCorrect */,
    165                 false /* isObsoleteSuggestions */,
    166                 SuggestedWords.INPUT_STYLE_NONE,
    167                 SuggestedWords.NOT_A_SEQUENCE_NUMBER);
    168         assertNull(emptySuggestedWords.getTypedWordInfoOrNull());
    169 
    170         assertNull(SuggestedWords.getEmptyInstance().getTypedWordInfoOrNull());
    171     }
    172 }
    173