1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.chrome.browser.test;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.content.ContentValues;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.database.Cursor;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.net.Uri;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.provider.Browser;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.provider.Browser.SearchColumns;
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.DisabledTest;
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.chrome.browser.ChromeBrowserProvider;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.util.Date;
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Tests the use of the Searches URI as part of the Android provider public API.
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class ProviderSearchesUriTest extends ProviderTestBase {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private Uri mSearchesUri;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected void setUp() throws Exception {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        super.setUp();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mSearchesUri = ChromeBrowserProvider.getSearchesApiUri(getActivity());
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().delete(mSearchesUri, null, null);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @Override
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    protected void tearDown() throws Exception {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().delete(mSearchesUri, null, null);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        super.tearDown();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private Uri addSearchTerm(String searchTerm, long searchTime) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ContentValues values = new ContentValues();
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        values.put(SearchColumns.SEARCH, searchTerm);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        values.put(SearchColumns.DATE, searchTime);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return getContentResolver().insert(mSearchesUri, values);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @MediumTest
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @Feature({"Android-ContentProvider"})
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * BUG 154683
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @DisabledTest
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void testAddSearchTerm() {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        long searchTime = System.currentTimeMillis();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String searchTerm = "chrome";
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Uri uri = addSearchTerm(searchTerm, searchTime);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(uri);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] selectionArgs = { searchTerm, String.valueOf(searchTime) };
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Cursor cursor = getContentResolver().query(uri, null, SearchColumns.SEARCH + "=? AND " +
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                SearchColumns.DATE + " = ? ", selectionArgs, null);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(1, cursor.getCount());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(cursor.moveToNext());
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTerm, cursor.getString(index));
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        index = cursor.getColumnIndex(SearchColumns.DATE);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTime, cursor.getLong(index));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @MediumTest
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @Feature({"Android-ContentProvider"})
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * BUG 154683
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @DisabledTest
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void testUpdateSearchTerm() {
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        long[] searchTime = { System.currentTimeMillis(), System.currentTimeMillis() - 1000 };
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] searchTerm = { "chrome", "chromium" };
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Uri uri = addSearchTerm(searchTerm[0], searchTime[0]);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ContentValues values = new ContentValues();
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        values.put(SearchColumns.SEARCH, searchTerm[1]);
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        values.put(SearchColumns.DATE, searchTime[1]);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().update(uri, values, null, null);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] selectionArgs = { searchTerm[0] };
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Cursor cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                selectionArgs, null);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(0, cursor.getCount());
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] selectionArgs1 = { searchTerm[1] };
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                selectionArgs1, null);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(1, cursor.getCount());
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(cursor.moveToNext());
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTerm[1], cursor.getString(index));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        index = cursor.getColumnIndex(SearchColumns.DATE);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTime[1], cursor.getLong(index));
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @MediumTest
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @Feature({"Android-ContentProvider"})
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * BUG 154683
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @DisabledTest
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void testDeleteSearchTerm() {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        long[] searchTime = { System.currentTimeMillis(), System.currentTimeMillis() - 1000 };
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] searchTerm = {"chrome", "chromium"};
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Uri uri[] = new Uri[2];
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        for (int i = 0; i < uri.length; i++) {
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            uri[i] = addSearchTerm(searchTerm[i], searchTime[i]);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().delete(uri[0], null, null);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] selectionArgs = { searchTerm[0] };
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Cursor cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                selectionArgs, null);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(0, cursor.getCount());
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String[] selectionArgs1 = { searchTerm[1] };
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor = getContentResolver().query(mSearchesUri, null, SearchColumns.SEARCH + "=?",
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                selectionArgs1, null);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(1, cursor.getCount());
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(cursor.moveToNext());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        int index = cursor.getColumnIndex(SearchColumns.SEARCH);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTerm[1], cursor.getString(index));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        index = cursor.getColumnIndex(SearchColumns.DATE);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(-1 != index);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(searchTime[1], cursor.getLong(index));
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().delete(uri[1], null, null);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor = getContentResolver().query(uri[1], null, null, null, null);
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertNotNull(cursor);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(0, cursor.getCount());
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Copied from CTS test with minor adaptations.
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @MediumTest
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @Feature({"Android-ContentProvider"})
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * BUG 154683
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    @DisabledTest
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public void testSearchesTable() {
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        final int idIndex = 0;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String insertSearch = "search_insert";
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String updateSearch = "search_update";
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Test: insert
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ContentValues value = new ContentValues();
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        long createDate = new Date().getTime();
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        value.put(SearchColumns.SEARCH, insertSearch);
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        value.put(SearchColumns.DATE, createDate);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Uri insertUri = getContentResolver().insert(mSearchesUri, value);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        Cursor cursor = getContentResolver().query(mSearchesUri,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                Browser.SEARCHES_PROJECTION, SearchColumns.SEARCH + " = ?",
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                new String[] { insertSearch }, null);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(cursor.moveToNext());
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(insertSearch,
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                cursor.getString(Browser.SEARCHES_PROJECTION_SEARCH_INDEX));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(createDate,
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                cursor.getLong(Browser.SEARCHES_PROJECTION_DATE_INDEX));
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        int id = cursor.getInt(idIndex);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor.close();
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Test: update
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        value.clear();
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        long updateDate = new Date().getTime();
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        value.put(SearchColumns.SEARCH, updateSearch);
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        value.put(SearchColumns.DATE, updateDate);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().update(mSearchesUri, value,
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                SearchColumns._ID + " = " + id, null);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor = getContentResolver().query(mSearchesUri,
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                Browser.SEARCHES_PROJECTION,
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                SearchColumns._ID + " = " + id, null, null);
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertTrue(cursor.moveToNext());
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(updateSearch,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                cursor.getString(Browser.SEARCHES_PROJECTION_SEARCH_INDEX));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(updateDate,
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                cursor.getLong(Browser.SEARCHES_PROJECTION_DATE_INDEX));
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assertEquals(id, cursor.getInt(idIndex));
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        // Test: delete
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        getContentResolver().delete(insertUri, null, null);
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        cursor = getContentResolver().query(mSearchesUri,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                Browser.SEARCHES_PROJECTION,
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                SearchColumns._ID + " = " + id, null, null);
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        assertEquals(0, cursor.getCount());
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
196