1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mobile/android/tests/background/junit3/src/db/TestFennecTabsStorage.java Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,197 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +package org.mozilla.gecko.background.db; 1.8 + 1.9 +import org.json.simple.JSONArray; 1.10 +import org.mozilla.gecko.db.BrowserContract; 1.11 +import org.mozilla.gecko.sync.repositories.android.BrowserContractHelpers; 1.12 + 1.13 +import android.app.Activity; 1.14 +import android.content.ContentProviderClient; 1.15 +import android.content.ContentResolver; 1.16 +import android.content.ContentValues; 1.17 +import android.database.Cursor; 1.18 +import android.net.Uri; 1.19 +import android.os.RemoteException; 1.20 +import android.test.ActivityInstrumentationTestCase2; 1.21 + 1.22 +/** 1.23 + * Exercise Fennec's tabs provider. 1.24 + * 1.25 + * @author rnewman 1.26 + * 1.27 + */ 1.28 +public class TestFennecTabsStorage extends ActivityInstrumentationTestCase2<Activity> { 1.29 + public static final String TEST_CLIENT_GUID = "test guid"; // Real GUIDs never contain spaces. 1.30 + public static final String TEST_CLIENT_NAME = "test client name"; 1.31 + 1.32 + public static final String TABS_CLIENT_GUID_IS = BrowserContract.Tabs.CLIENT_GUID + " = ?"; 1.33 + 1.34 + protected Tab testTab1; 1.35 + protected Tab testTab2; 1.36 + protected Tab testTab3; 1.37 + 1.38 + public TestFennecTabsStorage() { 1.39 + super(Activity.class); 1.40 + } 1.41 + 1.42 + protected ContentProviderClient getClientsClient() { 1.43 + final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver(); 1.44 + return cr.acquireContentProviderClient(BrowserContractHelpers.CLIENTS_CONTENT_URI); 1.45 + } 1.46 + 1.47 + protected ContentProviderClient getTabsClient() { 1.48 + final ContentResolver cr = getInstrumentation().getTargetContext().getApplicationContext().getContentResolver(); 1.49 + return cr.acquireContentProviderClient(BrowserContractHelpers.TABS_CONTENT_URI); 1.50 + } 1.51 + 1.52 + protected int deleteAllTestTabs(final ContentProviderClient tabsClient) throws RemoteException { 1.53 + if (tabsClient == null) { 1.54 + return -1; 1.55 + } 1.56 + return tabsClient.delete(BrowserContractHelpers.TABS_CONTENT_URI, TABS_CLIENT_GUID_IS, new String[] { TEST_CLIENT_GUID }); 1.57 + } 1.58 + 1.59 + @Override 1.60 + protected void tearDown() throws Exception { 1.61 + deleteAllTestTabs(getTabsClient()); 1.62 + } 1.63 + 1.64 + @SuppressWarnings("unchecked") 1.65 + protected void insertSomeTestTabs(ContentProviderClient tabsClient) throws RemoteException { 1.66 + final JSONArray history1 = new JSONArray(); 1.67 + history1.add("http://test.com/test1.html"); 1.68 + testTab1 = new Tab("test title 1", "http://test.com/test1.png", history1, 1000); 1.69 + 1.70 + final JSONArray history2 = new JSONArray(); 1.71 + history2.add("http://test.com/test2.html#1"); 1.72 + history2.add("http://test.com/test2.html#2"); 1.73 + history2.add("http://test.com/test2.html#3"); 1.74 + testTab2 = new Tab("test title 2", "http://test.com/test2.png", history2, 2000); 1.75 + 1.76 + final JSONArray history3 = new JSONArray(); 1.77 + history3.add("http://test.com/test3.html#1"); 1.78 + history3.add("http://test.com/test3.html#2"); 1.79 + testTab3 = new Tab("test title 3", "http://test.com/test3.png", history3, 3000); 1.80 + 1.81 + tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab1.toContentValues(TEST_CLIENT_GUID, 0)); 1.82 + tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab2.toContentValues(TEST_CLIENT_GUID, 1)); 1.83 + tabsClient.insert(BrowserContractHelpers.TABS_CONTENT_URI, testTab3.toContentValues(TEST_CLIENT_GUID, 2)); 1.84 + } 1.85 + 1.86 + // Sanity. 1.87 + public void testObtainCP() { 1.88 + final ContentProviderClient clientsClient = getClientsClient(); 1.89 + assertNotNull(clientsClient); 1.90 + clientsClient.release(); 1.91 + 1.92 + final ContentProviderClient tabsClient = getTabsClient(); 1.93 + assertNotNull(tabsClient); 1.94 + tabsClient.release(); 1.95 + } 1.96 + 1.97 + public void testWipeClients() throws RemoteException { 1.98 + final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI; 1.99 + final ContentProviderClient clientsClient = getClientsClient(); 1.100 + 1.101 + // Have to ensure that it's empty… 1.102 + clientsClient.delete(uri, null, null); 1.103 + 1.104 + int deleted = clientsClient.delete(uri, null, null); 1.105 + assertEquals(0, deleted); 1.106 + } 1.107 + 1.108 + public void testWipeTabs() throws RemoteException { 1.109 + final ContentProviderClient tabsClient = getTabsClient(); 1.110 + 1.111 + // Have to ensure that it's empty… 1.112 + deleteAllTestTabs(tabsClient); 1.113 + 1.114 + int deleted = deleteAllTestTabs(tabsClient); 1.115 + assertEquals(0, deleted); 1.116 + } 1.117 + 1.118 + public void testStoreAndRetrieveClients() throws RemoteException { 1.119 + final Uri uri = BrowserContractHelpers.CLIENTS_CONTENT_URI; 1.120 + final ContentProviderClient clientsClient = getClientsClient(); 1.121 + 1.122 + // Have to ensure that it's empty… 1.123 + clientsClient.delete(uri, null, null); 1.124 + 1.125 + final long now = System.currentTimeMillis(); 1.126 + final ContentValues first = new ContentValues(); 1.127 + final ContentValues second = new ContentValues(); 1.128 + first.put(BrowserContract.Clients.GUID, "abcdefghijkl"); 1.129 + first.put(BrowserContract.Clients.NAME, "Frist Psot"); 1.130 + first.put(BrowserContract.Clients.LAST_MODIFIED, now + 1); 1.131 + second.put(BrowserContract.Clients.GUID, "mnopqrstuvwx"); 1.132 + second.put(BrowserContract.Clients.NAME, "Second!!1!"); 1.133 + second.put(BrowserContract.Clients.LAST_MODIFIED, now + 2); 1.134 + 1.135 + ContentValues[] values = new ContentValues[] { first, second }; 1.136 + final int inserted = clientsClient.bulkInsert(uri, values); 1.137 + assertEquals(2, inserted); 1.138 + 1.139 + final String since = BrowserContract.Clients.LAST_MODIFIED + " >= ?"; 1.140 + final String[] nowArg = new String[] { String.valueOf(now) }; 1.141 + final String guidAscending = BrowserContract.Clients.GUID + " ASC"; 1.142 + Cursor cursor = clientsClient.query(uri, null, since, nowArg, guidAscending); 1.143 + 1.144 + assertNotNull(cursor); 1.145 + try { 1.146 + assertTrue(cursor.moveToFirst()); 1.147 + assertEquals(2, cursor.getCount()); 1.148 + 1.149 + final String g1 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.GUID)); 1.150 + final String n1 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.NAME)); 1.151 + final long m1 = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Clients.LAST_MODIFIED)); 1.152 + assertEquals(first.get(BrowserContract.Clients.GUID), g1); 1.153 + assertEquals(first.get(BrowserContract.Clients.NAME), n1); 1.154 + assertEquals(now + 1, m1); 1.155 + 1.156 + assertTrue(cursor.moveToNext()); 1.157 + final String g2 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.GUID)); 1.158 + final String n2 = cursor.getString(cursor.getColumnIndexOrThrow(BrowserContract.Clients.NAME)); 1.159 + final long m2 = cursor.getLong(cursor.getColumnIndexOrThrow(BrowserContract.Clients.LAST_MODIFIED)); 1.160 + assertEquals(second.get(BrowserContract.Clients.GUID), g2); 1.161 + assertEquals(second.get(BrowserContract.Clients.NAME), n2); 1.162 + assertEquals(now + 2, m2); 1.163 + 1.164 + assertFalse(cursor.moveToNext()); 1.165 + } finally { 1.166 + cursor.close(); 1.167 + } 1.168 + 1.169 + int deleted = clientsClient.delete(uri, null, null); 1.170 + assertEquals(2, deleted); 1.171 + } 1.172 + 1.173 + public void testTabFromCursor() throws Exception { 1.174 + final ContentProviderClient tabsClient = getTabsClient(); 1.175 + 1.176 + deleteAllTestTabs(tabsClient); 1.177 + insertSomeTestTabs(tabsClient); 1.178 + 1.179 + final String positionAscending = BrowserContract.Tabs.POSITION + " ASC"; 1.180 + Cursor cursor = null; 1.181 + try { 1.182 + cursor = tabsClient.query(BrowserContractHelpers.TABS_CONTENT_URI, null, TABS_CLIENT_GUID_IS, new String[] { TEST_CLIENT_GUID }, positionAscending); 1.183 + assertEquals(3, cursor.getCount()); 1.184 + 1.185 + cursor.moveToFirst(); 1.186 + final Tab parsed1 = Tab.fromCursor(cursor); 1.187 + assertEquals(testTab1, parsed1); 1.188 + 1.189 + cursor.moveToNext(); 1.190 + final Tab parsed2 = Tab.fromCursor(cursor); 1.191 + assertEquals(testTab2, parsed2); 1.192 + 1.193 + cursor.moveToPosition(2); 1.194 + final Tab parsed3 = Tab.fromCursor(cursor); 1.195 + assertEquals(testTab3, parsed3); 1.196 + } finally { 1.197 + cursor.close(); 1.198 + } 1.199 + } 1.200 +}