1// Copyright 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.chrome.browser.test;
6
7import android.content.ContentValues;
8import android.database.Cursor;
9import android.net.Uri;
10import android.provider.Browser;
11import android.provider.Browser.SearchColumns;
12
13import org.chromium.base.test.util.DisabledTest;
14import org.chromium.chrome.browser.ChromeBrowserProvider;
15
16import java.util.Date;
17
18/**
19 * Tests the use of the Searches URI as part of the Android provider public API.
20 */
21public class ProviderSearchesUriTest extends ProviderTestBase {
22
23    private Uri mSearchesUri;
24
25    @Override
26    protected void setUp() throws Exception {
27        super.setUp();
28        mSearchesUri = ChromeBrowserProvider.getSearchesApiUri(getActivity());
29        getContentResolver().delete(mSearchesUri, null, null);
30    }
31
32    @Override
33    protected void tearDown() throws Exception {
34        getContentResolver().delete(mSearchesUri, null, null);
35        super.tearDown();
36    }
37
38    private Uri addSearchTerm(String searchTerm, long searchTime) {
39        ContentValues values = new ContentValues();
40        values.put(SearchColumns.SEARCH, searchTerm);
41        values.put(SearchColumns.DATE, searchTime);
42        return getContentResolver().insert(mSearchesUri, values);
43    }
44
45    /**
46     * @MediumTest
47     * @Feature({"Android-ContentProvider"})
48     * BUG 154683
49     */
50    @DisabledTest
51    public void testAddSearchTerm() {
52        long searchTime = System.currentTimeMillis();
53        String searchTerm = "chrome";
54        Uri uri = addSearchTerm(searchTerm, searchTime);
55        assertNotNull(uri);
56        String[] selectionArgs = { searchTerm, String.valueOf(searchTime) };
57        Cursor cursor = getContentResolver().query(uri, null, SearchColumns.SEARCH + "=? AND " +
58                SearchColumns.DATE + " = ? ", selectionArgs, null);
59        assertNotNull(cursor);
60        assertEquals(1, cursor.getCount());
61        assertTrue(cursor.moveToNext());
62        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
63        assertTrue(-1 != index);
64        assertEquals(searchTerm, cursor.getString(index));
65        index = cursor.getColumnIndex(SearchColumns.DATE);
66        assertTrue(-1 != index);
67        assertEquals(searchTime, cursor.getLong(index));
68    }
69
70    /**
71     * @MediumTest
72     * @Feature({"Android-ContentProvider"})
73     * BUG 154683
74     */
75    @DisabledTest
76    public void testUpdateSearchTerm() {
77        long[] searchTime = { System.currentTimeMillis(), System.currentTimeMillis() - 1000 };
78        String[] searchTerm = { "chrome", "chromium" };
79        Uri uri = addSearchTerm(searchTerm[0], searchTime[0]);
80        ContentValues values = new ContentValues();
81        values.put(SearchColumns.SEARCH, searchTerm[1]);
82        values.put(SearchColumns.DATE, searchTime[1]);
83        getContentResolver().update(uri, values, null, null);
84        String[] selectionArgs = { searchTerm[0] };
85        Cursor cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
86                selectionArgs, null);
87        assertNotNull(cursor);
88        assertEquals(0, cursor.getCount());
89        String[] selectionArgs1 = { searchTerm[1] };
90        cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
91                selectionArgs1, null);
92        assertNotNull(cursor);
93        assertEquals(1, cursor.getCount());
94        assertTrue(cursor.moveToNext());
95        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
96        assertTrue(-1 != index);
97        assertEquals(searchTerm[1], cursor.getString(index));
98        index = cursor.getColumnIndex(SearchColumns.DATE);
99        assertTrue(-1 != index);
100        assertEquals(searchTime[1], cursor.getLong(index));
101    }
102
103    /**
104     * @MediumTest
105     * @Feature({"Android-ContentProvider"})
106     * BUG 154683
107     */
108    @DisabledTest
109    public void testDeleteSearchTerm() {
110        long[] searchTime = { System.currentTimeMillis(), System.currentTimeMillis() - 1000 };
111        String[] searchTerm = {"chrome", "chromium"};
112        Uri uri[] = new Uri[2];
113        for (int i = 0; i < uri.length; i++) {
114            uri[i] = addSearchTerm(searchTerm[i], searchTime[i]);
115        }
116        getContentResolver().delete(uri[0], null, null);
117        String[] selectionArgs = { searchTerm[0] };
118        Cursor cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
119                selectionArgs, null);
120        assertNotNull(cursor);
121        assertEquals(0, cursor.getCount());
122        String[] selectionArgs1 = { searchTerm[1] };
123        cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
124                selectionArgs1, null);
125        assertNotNull(cursor);
126        assertEquals(1, cursor.getCount());
127        assertTrue(cursor.moveToNext());
128        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
129        assertTrue(-1 != index);
130        assertEquals(searchTerm[1], cursor.getString(index));
131        index = cursor.getColumnIndex(SearchColumns.DATE);
132        assertTrue(-1 != index);
133        assertEquals(searchTime[1], cursor.getLong(index));
134        getContentResolver().delete(uri[1], null, null);
135        cursor = getContentResolver().query(uri[1], null, null, null, null);
136        assertNotNull(cursor);
137        assertEquals(0, cursor.getCount());
138    }
139
140    // Copied from CTS test with minor adaptations.
141    /**
142     * @MediumTest
143     * @Feature({"Android-ContentProvider"})
144     * BUG 154683
145     */
146    @DisabledTest
147    public void testSearchesTable() {
148        final int ID_INDEX = 0;
149        String insertSearch = "search_insert";
150        String updateSearch = "search_update";
151
152        // Test: insert
153        ContentValues value = new ContentValues();
154        long createDate = new Date().getTime();
155        value.put(SearchColumns.SEARCH, insertSearch);
156        value.put(SearchColumns.DATE, createDate);
157
158        Uri insertUri = getContentResolver().insert(mSearchesUri, value);
159        Cursor cursor = getContentResolver().query(mSearchesUri,
160                Browser.SEARCHES_PROJECTION, SearchColumns.SEARCH + " = ?",
161                new String[] { insertSearch }, null);
162        assertTrue(cursor.moveToNext());
163        assertEquals(insertSearch,
164                cursor.getString(Browser.SEARCHES_PROJECTION_SEARCH_INDEX));
165        assertEquals(createDate,
166                cursor.getLong(Browser.SEARCHES_PROJECTION_DATE_INDEX));
167        int id = cursor.getInt(ID_INDEX);
168        cursor.close();
169
170        // Test: update
171        value.clear();
172        long updateDate = new Date().getTime();
173        value.put(SearchColumns.SEARCH, updateSearch);
174        value.put(SearchColumns.DATE, updateDate);
175
176        getContentResolver().update(mSearchesUri, value,
177                SearchColumns._ID + " = " + id, null);
178        cursor = getContentResolver().query(mSearchesUri,
179                Browser.SEARCHES_PROJECTION,
180                SearchColumns._ID + " = " + id, null, null);
181        assertTrue(cursor.moveToNext());
182        assertEquals(updateSearch,
183                cursor.getString(Browser.SEARCHES_PROJECTION_SEARCH_INDEX));
184        assertEquals(updateDate,
185                cursor.getLong(Browser.SEARCHES_PROJECTION_DATE_INDEX));
186        assertEquals(id, cursor.getInt(ID_INDEX));
187
188        // Test: delete
189        getContentResolver().delete(insertUri, null, null);
190        cursor = getContentResolver().query(mSearchesUri,
191                Browser.SEARCHES_PROJECTION,
192                SearchColumns._ID + " = " + id, null, null);
193        assertEquals(0, cursor.getCount());
194    }
195}
196