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