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