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