Bug 760956 - Part 6: Introduce basic topsites retrieval test r=rnewman draft
authorAndrzej Hunt <ahunt@mozilla.com>
Thu, 25 Feb 2016 16:59:07 -0800
changeset 335014 2c436475c74c2ad50f55c022fa33ad5de1011e33
parent 335013 363cdb8cea403217bdbed8d8e46f40e0ecb60b1c
child 335015 14fc23d70eb6eecc7bae50fc25577a5bc09770fd
push id11698
push userahunt@mozilla.com
push dateFri, 26 Feb 2016 18:23:22 +0000
reviewersrnewman
bugs760956
milestone47.0a1
Bug 760956 - Part 6: Introduce basic topsites retrieval test r=rnewman This is a quick sanity check: a clean profile should return all the suggested sites directly. We should probably add further tests making sure that history items appear in front of the suggested sites, that pinned sites work correctly, and that suggested sites don't appear outside of the grid. MozReview-Commit-ID: Ai8gTkv9E9w
mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestTopSites.java
--- a/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/StubBrowserDB.java
@@ -154,16 +154,17 @@ class StubTabsAccessor implements TabsAc
  * This base implementation just stubs all methods. For the
  * real implementations, see LocalBrowserDB.java.
  */
 public class StubBrowserDB implements BrowserDB {
     private final StubSearches searches = new StubSearches();
     private final StubTabsAccessor tabsAccessor = new StubTabsAccessor();
     private final StubURLMetadata urlMetadata = new StubURLMetadata();
     private final StubReadingListAccessor readingListAccessor = new StubReadingListAccessor();
+    private SuggestedSites suggestedSites = null;
 
     @Override
     public Searches getSearches() {
         return searches;
     }
 
     @Override
     public TabsAccessor getTabsAccessor() {
@@ -360,20 +361,21 @@ public class StubBrowserDB implements Br
     }
 
     @RobocopTarget
     public Cursor getBookmarkForUrl(ContentResolver cr, String url) {
         return null;
     }
 
     public void setSuggestedSites(SuggestedSites suggestedSites) {
+        this.suggestedSites = suggestedSites;
     }
 
     public SuggestedSites getSuggestedSites() {
-        return null;
+        return suggestedSites;
     }
 
     public boolean hasSuggestedImageUrl(String url) {
         return false;
     }
 
     public String getSuggestedImageUrlForUrl(String url) {
         return null;
--- a/mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
+++ b/mobile/android/tests/background/junit3/background_junit3_sources.mozbuild
@@ -16,16 +16,17 @@ background_junit3_sources = [
     'src/org/mozilla/gecko/background/db/TestBookmarks.java',
     'src/org/mozilla/gecko/background/db/TestCachedSQLiteOpenHelper.java',
     'src/org/mozilla/gecko/background/db/TestClientsDatabase.java',
     'src/org/mozilla/gecko/background/db/TestClientsDatabaseAccessor.java',
     'src/org/mozilla/gecko/background/db/TestFennecTabsRepositorySession.java',
     'src/org/mozilla/gecko/background/db/TestFennecTabsStorage.java',
     'src/org/mozilla/gecko/background/db/TestFormHistoryRepositorySession.java',
     'src/org/mozilla/gecko/background/db/TestPasswordsRepository.java',
+    'src/org/mozilla/gecko/background/db/TestTopSites.java',
     'src/org/mozilla/gecko/background/fxa/authenticator/TestAccountPickler.java',
     'src/org/mozilla/gecko/background/fxa/TestAccountLoader.java',
     'src/org/mozilla/gecko/background/fxa/TestBrowserIDKeyPairGeneration.java',
     'src/org/mozilla/gecko/background/helpers/AndroidSyncTestCase.java',
     'src/org/mozilla/gecko/background/helpers/BackgroundServiceTestCase.java',
     'src/org/mozilla/gecko/background/helpers/DBHelpers.java',
     'src/org/mozilla/gecko/background/helpers/DBProviderTestCase.java',
     'src/org/mozilla/gecko/background/nativecode/test/TestNativeCrypto.java',
new file mode 100644
--- /dev/null
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestTopSites.java
@@ -0,0 +1,91 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+package org.mozilla.gecko.background.db;
+
+
+import org.mozilla.gecko.GeckoProfile;
+import org.mozilla.gecko.db.BrowserContract;
+import org.mozilla.gecko.db.BrowserContract.Combined;
+import org.mozilla.gecko.db.SuggestedSites;
+import org.mozilla.gecko.sync.setup.Constants;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Exercise BrowserDB's getTopSites
+ *
+ * @author ahunt
+ *
+ */
+public class TestTopSites extends ActivityInstrumentationTestCase2<Activity> {
+    Context mContext;
+    SuggestedSites mSuggestedSites;
+
+    public TestTopSites() {
+        super(Activity.class);
+    }
+
+    @Override
+    public void setUp() {
+        mContext = getInstrumentation().getTargetContext();
+        mSuggestedSites = new SuggestedSites(mContext);
+
+        // By default we're using StubBrowserDB which has no suggested sites available.
+        GeckoProfile.get(mContext, Constants.DEFAULT_PROFILE).getDB().setSuggestedSites(mSuggestedSites);
+    }
+
+    @Override
+    public void tearDown() {
+        GeckoProfile.get(mContext, Constants.DEFAULT_PROFILE).getDB().setSuggestedSites(null);
+    }
+
+    public void testGetTopSites() {
+        final int SUGGESTED_LIMIT = 6;
+        final int TOTAL_LIMIT = 50;
+
+        ContentResolver cr = mContext.getContentResolver();
+
+        final Uri uri = BrowserContract.TopSites.CONTENT_URI
+                                .buildUpon()
+                                .appendQueryParameter(BrowserContract.PARAM_PROFILE,
+                                                      Constants.DEFAULT_PROFILE)
+                                .appendQueryParameter(BrowserContract.PARAM_LIMIT,
+                                                      String.valueOf(SUGGESTED_LIMIT))
+                                .appendQueryParameter(BrowserContract.PARAM_SUGGESTEDSITES_LIMIT,
+                                                      String.valueOf(TOTAL_LIMIT))
+                                .build();
+
+        final Cursor c = cr.query(uri,
+                                  new String[] { Combined._ID,
+                                          Combined.URL,
+                                          Combined.TITLE,
+                                          Combined.BOOKMARK_ID,
+                                          Combined.HISTORY_ID },
+                                  null,
+                                  null,
+                                  null);
+
+        int suggestedCount = 0;
+        try {
+            while (c.moveToNext()) {
+                int type = c.getInt(c.getColumnIndexOrThrow(BrowserContract.Bookmarks.TYPE));
+                assertEquals(BrowserContract.TopSites.TYPE_SUGGESTED, type);
+                suggestedCount++;
+            }
+        } finally {
+            c.close();
+        }
+
+        Cursor suggestedSitesCursor = mSuggestedSites.get(SUGGESTED_LIMIT);
+
+        assertEquals(suggestedSitesCursor.getCount(), suggestedCount);
+
+        suggestedSitesCursor.close();
+    }
+}