/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.browser; import com.android.browser.provider.BrowserProvider; import com.android.browser.provider.BrowserProvider2; import com.android.browser.tests.utils.ProviderTestCase3; import android.app.SearchManager; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.provider.BrowserContract; import android.test.suitebuilder.annotation.MediumTest; import java.util.ArrayList; import java.util.Arrays; /** * Unit tests for {@link BrowserProvider}. */ @MediumTest public class BrowserProviderTests extends ProviderTestCase3<BrowserProvider2> { private ArrayList<Uri> mDeleteUris; public BrowserProviderTests() { super(BrowserProvider2.class, BrowserContract.AUTHORITY, BrowserProvider2.LEGACY_AUTHORITY); } @Override protected void setUp() throws Exception { mDeleteUris = new ArrayList<Uri>(); super.setUp(); } @Override protected void tearDown() throws Exception { for (Uri uri : mDeleteUris) { deleteUri(uri); } super.tearDown(); } public void testHasDefaultBookmarks() { Cursor c = getBookmarksSuggest(""); try { assertTrue("No default bookmarks", c.getCount() > 0); } finally { c.close(); } } public void testPartialFirstTitleWord() { assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "nfgj"); } public void testFullFirstTitleWord() { assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra"); } public void testFullFirstTitleWordPartialSecond() { assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra df"); } public void testFullTitle() { assertInsertQuery("http://www.example.com/", "nfgjra dfger", "nfgjra dfger"); } // Not implemented in BrowserProvider // public void testFullSecondTitleWord() { // assertInsertQuery("http://www.example.com/rasdfe", "nfgjra sdfywe", "sdfywe"); // } public void testFullTitleJapanese() { String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; assertInsertQuery("http://www.example.com/sdaga", title, title); } public void testPartialTitleJapanese() { String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; String query = "\u30ae\u30e3\u30e9\u30ea\u30fc"; assertInsertQuery("http://www.example.com/sdaga", title, query); } // Test for http://b/issue?id=2152749 public void testSoundmarkTitleJapanese() { String title = "\u30ae\u30e3\u30e9\u30ea\u30fc\u30fcGoogle\u691c\u7d22"; String query = "\u30ad\u30e3\u30e9\u30ea\u30fc"; assertInsertQuery("http://www.example.com/sdaga", title, query); } // // Utilities // private void assertInsertQuery(String url, String title, String query) { addBookmark(url, title); assertQueryReturns(url, title, query); } private void assertQueryReturns(String url, String title, String query) { Cursor c = getBookmarksSuggest(query); try { assertTrue(title + " not matched by " + query, c.getCount() > 0); assertTrue("More than one result for " + query, c.getCount() == 1); while (c.moveToNext()) { String text1 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_1); assertNotNull(text1); assertEquals("Bad title", title, text1); String text2 = getCol(c, SearchManager.SUGGEST_COLUMN_TEXT_2); assertNotNull(text2); String data = getCol(c, SearchManager.SUGGEST_COLUMN_INTENT_DATA); assertNotNull(data); assertEquals("Bad URL", url, data); } } finally { c.close(); } } private Cursor getBookmarksSuggest(String query) { Uri suggestUri = Uri.parse("content://browser/bookmarks/search_suggest_query"); String[] selectionArgs = { query }; Cursor c = getMockContentResolver().query(suggestUri, null, "url LIKE ?", selectionArgs, null); assertNotNull(c); return c; } private void addBookmark(String url, String title) { Uri uri = insertBookmark(url, title); assertNotNull(uri); assertFalse(android.provider.Browser.BOOKMARKS_URI.equals(uri)); mDeleteUris.add(uri); } private Uri insertBookmark(String url, String title) { ContentValues values = new ContentValues(); values.put("title", title); values.put("url", url); values.put("visits", 0); values.put("date", 0); values.put("created", 0); values.put("bookmark", 1); return getMockContentResolver().insert(android.provider.Browser.BOOKMARKS_URI, values); } private void deleteUri(Uri uri) { int count = getMockContentResolver().delete(uri, null, null); assertEquals("Failed to delete " + uri, 1, count); } private static String getCol(Cursor c, String name) { int col = c.getColumnIndex(name); String msg = "Column " + name + " not found, columns: " + Arrays.toString(c.getColumnNames()); assertTrue(msg, col >= 0); return c.getString(col); } }