mobile/android/tests/background/junit3/src/db/TestFennecTabsStorage.java

branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
equal deleted inserted replaced
-1:000000000000 0:03320cd89160
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
3
4 package org.mozilla.gecko.background.db;
5
6 import org.json.simple.JSONArray;
7 import org.mozilla.gecko.db.BrowserContract;
8 import org.mozilla.gecko.sync.repositories.android.BrowserContractHelpers;
9
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;
18
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";
28
29 public static final String TABS_CLIENT_GUID_IS = BrowserContract.Tabs.CLIENT_GUID + " = ?";
30
31 protected Tab testTab1;
32 protected Tab testTab2;
33 protected Tab testTab3;
34
35 public TestFennecTabsStorage() {
36 super(Activity.class);
37 }
38
39 protected ContentProviderClient getClientsClient() {
40 final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver();
41 return cr.acquireContentProviderClient(BrowserContractHelpers.CLIENTS_CONTENT_URI);
42 }
43
44 protected ContentProviderClient getTabsClient() {
45 final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver();
46 return cr.acquireContentProviderClient(BrowserContractHelpers.TABS_CONTENT_URI);
47 }
48
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 }
55
56 @Override
57 protected void tearDown() throws Exception {
58 deleteAllTestTabs(getTabsClient());
59 }
60
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);
66
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);
72
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);
77
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 }
82
83 // Sanity.
84 public void testObtainCP() {
85 final ContentProviderClient clientsClient = getClientsClient();
86 assertNotNull(clientsClient);
87 clientsClient.release();
88
89 final ContentProviderClient tabsClient = getTabsClient();
90 assertNotNull(tabsClient);
91 tabsClient.release();
92 }
93
94 public void testWipeClients() throws RemoteException {
95 final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI;
96 final ContentProviderClient clientsClient = getClientsClient();
97
98 // Have to ensure that it's empty…
99 clientsClient.delete(uri, null, null);
100
101 int deleted = clientsClient.delete(uri, null, null);
102 assertEquals(0, deleted);
103 }
104
105 public void testWipeTabs() throws RemoteException {
106 final ContentProviderClient tabsClient = getTabsClient();
107
108 // Have to ensure that it's empty…
109 deleteAllTestTabs(tabsClient);
110
111 int deleted = deleteAllTestTabs(tabsClient);
112 assertEquals(0, deleted);
113 }
114
115 public void testStoreAndRetrieveClients() throws RemoteException {
116 final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI;
117 final ContentProviderClient clientsClient = getClientsClient();
118
119 // Have to ensure that it's empty…
120 clientsClient.delete(uri, null, null);
121
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);
131
132 ContentValues[] values = new ContentValues[] { first, second };
133 final int inserted = clientsClient.bulkInsert(uri, values);
134 assertEquals(2, inserted);
135
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);
140
141 assertNotNull(cursor);
142 try {
143 assertTrue(cursor.moveToFirst());
144 assertEquals(2, cursor.getCount());
145
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);
152
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);
160
161 assertFalse(cursor.moveToNext());
162 } finally {
163 cursor.close();
164 }
165
166 int deleted = clientsClient.delete(uri, null, null);
167 assertEquals(2, deleted);
168 }
169
170 public void testTabFromCursor() throws Exception {
171 final ContentProviderClient tabsClient = getTabsClient();
172
173 deleteAllTestTabs(tabsClient);
174 insertSomeTestTabs(tabsClient);
175
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());
181
182 cursor.moveToFirst();
183 final Tab parsed1 = Tab.fromCursor(cursor);
184 assertEquals(testTab1, parsed1);
185
186 cursor.moveToNext();
187 final Tab parsed2 = Tab.fromCursor(cursor);
188 assertEquals(testTab2, parsed2);
189
190 cursor.moveToPosition(2);
191 final Tab parsed3 = Tab.fromCursor(cursor);
192 assertEquals(testTab3, parsed3);
193 } finally {
194 cursor.close();
195 }
196 }
197 }

mercurial