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.BookmarkColumns; 11 12import org.chromium.base.test.util.DisabledTest; 13import org.chromium.chrome.browser.ChromeBrowserProvider; 14import org.chromium.chrome.browser.test.util.BookmarkUtils; 15 16import java.util.Date; 17 18/** 19 * Tests the use of the Bookmark URI as part of the Android provider public API. 20 */ 21public class ProviderBookmarksUriTest extends ProviderTestBase { 22 private static final String TAG = "ProviderBookmarkUriTest"; 23 private static final String ICON_PATH = "chrome/provider/icon1.png"; 24 25 private Uri mBookmarksUri; 26 27 @Override 28 protected void setUp() throws Exception { 29 super.setUp(); 30 mBookmarksUri = ChromeBrowserProvider.getBookmarksApiUri(getActivity()); 31 getContentResolver().delete(mBookmarksUri, null, null); 32 } 33 34 @Override 35 protected void tearDown() throws Exception { 36 getContentResolver().delete(mBookmarksUri, null, null); 37 super.tearDown(); 38 } 39 40 private Uri addBookmark(String url, String title, long lastVisitTime, long created, int visits, 41 byte[] icon, int isBookmark) { 42 ContentValues values = new ContentValues(); 43 values.put(BookmarkColumns.BOOKMARK, isBookmark); 44 values.put(BookmarkColumns.DATE, lastVisitTime); 45 values.put(BookmarkColumns.CREATED, created); 46 values.put(BookmarkColumns.FAVICON, icon); 47 values.put(BookmarkColumns.URL, url); 48 values.put(BookmarkColumns.VISITS, visits); 49 values.put(BookmarkColumns.TITLE, title); 50 return getContentResolver().insert(mBookmarksUri, values); 51 } 52 53 /** 54 * @MediumTest 55 * @Feature({"Android-ContentProvider"}) 56 * BUG 154683 57 */ 58 @DisabledTest 59 public void testAddBookmark() { 60 final long lastUpdateTime = System.currentTimeMillis(); 61 final long createdTime = lastUpdateTime - 1000 * 60 * 60; 62 final String url = "http://www.google.com/"; 63 final int visits = 2; 64 final String title = "Google"; 65 ContentValues values = new ContentValues(); 66 values.put(BookmarkColumns.BOOKMARK, 0); 67 values.put(BookmarkColumns.DATE, lastUpdateTime); 68 values.put(BookmarkColumns.CREATED, createdTime); 69 values.put(BookmarkColumns.FAVICON, BookmarkUtils.getIcon(ICON_PATH)); 70 values.put(BookmarkColumns.URL, url); 71 values.put(BookmarkColumns.VISITS, visits); 72 values.put(BookmarkColumns.TITLE, title); 73 Uri uri = getContentResolver().insert(mBookmarksUri, values); 74 Cursor cursor = getContentResolver().query(uri, null, null, null, null); 75 assertEquals(1, cursor.getCount()); 76 assertTrue(cursor.moveToNext()); 77 int index = cursor.getColumnIndex(BookmarkColumns.BOOKMARK); 78 assertTrue(-1 != index); 79 assertEquals(0, cursor.getInt(index)); 80 index = cursor.getColumnIndex(BookmarkColumns.CREATED); 81 assertTrue(-1 != index); 82 assertEquals(createdTime, cursor.getLong(index)); 83 index = cursor.getColumnIndex(BookmarkColumns.DATE); 84 assertTrue(-1 != index); 85 assertEquals(lastUpdateTime, cursor.getLong(index)); 86 index = cursor.getColumnIndex(BookmarkColumns.FAVICON); 87 assertTrue(-1 != index); 88 assertTrue(BookmarkUtils.byteArrayEqual(BookmarkUtils.getIcon(ICON_PATH), 89 cursor.getBlob(index))); 90 index = cursor.getColumnIndex(BookmarkColumns.URL); 91 assertTrue(-1 != index); 92 assertEquals(url, cursor.getString(index)); 93 index = cursor.getColumnIndex(BookmarkColumns.VISITS); 94 assertTrue(-1 != index); 95 assertEquals(visits, cursor.getInt(index)); 96 } 97 98 /** 99 * @MediumTest 100 * @Feature({"Android-ContentProvider"}) 101 * BUG 154683 102 */ 103 @DisabledTest 104 public void testQueryBookmark() { 105 final long now = System.currentTimeMillis(); 106 final long lastUpdateTime[] = { now, now - 1000 * 60 }; 107 final long createdTime[] = { now - 1000 * 60 * 60, now - 1000 * 60 * 60 * 60 }; 108 final String url[] = { "http://www.google.com/", "http://mail.google.com/" }; 109 final int visits[] = { 2, 20 }; 110 final String title[] = { "Google", "Mail" }; 111 final int isBookmark[] = { 1, 0 }; 112 Uri[] uris = new Uri[2]; 113 byte[][] icons = { BookmarkUtils.getIcon(ICON_PATH), null }; 114 for (int i = 0; i < uris.length; i++) { 115 uris[i] = addBookmark(url[i], title[i], lastUpdateTime[i], createdTime[i], visits[i], 116 icons[i], isBookmark[i]); 117 assertNotNull(uris[i]); 118 } 119 120 // Query the 1st row. 121 String[] selectionArgs = { url[0], String.valueOf(lastUpdateTime[0]), 122 String.valueOf(visits[0]), String.valueOf(isBookmark[0]) }; 123 Cursor cursor = getContentResolver().query(mBookmarksUri, null, 124 "url = ? AND date = ? AND visits = ? AND bookmark = ? AND favicon IS NOT NULL", 125 selectionArgs, null); 126 assertNotNull(cursor); 127 assertEquals(1, cursor.getCount()); 128 assertTrue(cursor.moveToNext()); 129 int index = cursor.getColumnIndex(BookmarkColumns.BOOKMARK); 130 assertTrue(-1 != index); 131 assertEquals(isBookmark[0], cursor.getInt(index)); 132 index = cursor.getColumnIndex(BookmarkColumns.CREATED); 133 assertTrue(-1 != index); 134 assertEquals(createdTime[0], cursor.getLong(index)); 135 index = cursor.getColumnIndex(BookmarkColumns.DATE); 136 assertTrue(-1 != index); 137 assertEquals(lastUpdateTime[0], cursor.getLong(index)); 138 index = cursor.getColumnIndex(BookmarkColumns.FAVICON); 139 assertTrue(-1 != index); 140 assertTrue(BookmarkUtils.byteArrayEqual(icons[0], cursor.getBlob(index))); 141 index = cursor.getColumnIndex(BookmarkColumns.URL); 142 assertTrue(-1 != index); 143 assertEquals(url[0], cursor.getString(index)); 144 index = cursor.getColumnIndex(BookmarkColumns.VISITS); 145 assertTrue(-1 != index); 146 assertEquals(visits[0], cursor.getInt(index)); 147 148 // Query the 2nd row. 149 String[] selectionArgs2 = { url[1], String.valueOf(lastUpdateTime[1]), 150 String.valueOf(visits[1]), String.valueOf(isBookmark[1]) }; 151 cursor = getContentResolver().query(mBookmarksUri, null, 152 "url = ? AND date = ? AND visits = ? AND bookmark = ? AND favicon IS NULL", 153 selectionArgs2, null); 154 assertNotNull(cursor); 155 assertEquals(1, cursor.getCount()); 156 assertTrue(cursor.moveToNext()); 157 index = cursor.getColumnIndex(BookmarkColumns.BOOKMARK); 158 assertTrue(-1 != index); 159 assertEquals(isBookmark[1], cursor.getInt(index)); 160 index = cursor.getColumnIndex(BookmarkColumns.CREATED); 161 assertTrue(-1 != index); 162 assertEquals(createdTime[1], cursor.getLong(index)); 163 index = cursor.getColumnIndex(BookmarkColumns.DATE); 164 assertTrue(-1 != index); 165 assertEquals(lastUpdateTime[1], cursor.getLong(index)); 166 index = cursor.getColumnIndex(BookmarkColumns.FAVICON); 167 assertTrue(-1 != index); 168 assertTrue(BookmarkUtils.byteArrayEqual(icons[1], cursor.getBlob(index))); 169 index = cursor.getColumnIndex(BookmarkColumns.URL); 170 assertTrue(-1 != index); 171 assertEquals(url[1], cursor.getString(index)); 172 index = cursor.getColumnIndex(BookmarkColumns.VISITS); 173 assertTrue(-1 != index); 174 assertEquals(visits[1], cursor.getInt(index)); 175 } 176 177 /** 178 * @MediumTest 179 * @Feature({"Android-ContentProvider"}) 180 * BUG 154683 181 */ 182 @DisabledTest 183 public void testUpdateBookmark() { 184 final long now = System.currentTimeMillis(); 185 final long lastUpdateTime[] = { now, now - 1000 * 60 }; 186 final long createdTime[] = { now - 1000 * 60 * 60, now - 1000 * 60 * 60 * 60 }; 187 final String url[] = { "http://www.google.com/", "http://mail.google.com/" }; 188 final int visits[] = { 2, 20 }; 189 final String title[] = { "Google", "Mail" }; 190 final int isBookmark[] = { 1, 0 }; 191 192 byte[][] icons = { BookmarkUtils.getIcon(ICON_PATH), null }; 193 Uri uri = addBookmark(url[0], title[0], lastUpdateTime[0], createdTime[0], visits[0], 194 icons[0], isBookmark[0]); 195 assertNotNull(uri); 196 197 ContentValues values = new ContentValues(); 198 values.put(BookmarkColumns.BOOKMARK, isBookmark[1]); 199 values.put(BookmarkColumns.DATE, lastUpdateTime[1]); 200 values.put(BookmarkColumns.URL, url[1]); 201 values.putNull(BookmarkColumns.FAVICON); 202 values.put(BookmarkColumns.TITLE, title[1]); 203 values.put(BookmarkColumns.VISITS, visits[1]); 204 String[] selectionArgs = { String.valueOf(lastUpdateTime[0]), 205 String.valueOf(isBookmark[0]) }; 206 getContentResolver().update(uri, values, BookmarkColumns.FAVICON + " IS NOT NULL AND " + 207 BookmarkColumns.DATE + "= ? AND " + BookmarkColumns.BOOKMARK + " = ?", 208 selectionArgs); 209 Cursor cursor = getContentResolver().query(uri, null, null, null, null); 210 assertEquals(1, cursor.getCount()); 211 assertTrue(cursor.moveToNext()); 212 int index = cursor.getColumnIndex(BookmarkColumns.BOOKMARK); 213 assertTrue(-1 != index); 214 assertEquals(isBookmark[1], cursor.getInt(index)); 215 index = cursor.getColumnIndex(BookmarkColumns.CREATED); 216 assertTrue(-1 != index); 217 assertEquals(createdTime[0], cursor.getLong(index)); 218 index = cursor.getColumnIndex(BookmarkColumns.DATE); 219 assertTrue(-1 != index); 220 assertEquals(lastUpdateTime[1], cursor.getLong(index)); 221 index = cursor.getColumnIndex(BookmarkColumns.FAVICON); 222 assertTrue(-1 != index); 223 assertTrue(BookmarkUtils.byteArrayEqual(icons[1], cursor.getBlob(index))); 224 index = cursor.getColumnIndex(BookmarkColumns.URL); 225 assertTrue(-1 != index); 226 assertEquals(url[1], cursor.getString(index)); 227 index = cursor.getColumnIndex(BookmarkColumns.VISITS); 228 assertTrue(-1 != index); 229 assertEquals(visits[1], cursor.getInt(index)); 230 } 231 232 /** 233 * @MediumTest 234 * @Feature({"Android-ContentProvider"}) 235 * BUG 154683 236 */ 237 @DisabledTest 238 public void testDeleteBookmark() { 239 final long now = System.currentTimeMillis(); 240 final long lastUpdateTime[] = { now, now - 1000 * 60 }; 241 final long createdTime[] = { now - 1000 * 60 * 60, now - 1000 * 60 * 60 * 60 }; 242 final String url[] = { "http://www.google.com/", "http://mail.google.com/" }; 243 final int visits[] = { 2, 20 }; 244 final String title[] = { "Google", "Mail" }; 245 final int isBookmark[] = { 1, 0 }; 246 Uri[] uris = new Uri[2]; 247 byte[][] icons = { BookmarkUtils.getIcon(ICON_PATH), null }; 248 for (int i = 0; i < uris.length; i++) { 249 uris[i] = addBookmark(url[i], title[i], lastUpdateTime[i], createdTime[i], visits[i], 250 icons[i], isBookmark[i]); 251 assertNotNull(uris[i]); 252 } 253 254 String[] selectionArgs = { String.valueOf(lastUpdateTime[0]), 255 String.valueOf(isBookmark[0]) }; 256 getContentResolver().delete(mBookmarksUri, BookmarkColumns.FAVICON + " IS NOT NULL AND " + 257 BookmarkColumns.DATE + "= ? AND " + BookmarkColumns.BOOKMARK + " = ?", 258 selectionArgs); 259 Cursor cursor = getContentResolver().query(uris[0], null, null, null, null); 260 assertNotNull(cursor); 261 assertEquals(0, cursor.getCount()); 262 cursor = getContentResolver().query(uris[1], null, null, null, null); 263 assertNotNull(cursor); 264 assertEquals(1, cursor.getCount()); 265 String[] selectionArgs1 = { String.valueOf(lastUpdateTime[1]), 266 String.valueOf(isBookmark[1]) }; 267 getContentResolver().delete(mBookmarksUri, BookmarkColumns.FAVICON + " IS NULL AND " + 268 BookmarkColumns.DATE + "= ? AND " + BookmarkColumns.BOOKMARK + " = ?", 269 selectionArgs1); 270 cursor = getContentResolver().query(uris[1], null, null, null, null); 271 assertNotNull(cursor); 272 assertEquals(0, cursor.getCount()); 273 } 274 275 /* 276 * Copied from CTS test with minor adaptations. 277 */ 278 /** 279 * @MediumTest 280 * @Feature({"Android-ContentProvider"}) 281 * BUG 154683 282 */ 283 @DisabledTest 284 public void testBookmarksTable() { 285 final String[] bookmarksProjection = new String[] { 286 BookmarkColumns._ID, BookmarkColumns.URL, BookmarkColumns.VISITS, 287 BookmarkColumns.DATE, BookmarkColumns.CREATED, BookmarkColumns.BOOKMARK, 288 BookmarkColumns.TITLE, BookmarkColumns.FAVICON }; 289 final int idIndex = 0; 290 final int urlIndex = 1; 291 final int visitsIndex = 2; 292 final int dataIndex = 3; 293 final int createdIndex = 4; 294 final int bookmarkIndex = 5; 295 final int titleIndex = 6; 296 final int faviconIndex = 7; 297 298 final String insertBookmarkTitle = "bookmark_insert"; 299 final String insertBookmarkUrl = "www.bookmark_insert.com"; 300 301 final String updateBookmarkTitle = "bookmark_update"; 302 final String updateBookmarkUrl = "www.bookmark_update.com"; 303 304 // Test: insert. 305 ContentValues value = new ContentValues(); 306 long createDate = new Date().getTime(); 307 value.put(BookmarkColumns.TITLE, insertBookmarkTitle); 308 value.put(BookmarkColumns.URL, insertBookmarkUrl); 309 value.put(BookmarkColumns.VISITS, 0); 310 value.put(BookmarkColumns.DATE, createDate); 311 value.put(BookmarkColumns.CREATED, createDate); 312 value.put(BookmarkColumns.BOOKMARK, 0); 313 314 Uri insertUri = getContentResolver().insert(mBookmarksUri, value); 315 Cursor cursor = getContentResolver().query( 316 mBookmarksUri, 317 bookmarksProjection, 318 BookmarkColumns.TITLE + " = ?", 319 new String[] { insertBookmarkTitle }, 320 BookmarkColumns.DATE); 321 assertTrue(cursor.moveToNext()); 322 assertEquals(insertBookmarkTitle, cursor.getString(titleIndex)); 323 assertEquals(insertBookmarkUrl, cursor.getString(urlIndex)); 324 assertEquals(0, cursor.getInt(visitsIndex)); 325 assertEquals(createDate, cursor.getLong(dataIndex)); 326 assertEquals(createDate, cursor.getLong(createdIndex)); 327 assertEquals(0, cursor.getInt(bookmarkIndex)); 328 // TODO(michaelbai): according to the test this should be null instead of an empty byte[]. 329 // BUG 6288508 330 // assertTrue(cursor.isNull(FAVICON_INDEX)); 331 int Id = cursor.getInt(idIndex); 332 cursor.close(); 333 334 // Test: update. 335 value.clear(); 336 long updateDate = new Date().getTime(); 337 value.put(BookmarkColumns.TITLE, updateBookmarkTitle); 338 value.put(BookmarkColumns.URL, updateBookmarkUrl); 339 value.put(BookmarkColumns.VISITS, 1); 340 value.put(BookmarkColumns.DATE, updateDate); 341 342 getContentResolver().update(mBookmarksUri, value, 343 BookmarkColumns.TITLE + " = ?", 344 new String[] { insertBookmarkTitle }); 345 cursor = getContentResolver().query( 346 mBookmarksUri, 347 bookmarksProjection, 348 BookmarkColumns._ID + " = " + Id, 349 null, null); 350 assertTrue(cursor.moveToNext()); 351 assertEquals(updateBookmarkTitle, cursor.getString(titleIndex)); 352 assertEquals(updateBookmarkUrl, cursor.getString(urlIndex)); 353 assertEquals(1, cursor.getInt(visitsIndex)); 354 assertEquals(updateDate, cursor.getLong(dataIndex)); 355 assertEquals(createDate, cursor.getLong(createdIndex)); 356 assertEquals(0, cursor.getInt(bookmarkIndex)); 357 // TODO(michaelbai): according to the test this should be null instead of an empty byte[]. 358 // BUG 6288508 359 // assertTrue(cursor.isNull(FAVICON_INDEX)); 360 assertEquals(Id, cursor.getInt(idIndex)); 361 362 // Test: delete. 363 getContentResolver().delete(insertUri, null, null); 364 cursor = getContentResolver().query( 365 mBookmarksUri, 366 bookmarksProjection, 367 BookmarkColumns._ID + " = " + Id, 368 null, null); 369 assertEquals(0, cursor.getCount()); 370 } 371} 372