diff options
author | 2014-10-23 17:50:35 -0700 | |
---|---|---|
committer | 2014-11-13 14:21:38 -0800 | |
commit | 5365191a9d850362f41eedf3f95adb5c80cceb8f (patch) | |
tree | bc518473448b34fc635af0600d28dfefc3e36b62 /tests/src/com/android/inputmethod/latin | |
parent | b050b458dc1eac06412d116d6b57b849d3ccb06d (diff) | |
download | latinime-5365191a9d850362f41eedf3f95adb5c80cceb8f.tar.gz latinime-5365191a9d850362f41eedf3f95adb5c80cceb8f.tar.xz latinime-5365191a9d850362f41eedf3f95adb5c80cceb8f.zip |
Implement UserHistoryDictionary for each user account.
UserHistoryDictionary currently uses locale to determine the
UserHistoryDictionary on the filesystem. With this change we
use the account name as well. Thus each UserHistoryDictionary
would following the following spec:
UserHistoryDictionary.<locale>.<account>.dict.
In case no account is selected, we default to the existing
spec:
UserHistoryDictionary.<locale>.dict
Example
UserHistoryDictionary.en_US.testaccount@example.com.dict
Bug: 18104749
Change-Id: Iab031e166b55cf2ded68275a7e9be22475737b37
Diffstat (limited to 'tests/src/com/android/inputmethod/latin')
-rw-r--r-- | tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java | 64 |
1 files changed, 48 insertions, 16 deletions
diff --git a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java index 813a71239..a84df28c9 100644 --- a/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java +++ b/tests/src/com/android/inputmethod/latin/personalization/UserHistoryDictionaryTests.java @@ -16,6 +16,8 @@ package com.android.inputmethod.latin.personalization; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; @@ -24,6 +26,7 @@ import com.android.inputmethod.latin.ExpandableBinaryDictionary; import com.android.inputmethod.latin.NgramContext; import com.android.inputmethod.latin.NgramContext.WordInfo; import com.android.inputmethod.latin.common.FileUtils; +import com.android.inputmethod.latin.settings.LocalSettingsConstants; import com.android.inputmethod.latin.utils.BinaryDictionaryUtils; import com.android.inputmethod.latin.utils.DistracterFilter; @@ -36,6 +39,8 @@ import java.util.Locale; import java.util.Random; import java.util.concurrent.TimeUnit; +import javax.annotation.Nullable; + /** * Unit tests for UserHistoryDictionary */ @@ -44,6 +49,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { private static final String TAG = UserHistoryDictionaryTests.class.getSimpleName(); private static final int WAIT_FOR_WRITING_FILE_IN_MILLISECONDS = 3000; private static final String TEST_LOCALE_PREFIX = "test_"; + private static final String TEST_ACCOUNT = "account@example.com"; private static final String[] CHARACTERS = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", @@ -52,15 +58,18 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { private int mCurrentTime = 0; + private SharedPreferences mPrefs; + private String mLastKnownAccount = null; + private void removeAllTestDictFiles() { final Locale dummyLocale = new Locale(TEST_LOCALE_PREFIX); - final String dictName = ExpandableBinaryDictionary.getDictName( - UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */); + final String dictName = UserHistoryDictionary.getUserHistoryDictName( + UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext()); final File dictFile = ExpandableBinaryDictionary.getDictFile( mContext, dictName, null /* dictFile */); final FilenameFilter filenameFilter = new FilenameFilter() { @Override - public boolean accept(File dir, String filename) { + public boolean accept(final File dir, final String filename) { return filename.startsWith(UserHistoryDictionary.NAME + "." + TEST_LOCALE_PREFIX); } }; @@ -99,6 +108,12 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { @Override protected void setUp() throws Exception { super.setUp(); + + mPrefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + // Keep track of the current account so that we restore it when the test finishes. + mLastKnownAccount = mPrefs.getString(LocalSettingsConstants.PREF_ACCOUNT_NAME, null); + updateAccountName(TEST_ACCOUNT); + resetCurrentTimeForTestMode(); removeAllTestDictFiles(); } @@ -107,6 +122,10 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { protected void tearDown() throws Exception { removeAllTestDictFiles(); stopTestModeInNativeCode(); + + // Restore the account that was present before running the test. + updateAccountName(mLastKnownAccount); + super.tearDown(); } @@ -115,6 +134,14 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { setCurrentTimeForTestMode(mCurrentTime); } + private void updateAccountName(@Nullable final String accountName) { + if (accountName == null) { + mPrefs.edit().remove(LocalSettingsConstants.PREF_ACCOUNT_NAME).apply(); + } else { + mPrefs.edit().putString(LocalSettingsConstants.PREF_ACCOUNT_NAME, accountName).apply(); + } + } + private void forcePassingShortTime() { // 3 days. final int timeToElapse = (int)TimeUnit.DAYS.toSeconds(3); @@ -142,7 +169,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { */ private static String generateWord(final int value) { final int lengthOfChars = CHARACTERS.length; - StringBuilder builder = new StringBuilder(); + final StringBuilder builder = new StringBuilder(); long lvalue = Math.abs((long)value); while (lvalue > 0) { builder.append(CHARACTERS[(int)(lvalue % lengthOfChars)]); @@ -162,7 +189,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { private static void addToDict(final UserHistoryDictionary dict, final List<String> words, final int timestamp) { NgramContext ngramContext = NgramContext.EMPTY_PREV_WORDS_INFO; - for (String word : words) { + for (final String word : words) { UserHistoryDictionary.addToDictionary(dict, ngramContext, word, true, timestamp, DistracterFilter.EMPTY_DISTRACTER_FILTER); ngramContext = ngramContext.getNextNgramContext(new WordInfo(word)); @@ -204,12 +231,12 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { Log.d(TAG, "This test can be used for profiling."); Log.d(TAG, "Usage: please set UserHistoryDictionary.PROFILE_SAVE_RESTORE to true."); final Locale dummyLocale = getDummyLocale("random_words"); - final String dictName = ExpandableBinaryDictionary.getDictName( - UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */); + final String dictName = UserHistoryDictionary.getUserHistoryDictName( + UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext()); final File dictFile = ExpandableBinaryDictionary.getDictFile( mContext, dictName, null /* dictFile */); final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary( - getContext(), dummyLocale); + getContext(), dummyLocale, TEST_ACCOUNT); final int numberOfWords = 1000; final Random random = new Random(123456); @@ -232,12 +259,12 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { // Create filename suffixes for this test. for (int i = 0; i < numberOfLanguages; i++) { final Locale dummyLocale = getDummyLocale("switching_languages" + i); - final String dictName = ExpandableBinaryDictionary.getDictName( - UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */); + final String dictName = UserHistoryDictionary.getUserHistoryDictName( + UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext()); dictFiles[i] = ExpandableBinaryDictionary.getDictFile( mContext, dictName, null /* dictFile */); dicts[i] = PersonalizationHelper.getUserHistoryDictionary(getContext(), - dummyLocale); + dummyLocale, TEST_ACCOUNT); clearHistory(dicts[i]); } @@ -262,14 +289,14 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { public void testAddManyWords() { final Locale dummyLocale = getDummyLocale("many_random_words"); - final String dictName = ExpandableBinaryDictionary.getDictName( - UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */); + final String dictName = UserHistoryDictionary.getUserHistoryDictName( + UserHistoryDictionary.NAME, dummyLocale, null /* dictFile */, getContext()); final File dictFile = ExpandableBinaryDictionary.getDictFile( mContext, dictName, null /* dictFile */); final int numberOfWords = 10000; final Random random = new Random(123456); final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary( - getContext(), dummyLocale); + getContext(), dummyLocale, TEST_ACCOUNT); clearHistory(dict); try { addAndWriteRandomWords(dict, numberOfWords, random, true /* checksContents */); @@ -281,7 +308,7 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { public void testDecaying() { final Locale dummyLocale = getDummyLocale("decaying"); final UserHistoryDictionary dict = PersonalizationHelper.getUserHistoryDictionary( - getContext(), dummyLocale); + getContext(), dummyLocale, TEST_ACCOUNT); final int numberOfWords = 5000; final Random random = new Random(123456); resetCurrentTimeForTestMode(); @@ -309,4 +336,9 @@ public class UserHistoryDictionaryTests extends AndroidTestCase { assertFalse(dict.isInDictionary(word)); } } -} + + public void testRandomWords_NullAccount() { + updateAccountName(null); + testRandomWords(); + } +}
\ No newline at end of file |