1ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck/* 2ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * Copyright (C) 2011 The Android Open Source Project 3ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * 4ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * you may not use this file except in compliance with the License. 6ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * You may obtain a copy of the License at 7ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * 8ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * http://www.apache.org/licenses/LICENSE-2.0 9ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * 10ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * Unless required by applicable law or agreed to in writing, software 11ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * distributed under the License is distributed on an "AS IS" BASIS, 12ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * See the License for the specific language governing permissions and 14ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * limitations under the License. 15ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck */ 16ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 17ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckpackage com.android.browser.tests; 18ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 19ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport com.android.browser.provider.BrowserProvider; 20ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport com.android.browser.tests.utils.BP2TestCaseHelper; 21ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 22ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.content.ContentUris; 23ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.content.ContentValues; 24ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.database.Cursor; 25ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.graphics.Bitmap; 26ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.graphics.Bitmap.Config; 27ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.net.Uri; 28ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.Browser; 29ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.Browser.BookmarkColumns; 30ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.BrowserContract; 31ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.BrowserContract.Bookmarks; 32ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.BrowserContract.History; 33ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.provider.BrowserContract.Images; 34ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport android.test.suitebuilder.annotation.SmallTest; 35ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 36ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport java.io.ByteArrayOutputStream; 37ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckimport java.util.ArrayList; 38ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 39ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck@SmallTest 40ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reckpublic class BP1to2UpgradeTests extends BP2TestCaseHelper { 41ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 42ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck BrowserProvider mBp1; 43ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 44ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck @Override 45ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck protected void setUp() throws Exception { 46ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck super.setUp(); 47ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1 = new BrowserProvider(); 48ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1.attachInfo(getMockContext(), null); 49ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 50ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 51ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck /** 52ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck * Test that simply makes sure BP1->BP2 with no changes works as intended 53ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck */ 54ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck public void testStockUpgrade() { 55ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck Cursor c = mBp1.query(Browser.BOOKMARKS_URI, 56ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { BookmarkColumns.URL }, null, null, 57ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck BookmarkColumns.URL + " DESC"); 58ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck ArrayList<String> urls = new ArrayList<String>(c.getCount()); 59ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck while (c.moveToNext()) { 60ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck urls.add(c.getString(0)); 61ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 62ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 63ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // First, test the public API (which will hit BP2) 64ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c = getMockContentResolver().query(Browser.BOOKMARKS_URI, 65ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { BookmarkColumns.URL }, null, null, 66ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck BookmarkColumns.URL + " DESC"); 67ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(urls.size(), c.getCount()); 68ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck int i = 0; 69ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck while (c.moveToNext()) { 70ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(urls.get(i++), c.getString(0)); 71ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 72ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 73ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // Next, test BP2's new API (not a public API) 74ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c = getMockContentResolver().query(Bookmarks.CONTENT_URI, 75ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { Bookmarks.URL }, null, null, 76ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck Bookmarks.URL + " DESC"); 77ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(urls.size(), c.getCount()); 78ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck i = 0; 79ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck while (c.moveToNext()) { 80ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(urls.get(i++), c.getString(0)); 81ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 82ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 83ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 84ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 85ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck public void testPreserveHistory() { 86ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck ContentValues values = new ContentValues(); 87ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.URL, "http://slashdot.org/"); 88ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.BOOKMARK, 0); 89ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.DATE, 123456); 90ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1.insert(Browser.BOOKMARKS_URI, values); 91ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // First, test internal API 92ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck Cursor c = getMockContentResolver().query(History.CONTENT_URI, 93ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { History.URL, History.DATE_LAST_VISITED }, 94ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck null, null, null); 95ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(1, c.getCount()); 96ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertTrue(c.moveToFirst()); 97ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("http://slashdot.org/", c.getString(0)); 98ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(123456, c.getInt(1)); 99ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 100ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // Next, test public API 101ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c = getMockContentResolver().query(Browser.BOOKMARKS_URI, 102a25ba4eab91ffdaac6814b575ec56bdf36aeb3daJohn Reck Browser.HISTORY_PROJECTION, BookmarkColumns.BOOKMARK + " = 0", 103a25ba4eab91ffdaac6814b575ec56bdf36aeb3daJohn Reck null, null); 104ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("public API", 1, c.getCount()); 105ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertTrue(c.moveToFirst()); 106ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("http://slashdot.org/", 107ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.getString(Browser.HISTORY_PROJECTION_URL_INDEX)); 108ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(123456, c.getInt(Browser.HISTORY_PROJECTION_DATE_INDEX)); 109ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 110ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 111ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 112ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck public void testPreserveBookmarks() { 113ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // First, nuke 'er (deletes stock bookmarks) 114ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1.delete(Browser.BOOKMARKS_URI, null, null); 115ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck ContentValues values = new ContentValues(); 116ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.URL, "http://slashdot.org/"); 117ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.BOOKMARK, 1); 118ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck values.put(BookmarkColumns.CREATED, 123456); 119ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1.insert(Browser.BOOKMARKS_URI, values); 120ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // First, test internal API 121ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck Cursor c = getMockContentResolver().query(Bookmarks.CONTENT_URI, 122ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { Bookmarks.URL, Bookmarks.DATE_CREATED }, 123ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck null, null, null); 124ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(1, c.getCount()); 125ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertTrue(c.moveToFirst()); 126ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("http://slashdot.org/", c.getString(0)); 127ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(123456, c.getInt(1)); 128ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 129ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck // Next, test public API 130ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c = getMockContentResolver().query(Browser.BOOKMARKS_URI, 131ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck new String[] { BookmarkColumns.URL, BookmarkColumns.CREATED }, 132a25ba4eab91ffdaac6814b575ec56bdf36aeb3daJohn Reck BookmarkColumns.BOOKMARK + " = 1", null, null); 133ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("public API", 1, c.getCount()); 134ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertTrue(c.moveToFirst()); 135ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals("http://slashdot.org/", c.getString(0)); 136ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(123456, c.getInt(1)); 137ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 138ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 139ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 140ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck public void testEmptyUpgrade() { 141ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck mBp1.delete(Browser.BOOKMARKS_URI, null, null); 142ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck Cursor c = getMockContentResolver().query(Bookmarks.CONTENT_URI, 143ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck null, null, null, null); 144ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck assertEquals(0, c.getCount()); 145ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck c.close(); 146ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck } 147ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck 148ad662f04ed7fbd9ce464fed54fd7764290e800e8John Reck} 149