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.
5 package org.chromium.chrome.browser.test;
7 import android.content.ContentValues;
8 import android.database.Cursor;
9 import android.net.Uri;
10 import android.provider.Browser.BookmarkColumns;
12 import org.chromium.base.test.util.DisabledTest;
13 import org.chromium.chrome.browser.ChromeBrowserProvider;
14 import org.chromium.chrome.browser.test.util.BookmarkUtils;
16 import java.util.Date;
19 * Tests the use of the Bookmark URI as part of the Android provider public API.
21 public class ProviderBookmarksUriTest extends ProviderTestBase {
22 private static final String TAG = "ProviderBookmarkUriTest";
23 private static final String ICON_PATH = "chrome/provider/icon1.png";
25 private Uri mBookmarksUri;
28 protected void setUp() throws Exception {
30 mBookmarksUri = ChromeBrowserProvider.getBookmarksApiUri(getActivity());
31 getContentResolver().delete(mBookmarksUri, null, null);
35 protected void tearDown() throws Exception {
36 getContentResolver().delete(mBookmarksUri, null, null);
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);
55 * @Feature({"Android-ContentProvider"})
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/";
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));
100 * @Feature({"Android-ContentProvider"})
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]);
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));
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));
179 * @Feature({"Android-ContentProvider"})
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 };
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]);
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 + " = ?",
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));
234 * @Feature({"Android-ContentProvider"})
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]);
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 + " = ?",
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 + " = ?",
270 cursor = getContentResolver().query(uris[1], null, null, null, null);
271 assertNotNull(cursor);
272 assertEquals(0, cursor.getCount());
276 * Copied from CTS test with minor adaptations.
280 * @Feature({"Android-ContentProvider"})
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;
298 final String insertBookmarkTitle = "bookmark_insert";
299 final String insertBookmarkUrl = "www.bookmark_insert.com";
301 final String updateBookmarkTitle = "bookmark_update";
302 final String updateBookmarkUrl = "www.bookmark_update.com";
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);
314 Uri insertUri = getContentResolver().insert(mBookmarksUri, value);
315 Cursor cursor = getContentResolver().query(
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[].
330 // assertTrue(cursor.isNull(FAVICON_INDEX));
331 int Id = cursor.getInt(idIndex);
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);
342 getContentResolver().update(mBookmarksUri, value,
343 BookmarkColumns.TITLE + " = ?",
344 new String[] { insertBookmarkTitle });
345 cursor = getContentResolver().query(
348 BookmarkColumns._ID + " = " + Id,
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[].
359 // assertTrue(cursor.isNull(FAVICON_INDEX));
360 assertEquals(Id, cursor.getInt(idIndex));
363 getContentResolver().delete(insertUri, null, null);
364 cursor = getContentResolver().query(
367 BookmarkColumns._ID + " = " + Id,
369 assertEquals(0, cursor.getCount());