• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010,2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * 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, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 
17 package com.android.inputmethod.latin;
18 import android.content.res.AssetFileDescriptor;
19 import android.content.res.Configuration;
20 
21 import com.android.inputmethod.latin.tests.R;
22 
23 import java.util.Locale;
24 
25 public class UserBigramSuggestTests extends SuggestTestsBase {
26     private static final int SUGGESTION_STARTS = 6;
27     private static final int MAX_DATA = 20;
28     private static final int DELETE_DATA = 10;
29 
30     private UserBigramSuggestHelper mHelper;
31 
32     @Override
setUp()33     protected void setUp() throws Exception {
34         super.setUp();
35         final AssetFileDescriptor dict = openTestRawResourceFd(R.raw.test);
36         final Locale locale = Locale.US;
37         mHelper = new UserBigramSuggestHelper(
38                 getContext(), mTestPackageFile, dict.getStartOffset(), dict.getLength(),
39                 MAX_DATA, DELETE_DATA,
40                 createKeyboardId(locale, Configuration.ORIENTATION_PORTRAIT), locale);
41     }
42 
43     /************************** Tests ************************/
44 
45     /**
46      * Test suggestion started at right time
47      */
testUserBigram()48     public void testUserBigram() {
49         for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair1);
50         for (int i = 0; i < (SUGGESTION_STARTS - 1); i++) mHelper.addToUserBigram(pair2);
51 
52         isInSuggestions("bigram", mHelper.searchUserBigramSuggestion("user", 'b', "bigram"));
53         isNotInSuggestions("platform",
54                 mHelper.searchUserBigramSuggestion("android", 'p', "platform"));
55     }
56 
57     /**
58      * Test loading correct (locale) bigrams
59      */
testOpenAndClose()60     public void testOpenAndClose() {
61         for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair1);
62         isInSuggestions("bigram in default locale",
63                 mHelper.searchUserBigramSuggestion("user", 'b', "bigram"));
64 
65         // change to fr_FR
66         mHelper.changeUserBigramLocale(Locale.FRANCE);
67         for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(pair3);
68         isInSuggestions("france in fr_FR",
69                 mHelper.searchUserBigramSuggestion("locale", 'f', "france"));
70         isNotInSuggestions("bigram in fr_FR",
71                 mHelper.searchUserBigramSuggestion("user", 'b', "bigram"));
72 
73         // change back to en_US
74         mHelper.changeUserBigramLocale(Locale.US);
75         isNotInSuggestions("france in en_US",
76                 mHelper.searchUserBigramSuggestion("locale", 'f', "france"));
77         isInSuggestions("bigram in en_US",
78                 mHelper.searchUserBigramSuggestion("user", 'b', "bigram"));
79     }
80 
81     /**
82      * Test data gets pruned when it is over maximum
83      */
testPruningData()84     public void testPruningData() {
85         for (int i = 0; i < SUGGESTION_STARTS; i++) mHelper.addToUserBigram(sentence0);
86         mHelper.flushUserBigrams();
87         isInSuggestions("world after several sentence 0",
88                 mHelper.searchUserBigramSuggestion("Hello", 'w', "world"));
89 
90         mHelper.addToUserBigram(sentence1);
91         mHelper.addToUserBigram(sentence2);
92         isInSuggestions("world after sentence 1 and 2",
93                 mHelper.searchUserBigramSuggestion("Hello", 'w', "world"));
94 
95         // pruning should happen
96         mHelper.addToUserBigram(sentence3);
97         mHelper.addToUserBigram(sentence4);
98 
99         // trying to reopen database to check pruning happened in database
100         mHelper.changeUserBigramLocale(Locale.US);
101         isNotInSuggestions("world after sentence 3 and 4",
102                 mHelper.searchUserBigramSuggestion("Hello", 'w', "world"));
103     }
104 
105     private static final String[] pair1 = {"user", "bigram"};
106     private static final String[] pair2 = {"android","platform"};
107     private static final String[] pair3 = {"locale", "france"};
108     private static final String sentence0 = "Hello world";
109     private static final String sentence1 = "This is a test for user input based bigram";
110     private static final String sentence2 = "It learns phrases that contain both dictionary and "
111         + "nondictionary words";
112     private static final String sentence3 = "This should give better suggestions than the previous "
113         + "version";
114     private static final String sentence4 = "Android stock keyboard is improving";
115 }
116