- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / android / javatests / src / org / chromium / chrome / browser / test / ProviderBookmarksUriTest.java
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.
4
5 package org.chromium.chrome.browser.test;
6
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;
12
13 import java.util.Date;
14
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;
19
20 /**
21  * Tests the use of the Bookmark URI as part of the Android provider public API.
22  */
23 public class ProviderBookmarksUriTest extends ProviderTestBase {
24     private static final String TAG = "ProviderBookmarkUriTest";
25     private static final String ICON_PATH = "chrome/provider/icon1.png";
26
27     private Uri mBookmarksUri;
28
29     @Override
30     protected void setUp() throws Exception {
31         super.setUp();
32         mBookmarksUri = ChromeBrowserProvider.getBookmarksApiUri(getActivity());
33         getContentResolver().delete(mBookmarksUri, null, null);
34     }
35
36     @Override
37     protected void tearDown() throws Exception {
38         getContentResolver().delete(mBookmarksUri, null, null);
39         super.tearDown();
40     }
41
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);
53     }
54
55     /**
56      * @MediumTest
57      * @Feature({"Android-ContentProvider"})
58      * BUG 154683
59      */
60     @DisabledTest
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/";
65         final int visits = 2;
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));
98     }
99
100     /**
101      * @MediumTest
102      * @Feature({"Android-ContentProvider"})
103      * BUG 154683
104      */
105     @DisabledTest
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]);
120         }
121
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));
149
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));
177     }
178
179     /**
180      * @MediumTest
181      * @Feature({"Android-ContentProvider"})
182      * BUG 154683
183      */
184     @DisabledTest
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 };
193
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]);
197         assertNotNull(uri);
198
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 + " = ?",
210                 selectionArgs);
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));
232     }
233
234     /**
235      * @MediumTest
236      * @Feature({"Android-ContentProvider"})
237      * BUG 154683
238      */
239     @DisabledTest
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]);
254         }
255
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 + " = ?",
260                 selectionArgs);
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 + " = ?",
271                 selectionArgs1);
272         cursor = getContentResolver().query(uris[1], null, null, null, null);
273         assertNotNull(cursor);
274         assertEquals(0, cursor.getCount());
275     }
276
277     /*
278      * Copied from CTS test with minor adaptations.
279      */
280     /**
281      * @MediumTest
282      * @Feature({"Android-ContentProvider"})
283      * BUG 154683
284      */
285     @DisabledTest
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;
299
300         final String insertBookmarkTitle = "bookmark_insert";
301         final String insertBookmarkUrl = "www.bookmark_insert.com";
302
303         final String updateBookmarkTitle = "bookmark_update";
304         final String updateBookmarkUrl = "www.bookmark_update.com";
305
306         // Test: insert.
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);
315
316         Uri insertUri = getContentResolver().insert(mBookmarksUri, value);
317         Cursor cursor = getContentResolver().query(
318                 mBookmarksUri,
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[].
331         // BUG 6288508
332         // assertTrue(cursor.isNull(FAVICON_INDEX));
333         int Id = cursor.getInt(ID_INDEX);
334         cursor.close();
335
336         // Test: update.
337         value.clear();
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);
343
344         getContentResolver().update(mBookmarksUri, value,
345                 BookmarkColumns.TITLE + " = ?",
346                 new String[] { insertBookmarkTitle });
347         cursor = getContentResolver().query(
348                 mBookmarksUri,
349                 BOOKMARKS_PROJECTION,
350                 BookmarkColumns._ID + " = " + Id,
351                 null, null);
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[].
360         // BUG 6288508
361         // assertTrue(cursor.isNull(FAVICON_INDEX));
362         assertEquals(Id, cursor.getInt(ID_INDEX));
363
364         // Test: delete.
365         getContentResolver().delete(insertUri, null, null);
366         cursor = getContentResolver().query(
367                 mBookmarksUri,
368                 BOOKMARKS_PROJECTION,
369                 BookmarkColumns._ID + " = " + Id,
370                 null, null);
371         assertEquals(0, cursor.getCount());
372     }
373 }