1356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi/* 2356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * Copyright (C) 2014 The Android Open Source Project 3356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * 4356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 5356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 6356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * You may obtain a copy of the License at 7356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * 8356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 9356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * 10356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 11356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 12356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * See the License for the specific language governing permissions and 14356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * limitations under the License. 15356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi */ 16356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 17356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagipackage com.android.inputmethod.latin.personalization; 18356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 19356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport java.io.File; 20356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport java.util.ArrayList; 21356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport java.util.HashMap; 22356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport java.util.Locale; 23356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport java.util.Map; 24356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 25356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport com.android.inputmethod.latin.Dictionary; 26356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport com.android.inputmethod.latin.DictionaryFacilitator; 27356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport com.android.inputmethod.latin.ExpandableBinaryDictionary; 28356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 29356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport android.test.AndroidTestCase; 30356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagiimport android.test.suitebuilder.annotation.LargeTest; 31356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 32356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi/** 33356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi * Unit tests for contextual dictionary 34356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi */ 35356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi@LargeTest 36356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagipublic class ContextualDictionaryTests extends AndroidTestCase { 37356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi private static final String TAG = ContextualDictionaryTests.class.getSimpleName(); 38356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 39356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi private static final Locale LOCALE_EN_US = new Locale("en", "US"); 40356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 41356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi private DictionaryFacilitator getDictionaryFacilitator() { 42356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final ArrayList<String> dictTypes = new ArrayList<>(); 43356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi dictTypes.add(Dictionary.TYPE_CONTEXTUAL); 44356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final DictionaryFacilitator dictionaryFacilitator = new DictionaryFacilitator(); 45356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi dictionaryFacilitator.resetDictionariesForTesting(getContext(), LOCALE_EN_US, dictTypes, 46356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi new HashMap<String, File>(), new HashMap<String, Map<String, String>>()); 47356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi return dictionaryFacilitator; 48356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi } 49356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi 50356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi public void testAddPhrase() { 51356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final DictionaryFacilitator dictionaryFacilitator = getDictionaryFacilitator(); 52356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final String[] phrase = new String[] {"a", "b", "c", "d"}; 53356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final int probability = 100; 54356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final int bigramProbabilityForWords = 150; 55356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final int bigramProbabilityForPhrases = 200; 56356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi dictionaryFacilitator.addPhraseToContextualDictionary( 57356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi phrase, probability, bigramProbabilityForWords, bigramProbabilityForPhrases); 58356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi final ExpandableBinaryDictionary contextualDictionary = 59356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi dictionaryFacilitator.getSubDictForTesting(Dictionary.TYPE_CONTEXTUAL); 60356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi contextualDictionary.waitAllTasksForTests(); 61356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi // Word 62356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("a")); 63356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("b")); 64356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("c")); 65356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("d")); 66356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi // Phrase 67356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("a b c d")); 68356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("b c d")); 69356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertTrue(contextualDictionary.isInDictionary("c d")); 70356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertFalse(contextualDictionary.isInDictionary("a b c")); 71356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi assertFalse(contextualDictionary.isInDictionary("abcd")); 72356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi // TODO: Add tests for probability. 73356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi // TODO: Add tests for n-grams. 74356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi } 75356539699aaaeb4e444447acbbe13db7497fc067Keisuke Kuroyanagi} 76