aboutsummaryrefslogtreecommitdiff
path: root/src/instrumentTest/java/com/anysoftkeyboard/dictionaries/TestableBTreeDictionary.java
blob: b4cc2c69fd5a3610ecf2af3e85bfb402538798d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package com.anysoftkeyboard.dictionaries;

import android.content.ContentResolver;
import android.content.Context;
import android.database.AbstractCursor;
import android.database.ContentObserver;
import com.anysoftkeyboard.dictionaries.sqlite.WordsSQLiteConnection;

import java.lang.reflect.Field;

public class TestableBTreeDictionary extends BTreeDictionary{
    public static final Object[][] STORAGE = {
            {1, "hello", 255, "en"},
            {2, "AnySoftKeyboard", 255, "en"},
            {3, "phone", 200, "en"},
            {4, "thing", 200, "en"},
            {5, "she", 180, "en"},
            {6, "are", 179, "en"},
            {7, "Menny", 50, "en"},
            {8, "laptop", 40, "en"},
            {9, "gmail.com", 30, "en"},
            {10, "Android", 29, "en"},
    };

    public String wordRequestedToBeDeletedFromStorage = null;
    public String wordRequestedToAddedToStorage = null;
    public int wordFrequencyRequestedToAddedToStorage = -1;
    public boolean storageIsClosed = false;

    private Field mRootsField;

    protected TestableBTreeDictionary(String dictionaryName, Context context) throws NoSuchFieldException {
        super(dictionaryName, context);
        mRootsField = BTreeDictionary.class.getDeclaredField("mRoots");
        mRootsField.setAccessible(true);
    }

    public NodeArray getRoot() throws IllegalAccessException {
        return (NodeArray) mRootsField.get(this);
    }

    @Override
    protected void deleteWordFromStorage(String word) {
        wordRequestedToBeDeletedFromStorage = word;
    }

    @Override
    protected void registerObserver(ContentObserver dictionaryContentObserver, ContentResolver contentResolver) {

    }

    @Override
    public WordsCursor getWordsCursor() {
        storageIsClosed = false;
        return new WordsCursor(new AbstractCursor() {

            @Override
            public int getCount() {
                return STORAGE.length;
            }

            @Override
            public String[] getColumnNames() {
                return new String[]
                        {       WordsSQLiteConnection.Words._ID,
                                WordsSQLiteConnection.Words.WORD,
                                WordsSQLiteConnection.Words.FREQUENCY,
                                WordsSQLiteConnection.Words.LOCALE
                        };
            }

            @Override
            public String getString(int column) {
                return (String)STORAGE[getPosition()][column];
            }

            @Override
            public short getShort(int column) {
                return (Short)STORAGE[getPosition()][column];
            }

            @Override
            public int getInt(int column) {
                return (Integer)STORAGE[getPosition()][column];
            }

            @Override
            public long getLong(int column) {
                return (Long)STORAGE[getPosition()][column];
            }

            @Override
            public float getFloat(int column) {
                return (Float)STORAGE[getPosition()][column];
            }

            @Override
            public double getDouble(int column) {
                return (Double)STORAGE[getPosition()][column];
            }

            @Override
            public boolean isNull(int column) {
                return STORAGE[getPosition()][column] == null;
            }
        });
    }

    @Override
    protected void AddWordToStorage(String word, int frequency) {
        wordRequestedToAddedToStorage = word;
        wordFrequencyRequestedToAddedToStorage = frequency;
    }

    @Override
    protected void closeStorage() {
        storageIsClosed = true;
    }
}