Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
4 package org.mozilla.gecko.background.db;
6 import org.json.simple.JSONArray;
7 import org.mozilla.gecko.db.BrowserContract;
8 import org.mozilla.gecko.sync.repositories.android.BrowserContractHelpers;
10 import android.app.Activity;
11 import android.content.ContentProviderClient;
12 import android.content.ContentResolver;
13 import android.content.ContentValues;
14 import android.database.Cursor;
15 import android.net.Uri;
16 import android.os.RemoteException;
17 import android.test.ActivityInstrumentationTestCase2;
19 /**
20 * Exercise Fennec's tabs provider.
21 *
22 * @author rnewman
23 *
24 */
25 public class TestFennecTabsStorage extends ActivityInstrumentationTestCase2<Activity> {
26 public static final String TEST_CLIENT_GUID = "test guid"; // Real GUIDs never contain spaces.
27 public static final String TEST_CLIENT_NAME = "test client name";
29 public static final String TABS_CLIENT_GUID_IS = BrowserContract.Tabs.CLIENT_GUID + " = ?";
31 protected Tab testTab1;
32 protected Tab testTab2;
33 protected Tab testTab3;
35 public TestFennecTabsStorage() {
36 super(Activity.class);
37 }
39 protected ContentProviderClient getClientsClient() {
40 final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver();
41 return cr.acquireContentProviderClient(BrowserContractHelpers.CLIENTS_CONTENT_URI);
42 }
44 protected ContentProviderClient getTabsClient() {
45 final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver();
46 return cr.acquireContentProviderClient(BrowserContractHelpers.TABS_CONTENT_URI);
47 }
49 protected int deleteAllTestTabs(final ContentProviderClient tabsClient) throws RemoteException {
50 if (tabsClient == null) {
51 return -1;
52 }
53 return tabsClient.delete(BrowserContractHelpers.TABS_CONTENT_URI, TABS_CLIENT_GUID_IS, new String[] { TEST_CLIENT_GUID });
54 }
56 @Override
57 protected void tearDown() throws Exception {
58 deleteAllTestTabs(getTabsClient());
59 }
61 @SuppressWarnings("unchecked")
62 protected void insertSomeTestTabs(ContentProviderClient tabsClient) throws RemoteException {
63 final JSONArray history1 = new JSONArray();
64 history1.add("http://test.com/test1.html");
65 testTab1 = new Tab("test title 1", "http://test.com/test1.png", history1, 1000);
67 final JSONArray history2 = new JSONArray();
68 history2.add("http://test.com/test2.html#1");
69 history2.add("http://test.com/test2.html#2");
70 history2.add("http://test.com/test2.html#3");
71 testTab2 = new Tab("test title 2", "http://test.com/test2.png", history2, 2000);
73 final JSONArray history3 = new JSONArray();
74 history3.add("http://test.com/test3.html#1");
75 history3.add("http://test.com/test3.html#2");
76 testTab3 = new Tab("test title 3", "http://test.com/test3.png", history3, 3000);
78 tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab1.toContentValues(TEST_CLIENT_GUID, 0));
79 tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab2.toContentValues(TEST_CLIENT_GUID, 1));
80 tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab3.toContentValues(TEST_CLIENT_GUID, 2));
81 }
83 // Sanity.
84 public void testObtainCP() {
85 final ContentProviderClient clientsClient = getClientsClient();
86 assertNotNull(clientsClient);
87 clientsClient.release();
89 final ContentProviderClient tabsClient = getTabsClient();
90 assertNotNull(tabsClient);
91 tabsClient.release();
92 }
94 public void testWipeClients() throws RemoteException {
95 final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI;
96 final ContentProviderClient clientsClient = getClientsClient();
98 // Have to ensure that it's empty…
99 clientsClient.delete(uri, null, null);
101 int deleted = clientsClient.delete(uri, null, null);
102 assertEquals(0, deleted);
103 }
105 public void testWipeTabs() throws RemoteException {
106 final ContentProviderClient tabsClient = getTabsClient();
108 // Have to ensure that it's empty…
109 deleteAllTestTabs(tabsClient);
111 int deleted = deleteAllTestTabs(tabsClient);
112 assertEquals(0, deleted);
113 }
115 public void testStoreAndRetrieveClients() throws RemoteException {
116 final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI;
117 final ContentProviderClient clientsClient = getClientsClient();
119 // Have to ensure that it's empty…
120 clientsClient.delete(uri, null, null);
122 final long now = System.currentTimeMillis();
123 final ContentValues first = new ContentValues();
124 final ContentValues second = new ContentValues();
125 first.put(BrowserContract.Clients.GUID, "abcdefghijkl");
126 first.put(BrowserContract.Clients.NAME, "Frist Psot");
127 first.put(BrowserContract.Clients.LAST_MODIFIED, now + 1);
128 second.put(BrowserContract.Clients.GUID, "mnopqrstuvwx");
129 second.put(BrowserContract.Clients.NAME, "Second!!1!");
130 second.put(BrowserContract.Clients.LAST_MODIFIED, now + 2);
132 ContentValues[] values = new ContentValues[] { first, second };
133 final int inserted = clientsClient.bulkInsert(uri, values);
134 assertEquals(2, inserted);
136 final String since = BrowserContract.Clients.LAST_MODIFIED + " >= ?";
137 final String[] nowArg = new String[] { String.valueOf(now) };
138 final String guidAscending = BrowserContract.Clients.GUID + " ASC";
139 Cursor cursor = clientsClient.query(uri, null, since, nowArg, guidAscending);
141 assertNotNull(cursor);
142 try {
143 assertTrue(cursor.moveToFirst());
144 assertEquals(2, cursor.getCount());
146 final String g1 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.GUID));
147 final String n1 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.NAME));
148 final long m1 = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Clients.LAST_MODIFIED));
149 assertEquals(first.get(BrowserContract.Clients.GUID), g1);
150 assertEquals(first.get(BrowserContract.Clients.NAME), n1);
151 assertEquals(now + 1, m1);
153 assertTrue(cursor.moveToNext());
154 final String g2 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.GUID));
155 final String n2 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.NAME));
156 final long m2 = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Clients.LAST_MODIFIED));
157 assertEquals(second.get(BrowserContract.Clients.GUID), g2);
158 assertEquals(second.get(BrowserContract.Clients.NAME), n2);
159 assertEquals(now + 2, m2);
161 assertFalse(cursor.moveToNext());
162 } finally {
163 cursor.close();
164 }
166 int deleted = clientsClient.delete(uri, null, null);
167 assertEquals(2, deleted);
168 }
170 public void testTabFromCursor() throws Exception {
171 final ContentProviderClient tabsClient = getTabsClient();
173 deleteAllTestTabs(tabsClient);
174 insertSomeTestTabs(tabsClient);
176 final String positionAscending = BrowserContract.Tabs.POSITION + " ASC";
177 Cursor cursor = null;
178 try {
179 cursor = tabsClient.query(BrowserContractHelpers.TABS_CONTENT_URI, null, TABS_CLIENT_GUID_IS, new String[] { TEST_CLIENT_GUID }, positionAscending);
180 assertEquals(3, cursor.getCount());
182 cursor.moveToFirst();
183 final Tab parsed1 = Tab.fromCursor(cursor);
184 assertEquals(testTab1, parsed1);
186 cursor.moveToNext();
187 final Tab parsed2 = Tab.fromCursor(cursor);
188 assertEquals(testTab2, parsed2);
190 cursor.moveToPosition(2);
191 final Tab parsed3 = Tab.fromCursor(cursor);
192 assertEquals(testTab3, parsed3);
193 } finally {
194 cursor.close();
195 }
196 }
197 }