UserHistoryDictionaryTests.java revision 2fa3693c264a4c150ac307d9bb7f6f8f18cc4ffc
184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada/* 284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * Copyright (C) 2012 The Android Open Source Project 384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * 484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * Licensed under the Apache License, Version 2.0 (the "License"); 584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * you may not use this file except in compliance with the License. 684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * You may obtain a copy of the License at 784d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * 884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * http://www.apache.org/licenses/LICENSE-2.0 984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * 1084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * Unless required by applicable law or agreed to in writing, software 1184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * distributed under the License is distributed on an "AS IS" BASIS, 1284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * See the License for the specific language governing permissions and 1484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * limitations under the License. 1584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada */ 1684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 17ffcbbaf12788a9fc9398607a548e552d7d2bf05eSatoshi Kataokapackage com.android.inputmethod.latin.personalization; 1884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 1984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport android.test.AndroidTestCase; 20b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaokaimport android.test.suitebuilder.annotation.LargeTest; 2184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport android.util.Log; 2284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 238aaae56cf6694ec75043be56f1c7812a343b24d5Yuichiro Hanadaimport com.android.inputmethod.latin.ExpandableBinaryDictionary; 24e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasaimport com.android.inputmethod.latin.utils.CollectionUtils; 25e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasa 266def28d1dacb0f02c08d91c8be3ed877624f74abYuichiro Hanadaimport java.io.File; 2784d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport java.util.ArrayList; 2884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport java.util.List; 292fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasaimport java.util.Locale; 3084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport java.util.Random; 3184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadaimport java.util.Set; 320d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanadaimport java.util.concurrent.TimeUnit; 3384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 3484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada/** 3584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * Unit tests for UserHistoryDictionary 3684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada */ 37b4598f7d05d6afd01ddc7ea0bed71dda837d1debTadashi G. Takaoka@LargeTest 3884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanadapublic class UserHistoryDictionaryTests extends AndroidTestCase { 3984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada private static final String TAG = UserHistoryDictionaryTests.class.getSimpleName(); 4084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 4184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada private static final String[] CHARACTERS = { 4284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", 4384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" 4484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada }; 4584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 4684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada /** 4784d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada * Generates a random word. 4884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada */ 4984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada private String generateWord(final int value) { 5084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada final int lengthOfChars = CHARACTERS.length; 5184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada StringBuilder builder = new StringBuilder(); 5284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada long lvalue = Math.abs((long)value); 5384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada while (lvalue > 0) { 5484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada builder.append(CHARACTERS[(int)(lvalue % lengthOfChars)]); 5584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada lvalue /= lengthOfChars; 5684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 5784d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada return builder.toString(); 5884d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 5984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 6084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada private List<String> generateWords(final int number, final Random random) { 6184d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada final Set<String> wordSet = CollectionUtils.newHashSet(); 6284d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada while (wordSet.size() < number) { 6384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada wordSet.add(generateWord(random.nextInt())); 6484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 6584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada return new ArrayList<String>(wordSet); 6684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 6784d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 685ed30a7660048ef4bf78077e77554c97786eae2bKeisuke Kuroyanagi private void addToDict(final UserHistoryDictionary dict, final List<String> words) { 6984d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada String prevWord = null; 7084d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada for (String word : words) { 712fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa dict.addToDictionary(prevWord, word, true, 722fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa (int)TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())); 7384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada prevWord = word; 7484d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 7584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 7684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada 77e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka /** 78a328f538c34ad2dafdfa53642085cb1072224d80Yuichiro Hanada * @param checkContents if true, checks whether written words are actually in the dictionary 79e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka * or not. 80e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka */ 818aaae56cf6694ec75043be56f1c7812a343b24d5Yuichiro Hanada private void addAndWriteRandomWords(final String testFilenameSuffix, final int numberOfWords, 82a328f538c34ad2dafdfa53642085cb1072224d80Yuichiro Hanada final Random random, final boolean checkContents) { 830d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final List<String> words = generateWords(numberOfWords, random); 845ed30a7660048ef4bf78077e77554c97786eae2bKeisuke Kuroyanagi final UserHistoryDictionary dict = 855ed30a7660048ef4bf78077e77554c97786eae2bKeisuke Kuroyanagi PersonalizationHelper.getUserHistoryDictionary(getContext(), 862fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa new Locale(testFilenameSuffix)); 870d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada // Add random words to the user history dictionary. 880d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada addToDict(dict, words); 89a328f538c34ad2dafdfa53642085cb1072224d80Yuichiro Hanada if (checkContents) { 902fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa dict.waitAllTasksForTests(); 91a328f538c34ad2dafdfa53642085cb1072224d80Yuichiro Hanada for (int i = 0; i < numberOfWords; ++i) { 92e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka final String word = words.get(i); 93e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka assertTrue(dict.isInDictionaryForTests(word)); 94e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka } 95e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka } 960d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada // write to file. 970d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada dict.close(); 980d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada } 990d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada 10011f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi /** 10111f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi * Clear all entries in the user history dictionary. 10211f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi * @param testFilenameSuffix file name suffix used for testing. 10311f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi */ 10411f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi private void clearHistory(final String testFilenameSuffix) { 10511f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi final UserHistoryDictionary dict = 10611f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi PersonalizationHelper.getUserHistoryDictionary(getContext(), 1072fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa new Locale(testFilenameSuffix)); 10811f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi dict.clearAndFlushDictionary(); 10911f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi dict.close(); 11011f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi } 11111f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi 11211f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi /** 11311f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi * Shut down executer and wait until all operations of user history are done. 11411f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi * @param testFilenameSuffix file name suffix used for testing. 11511f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi */ 11611f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi private void waitForWriting(final String testFilenameSuffix) { 1172fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final UserHistoryDictionary dict = 1182fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa PersonalizationHelper.getUserHistoryDictionary(getContext(), 1192fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa new Locale(testFilenameSuffix)); 1202fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa dict.waitAllTasksForTests(); 12111f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi } 12211f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi 12384d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada public void testRandomWords() { 1240d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada Log.d(TAG, "This test can be used for profiling."); 1250d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada Log.d(TAG, "Usage: please set UserHistoryDictionary.PROFILE_SAVE_RESTORE to true."); 1262fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final String testFilenameSuffix = "test_random_words" + System.currentTimeMillis(); 12711f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi final String fileName = UserHistoryDictionary.NAME + "." + testFilenameSuffix 12811f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi + ExpandableBinaryDictionary.DICT_FILE_EXTENSION; 12911f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi 1300d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final int numberOfWords = 1000; 1310d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final Random random = new Random(123456); 1326def28d1dacb0f02c08d91c8be3ed877624f74abYuichiro Hanada 1330d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada try { 13411f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi clearHistory(testFilenameSuffix); 135e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka addAndWriteRandomWords(testFilenameSuffix, numberOfWords, random, 136e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka true /* checksContents */); 1370d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada } finally { 13811f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi Log.d(TAG, "waiting for writing ..."); 13911f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi waitForWriting(testFilenameSuffix); 14011f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi final File dictFile = new File(getContext().getFilesDir(), fileName); 1416def28d1dacb0f02c08d91c8be3ed877624f74abYuichiro Hanada if (dictFile != null) { 1420d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada assertTrue(dictFile.exists()); 1436def28d1dacb0f02c08d91c8be3ed877624f74abYuichiro Hanada dictFile.delete(); 1446def28d1dacb0f02c08d91c8be3ed877624f74abYuichiro Hanada } 14584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 14684d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada } 14728a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 14828a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi public void testStressTestForSwitchingLanguagesAndAddingWords() { 14928a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi final int numberOfLanguages = 2; 1500d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final int numberOfLanguageSwitching = 80; 1510d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final int numberOfWordsInsertedForEachLanguageSwitch = 100; 15228a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 15328a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi final File dictFiles[] = new File[numberOfLanguages]; 154a099a3e341d8de0512c8bb8f4dbe352456f2a4a4Yuichiro Hanada final String testFilenameSuffixes[] = new String[numberOfLanguages]; 15528a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi try { 15628a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi final Random random = new Random(123456); 15728a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 1580d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada // Create filename suffixes for this test. 15928a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi for (int i = 0; i < numberOfLanguages; i++) { 1602fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa testFilenameSuffixes[i] = "test_switching_languages" + i; 1612fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final String fileName = UserHistoryDictionary.NAME + "." + testFilenameSuffixes[i] 1622fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa + ExpandableBinaryDictionary.DICT_FILE_EXTENSION; 16328a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi dictFiles[i] = new File(getContext().getFilesDir(), fileName); 16411f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi clearHistory(testFilenameSuffixes[i]); 16528a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 16628a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 1670d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada final long start = System.currentTimeMillis(); 16828a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 16928a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi for (int i = 0; i < numberOfLanguageSwitching; i++) { 17028a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi final int index = i % numberOfLanguages; 1710d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada // Switch languages to testFilenameSuffixes[index]. 1720d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada addAndWriteRandomWords(testFilenameSuffixes[index], 173e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka numberOfWordsInsertedForEachLanguageSwitch, random, 174e5a35711b854aedeeea2f45105b941b9deee49bcSatoshi Kataoka false /* checksContents */); 17528a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 17628a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi 17728a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi final long end = System.currentTimeMillis(); 17828a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi Log.d(TAG, "testStressTestForSwitchingLanguageAndAddingWords took " 1790d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada + (end - start) + " ms"); 1800d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada } finally { 18111f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi Log.d(TAG, "waiting for writing ..."); 18211f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi for (int i = 0; i < numberOfLanguages; i++) { 18311f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi waitForWriting(testFilenameSuffixes[i]); 18428a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 18528a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi for (final File file : dictFiles) { 18628a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi if (file != null) { 1870d70bcc821c22f7001b66f4c7b83842661b8391eYuichiro Hanada assertTrue(file.exists()); 18828a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi file.delete(); 18928a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 19028a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 19128a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 19228a70b63c5748783c3b6fcac551cb69852840474Keisuke Kuroynagi } 1932e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi 1942e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi public void testAddManyWords() { 1952fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final String testFilenameSuffix = "test_random_words" + System.currentTimeMillis(); 1962fa3693c264a4c150ac307d9bb7f6f8f18cc4ffcKen Wakasa final int numberOfWords = 10000; 1972e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi final Random random = new Random(123456); 19811f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi clearHistory(testFilenameSuffix); 1992e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi try { 2002e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi addAndWriteRandomWords(testFilenameSuffix, numberOfWords, random, 2012e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi true /* checksContents */); 2022e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi } finally { 20311f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi Log.d(TAG, "waiting for writing ..."); 20411f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi waitForWriting(testFilenameSuffix); 2055ed30a7660048ef4bf78077e77554c97786eae2bKeisuke Kuroyanagi final String fileName = UserHistoryDictionary.NAME + "." + testFilenameSuffix 2062e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi + ExpandableBinaryDictionary.DICT_FILE_EXTENSION; 20711f7cae094720c3ab47e6c18772b1fc44e9e5372Keisuke Kuroyanagi final File dictFile = new File(getContext().getFilesDir(), fileName); 2082e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi if (dictFile != null) { 2092e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi assertTrue(dictFile.exists()); 2102e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi dictFile.delete(); 2112e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi } 2122e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi } 2132e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi } 2142e58670da9687fd1fd28c322e03343957d11568cKeisuke Kuroyanagi 21584d858ed5e187eb9d4b56b593e1d9287f762bbcaYuichiro Hanada} 216