Bug 1252610 - Expand TestTopSites to cover the empty SuggestedSites case r=liuche draft
authorAndrzej Hunt <ahunt@mozilla.com>
Tue, 01 Mar 2016 13:50:46 -0800
changeset 335891 02c7011f04cc5c7459cad65cccc0b55fa3d60534
parent 335890 e9ece842484ea554ef91e3d0f947d5070979e7cb
child 515252 d0f2df6eda3dbc1f4f12d40d893134c58952c355
push id11916
push userahunt@mozilla.com
push dateTue, 01 Mar 2016 21:57:47 +0000
reviewersliuche
bugs1252610, 1249018
milestone47.0a1
Bug 1252610 - Expand TestTopSites to cover the empty SuggestedSites case r=liuche There is some duplication of the column names, however we're aiming to remove all the MatrixCursor stuff in Bug 1249018 anyways. MozReview-Commit-ID: 2y86EQLqc2c
mobile/android/base/java/org/mozilla/gecko/db/StubSuggestedSites.java
mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestTopSites.java
new file mode 100644
--- /dev/null
+++ b/mobile/android/base/java/org/mozilla/gecko/db/StubSuggestedSites.java
@@ -0,0 +1,60 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.gecko.db;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+
+import org.mozilla.gecko.db.BrowserContract.Bookmarks;
+
+import java.util.List;
+import java.util.Locale;
+
+public class StubSuggestedSites implements SuggestedSites {
+    @Override
+    public Cursor get(int limit) {
+        return get(limit, null, null);
+    }
+
+    @Override
+    public Cursor get(int limit, Locale locale) {
+        return get(limit, locale, null);
+    }
+
+    @Override
+    public Cursor get(int limit, List<String> excludeUrls) {
+        return get(limit, null, excludeUrls);
+    }
+
+    @Override
+    public Cursor get(int limit, Locale locale, List<String> excludeUrls) {
+        return new MatrixCursor(new String[] {
+                Bookmarks._ID,
+                Bookmarks.URL,
+                Bookmarks.TITLE
+        });
+    }
+
+    @Override
+    public boolean contains(String url) {
+        return false;
+    }
+
+    @Override
+    public String getImageUrlForUrl(String url) {
+        return null;
+    }
+
+    @Override
+    public String getBackgroundColorForUrl(String url) {
+        return null;
+    }
+
+    @Override
+    public boolean hideSite(String url) {
+        return false;
+    }
+}
--- a/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestTopSites.java
+++ b/mobile/android/tests/background/junit3/src/org/mozilla/gecko/background/db/TestTopSites.java
@@ -3,16 +3,17 @@
 
 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.LocalSuggestedSites;
+import org.mozilla.gecko.db.StubSuggestedSites;
 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;
@@ -22,37 +23,52 @@ import android.test.ActivityInstrumentat
  * Exercise BrowserDB's getTopSites
  *
  * @author ahunt
  *
  */
 public class TestTopSites extends ActivityInstrumentationTestCase2<Activity> {
     Context mContext;
     SuggestedSites mSuggestedSites;
+    SuggestedSites mEmptySuggestedSites;
 
     public TestTopSites() {
         super(Activity.class);
     }
 
     @Override
     public void setUp() {
         mContext = getInstrumentation().getTargetContext();
         mSuggestedSites = new LocalSuggestedSites(mContext);
+        mEmptySuggestedSites = new StubSuggestedSites();
     }
 
     @Override
     public void tearDown() {
         GeckoProfile.get(mContext, Constants.DEFAULT_PROFILE).getDB().setSuggestedSites(null);
     }
 
-    public void testGetTopSites() {
+    public void testTopSites() {
+        verifyGetTopSites(mContext, mSuggestedSites);
+    }
+
+    public void testTopSitesWithEmptySuggestedSites() {
+        GeckoProfile.get(mContext, Constants.DEFAULT_PROFILE).getDB().setSuggestedSites(mEmptySuggestedSites);
+
+        verifyGetTopSites(mContext, mEmptySuggestedSites);
+    }
+
+    private static void verifyGetTopSites(Context context, SuggestedSites suggestedSites) {
+        // By default we're using StubBrowserDB which has no suggested sites available.
+        GeckoProfile.get(context, Constants.DEFAULT_PROFILE).getDB().setSuggestedSites(suggestedSites);
+
         final int SUGGESTED_LIMIT = 6;
         final int TOTAL_LIMIT = 50;
 
-        ContentResolver cr = mContext.getContentResolver();
+        ContentResolver cr = context.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,
@@ -66,24 +82,26 @@ public class TestTopSites extends Activi
                                           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++;
+            if (c.moveToFirst()) {
+                do {
+                    int type = c.getInt(c.getColumnIndexOrThrow(BrowserContract.Bookmarks.TYPE));
+                    assertEquals(BrowserContract.TopSites.TYPE_SUGGESTED, type);
+                    suggestedCount++;
+                } while (c.moveToNext());
             }
         } finally {
             c.close();
         }
 
-        Cursor suggestedSitesCursor = mSuggestedSites.get(SUGGESTED_LIMIT);
+        Cursor suggestedSitesCursor = suggestedSites.get(SUGGESTED_LIMIT);
 
         assertEquals(suggestedSitesCursor.getCount(), suggestedCount);
 
         suggestedSitesCursor.close();
     }
 }