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

changeset 0
6474c204b198
     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 +}

mercurial