1ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert/* 2ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project 3ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * 4ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 5ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * you may not use this file except in compliance with the License. 6ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * You may obtain a copy of the License at 7ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * 8ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 9ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * 10ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * Unless required by applicable law or agreed to in writing, software 11ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 12ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * See the License for the specific language governing permissions and 14ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * limitations under the License. 15ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert */ 16ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 17ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertpackage com.android.browser; 18ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 198706008824a86cd28f6911be26dde2602a4b4a6aJohn Reckimport com.android.browser.provider.BrowserProvider; 2057e39f9e46091750c8a07895531446a7f0efdb21John Reckimport com.android.browser.provider.BrowserProvider2; 2157e39f9e46091750c8a07895531446a7f0efdb21John Reckimport com.android.browser.tests.utils.ProviderTestCase3; 2257e39f9e46091750c8a07895531446a7f0efdb21John Reck 23ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport android.app.SearchManager; 24ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport android.content.ContentValues; 25ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport android.database.Cursor; 26ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport android.net.Uri; 2757e39f9e46091750c8a07895531446a7f0efdb21John Reckimport android.provider.BrowserContract; 28ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport android.test.suitebuilder.annotation.MediumTest; 29ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 30ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport java.util.ArrayList; 31ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringertimport java.util.Arrays; 32ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 33ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert/** 34ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert * Unit tests for {@link BrowserProvider}. 35ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert */ 36ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert@MediumTest 3757e39f9e46091750c8a07895531446a7f0efdb21John Reckpublic class BrowserProviderTests extends ProviderTestCase3<BrowserProvider2> { 38ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 39ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private ArrayList<Uri> mDeleteUris; 40ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 4157e39f9e46091750c8a07895531446a7f0efdb21John Reck public BrowserProviderTests() { 4257e39f9e46091750c8a07895531446a7f0efdb21John Reck super(BrowserProvider2.class, 4357e39f9e46091750c8a07895531446a7f0efdb21John Reck BrowserContract.AUTHORITY, BrowserProvider2.LEGACY_AUTHORITY); 4457e39f9e46091750c8a07895531446a7f0efdb21John Reck } 4557e39f9e46091750c8a07895531446a7f0efdb21John Reck 46ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert @Override 47ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert protected void setUp() throws Exception { 48ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert mDeleteUris = new ArrayList<Uri>(); 49ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert super.setUp(); 50ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 51ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 52ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert @Override 53ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert protected void tearDown() throws Exception { 54ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert for (Uri uri : mDeleteUris) { 55ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert deleteUri(uri); 56ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 57ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert super.tearDown(); 58ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 59ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 60ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testHasDefaultBookmarks() { 61ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert Cursor c = getBookmarksSuggest(""); 62ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert try { 63ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertTrue("No default bookmarks", c.getCount() > 0); 64ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } finally { 65ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert c.close(); 66ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 67ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 68ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 69ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testPartialFirstTitleWord() { 70ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "nfgj"); 71ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 72ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 73ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testFullFirstTitleWord() { 74ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra"); 75ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 76ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 77ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testFullFirstTitleWordPartialSecond() { 78ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra df"); 79ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 80ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 81ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testFullTitle() { 82ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra dfger"); 83ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 84ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 85ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert// Not implemented in BrowserProvider 86ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert// public void testFullSecondTitleWord() { 87ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert// assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "sdfywe"); 88ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert// } 89ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 90ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testFullTitleJapanese() { 91ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; 92ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/sdaga", title, title); 93ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 94ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 95ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testPartialTitleJapanese() { 96ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; 97ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String query = "\u30ae\u30e3\u30e9\u30ea\u30fc"; 98ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/sdaga", title, query); 99ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 100ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 101ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert // Test for http://b/issue?id=2152749 102ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert public void testSoundmarkTitleJapanese() { 103ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; 104ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String query = "\u30ad\u30e3\u30e9\u30ea\u30fc"; 105ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertInsertQuery("http://www.example.com/sdaga", title, query); 106ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 107ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 108ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert // 109ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert // Utilities 110ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert // 111ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 112ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private void assertInsertQuery(String url, String title, String query) { 113ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert addBookmark(url, title); 114ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertQueryReturns(url, title, query); 115ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 116ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 117ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private void assertQueryReturns(String url, String title, String query) { 118ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert Cursor c = getBookmarksSuggest(query); 119ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert try { 120ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertTrue(title + " not matched by " + query, c.getCount() > 0); 121ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertTrue("More than one result for " + query, c.getCount() == 1); 122ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert while (c.moveToNext()) { 123ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String text1 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_1); 124ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertNotNull(text1); 125ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertEquals("Bad title", title, text1); 126ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String text2 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_2); 127ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertNotNull(text2); 128ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String data = getCol(c, SearchManager.SUGGEST_COLUMN_INTENT_DATA); 129ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertNotNull(data); 130ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertEquals("Bad URL", url, data); 131ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 132ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } finally { 133ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert c.close(); 134ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 135ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 136ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 137ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private Cursor getBookmarksSuggest(String query) { 138ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert Uri suggestUri = Uri.parse("content://browser/bookmarks/search_suggest_query"); 139ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String[] selectionArgs = { query }; 14057e39f9e46091750c8a07895531446a7f0efdb21John Reck Cursor c = getMockContentResolver().query(suggestUri, null, "url LIKE ?", 141ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert selectionArgs, null); 142ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertNotNull(c); 143ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert return c; 144ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 145ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 146ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private void addBookmark(String url, String title) { 147ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert Uri uri = insertBookmark(url, title); 148ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertNotNull(uri); 149ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertFalse(android.provider.Browser.BOOKMARKS_URI.equals(uri)); 150ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert mDeleteUris.add(uri); 151ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 152ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 153ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private Uri insertBookmark(String url, String title) { 154ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert ContentValues values = new ContentValues(); 155ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("title", title); 156ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("url", url); 157ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("visits", 0); 158ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("date", 0); 159ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("created", 0); 160ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values.put("bookmark", 1); 16157e39f9e46091750c8a07895531446a7f0efdb21John Reck return getMockContentResolver().insert(android.provider.Browser.BOOKMARKS_URI, 162ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert values); 163ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 164ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 165ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private void deleteUri(Uri uri) { 16657e39f9e46091750c8a07895531446a7f0efdb21John Reck int count = getMockContentResolver().delete(uri, null, null); 167ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertEquals("Failed to delete " + uri, 1, count); 168ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 169ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert 170ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert private static String getCol(Cursor c, String name) { 171ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert int col = c.getColumnIndex(name); 172ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert String msg = "Column " + name + " not found, columns: " 173ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert + Arrays.toString(c.getColumnNames()); 174ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert assertTrue(msg, col >= 0); 175ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert return c.getString(col); 176ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert } 177ab1655e799a3b0a82cea62e05b4017c21ab53881Bjorn Bringert} 178