Bug 760956 - Post: Cleanup TopSitesCursorWrapper remainders r=rnewman
MozReview-Commit-ID: ExIkvmfJO5O
deleted file mode 100644
--- a/mobile/android/base/java/org/mozilla/gecko/db/TopSitesCursorWrapper.java
+++ /dev/null
@@ -1,588 +0,0 @@
-/* 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 java.util.HashMap;
-import java.util.Map;
-
-import org.mozilla.gecko.db.BrowserContract.Bookmarks;
-import org.mozilla.gecko.db.BrowserContract.TopSites;
-
-import android.content.ContentResolver;
-import android.database.CharArrayBuffer;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.net.Uri;
-import android.os.Bundle;
-import android.util.SparseBooleanArray;
-import android.util.SparseIntArray;
-
-/**
- * {@TopSitesCursorWrapper} is a cursor wrapper that merges
- * the top and pinned sites cursors into one. It ensures the
- * cursor will contain at least a given minimum number of
- * entries.
- */
-public class TopSitesCursorWrapper implements Cursor {
- private enum RowType {
- UNKNOWN,
- BLANK,
- TOP,
- PINNED,
- SUGGESTED
- }
-
- private static final String[] columnNames = new String[] {
- TopSites._ID,
- TopSites.URL,
- TopSites.TITLE,
- TopSites.BOOKMARK_ID,
- TopSites.HISTORY_ID,
- TopSites.TYPE,
- };
-
- private static final Map<String, Integer> columnIndexes =
- new HashMap<String, Integer>(columnNames.length);
-
- static {
- for (int i = 0; i < columnNames.length; i++) {
- columnIndexes.put(columnNames[i], i);
- }
- }
-
- // Maps column indexes from the wrapper's to the cursor's.
- private SparseIntArray topIndexes;
- private SparseIntArray pinnedIndexes;
- private SparseIntArray suggestedIndexes;
-
- // Type of content in the current position.
- private RowType currentRowType;
-
- // Currently active cursor.
- private Cursor currentCursor;
-
- // The cursor for the top sites query. Never null.
- private final Cursor topCursor;
-
- // The cursor for the pinned sites query. Never null.
- private final Cursor pinnedCursor;
-
- // The cursor for the suggested sites query. Can be null.
- private final Cursor suggestedCursor;
-
- // Associates pinned sites and their respective positions.
- private final SparseBooleanArray pinnedPositions = new SparseBooleanArray();
-
- // Current position of the cursor.
- private int currentPosition = -1;
-
- // Number of pinned sites before the current position.
- private int pinnedBefore;
-
- // The size of the cursor wrapper.
- private int count;
-
- // The minimum size of the cursor wrapper.
- private final int minSize;
-
- public TopSitesCursorWrapper(Cursor pinnedCursor, Cursor topCursor, int minSize) {
- this(pinnedCursor, topCursor, null, minSize);
- }
-
- public TopSitesCursorWrapper(Cursor pinnedCursor, Cursor topCursor, Cursor suggestedCursor, int minSize) {
- currentRowType = RowType.UNKNOWN;
-
- this.minSize = minSize;
-
- // These must not be null.
- if (topCursor == null) {
- throw new IllegalArgumentException("topCursor is null.");
- }
-
- if (pinnedCursor == null) {
- throw new IllegalArgumentException("pinnedCursor is null.");
- }
-
- this.topCursor = topCursor;
- this.pinnedCursor = pinnedCursor;
-
- // Can be null.
- this.suggestedCursor = suggestedCursor;
-
- updateIndexMaps();
- updatePinnedPositions();
- updateCount();
- }
-
- private void updateIndexMaps() {
- topIndexes = new SparseIntArray(topCursor.getColumnCount());
- updateIndexMapFromCursor(topIndexes, topCursor);
-
- pinnedIndexes = new SparseIntArray(pinnedCursor.getColumnCount());
- updateIndexMapFromCursor(pinnedIndexes, pinnedCursor);
-
- if (suggestedCursor != null) {
- suggestedIndexes = new SparseIntArray(suggestedCursor.getColumnCount());
- updateIndexMapFromCursor(suggestedIndexes, suggestedCursor);
- }
- }
-
- private static void updateIndexMapFromCursor(SparseIntArray indexMap, Cursor c) {
- final int columnCount = c.getColumnCount();
- for (int i = 0; i < columnCount; i++) {
- final Integer index = columnIndexes.get(c.getColumnName(i));
- if (index != null) {
- indexMap.put(index, i);
- }
- }
- }
-
- private void updatePinnedPositions() {
- pinnedPositions.clear();
-
- pinnedCursor.moveToPosition(-1);
- while (pinnedCursor.moveToNext()) {
- int pos = pinnedCursor.getInt(pinnedCursor.getColumnIndex(Bookmarks.POSITION));
- pinnedPositions.put(pos, true);
- };
- }
-
- private void updateCount() {
- int sum = pinnedCursor.getCount() + topCursor.getCount();
- if (suggestedCursor != null) {
- sum += suggestedCursor.getCount();
- }
-
- count = Math.max(minSize, sum);
- }
-
- private static boolean cursorHasValidPosition(Cursor c) {
- return (c != null && !c.isBeforeFirst() && !c.isAfterLast());
- }
-
- private void updatePinnedBefore(int position) {
- pinnedBefore = 0;
- for (int i = 0; i < position; i++) {
- if (pinnedPositions.get(i)) {
- pinnedBefore++;
- }
- }
- }
-
- private void setCurrentCursor(Cursor cursor, int position, RowType rowType) {
- cursor.moveToPosition(position);
- currentRowType = rowType;
- currentCursor = cursor;
- }
-
- private boolean updateTopCursorPosition(int position) {
- final int index = position - pinnedBefore;
- if (index >= 0 && index < topCursor.getCount()) {
- setCurrentCursor(topCursor, index, RowType.TOP);
- return true;
- }
-
- return false;
- }
-
- private boolean updatePinnedCursorPosition(int position) {
- if (position >= minSize) {
- return false;
- }
-
- if (pinnedPositions.get(position)) {
- setCurrentCursor(pinnedCursor, pinnedPositions.indexOfKey(position), RowType.PINNED);
- return true;
- }
-
- return false;
- }
-
- private boolean updateSuggestedCursorPosition(int position) {
- if (suggestedCursor == null) {
- return false;
- }
-
- if (position >= minSize) {
- return false;
- }
-
- final int index = position - pinnedBefore - topCursor.getCount();
- if (index >= 0 && index < suggestedCursor.getCount()) {
- setCurrentCursor(suggestedCursor, index, RowType.SUGGESTED);
- return true;
- }
-
- return false;
- }
-
- private void assertValidColumnIndex(int columnIndex) {
- if (columnIndex < 0 || columnIndex > columnNames.length - 1) {
- throw new IllegalArgumentException("Column index is out of bounds: " + columnIndex);
- }
- }
-
- private void assertValidRowType() {
- if (currentRowType == RowType.UNKNOWN) {
- throw new IllegalStateException("No provided cursor holds data at this position");
- }
- }
-
- private int getColumnIndexForCurrentRowType(int columnIndex) {
- assertValidRowType();
- assertValidColumnIndex(columnIndex);
-
- SparseIntArray map = null;
-
- switch (currentRowType) {
- case TOP:
- map = topIndexes;
- break;
-
- case PINNED:
- map = pinnedIndexes;
- break;
-
- case SUGGESTED:
- map = suggestedIndexes;
- break;
-
- default:
- return -1;
- }
-
- if (map != null) {
- return map.get(columnIndex, -1);
- }
-
- return -1;
- }
-
- @Override
- public int getPosition() {
- return currentPosition;
- }
-
- @Override
- public int getCount() {
- return count;
- }
-
- @Override
- public boolean isAfterLast() {
- return (currentPosition >= count);
- }
-
- @Override
- public boolean isBeforeFirst() {
- return (currentPosition < 0);
- }
-
- @Override
- public boolean isFirst() {
- return (currentPosition == 0);
- }
-
- @Override
- public boolean isLast() {
- return (currentPosition == count - 1);
- }
-
- @Override
- public boolean moveToNext() {
- return moveToPosition(currentPosition + 1);
- }
-
- @Override
- public boolean moveToPrevious() {
- return moveToPosition(currentPosition - 1);
- }
-
- @Override
- public boolean moveToFirst() {
- return moveToPosition(0);
- }
-
- @Override
- public boolean moveToLast() {
- return moveToPosition(count - 1);
- }
-
- @Override
- public boolean move(int offset) {
- return moveToPosition(currentPosition + offset);
- }
-
- @Override
- public boolean moveToPosition(int position) {
- currentPosition = position;
- updatePinnedBefore(position);
-
- if (!updatePinnedCursorPosition(position) &&
- !updateTopCursorPosition(position) &&
- !updateSuggestedCursorPosition(position)) {
-
- if (position >= 0 && position < minSize) {
- currentRowType = RowType.BLANK;
- } else {
- currentRowType = RowType.UNKNOWN;
- }
- currentCursor = null;
- }
-
- return cursorHasValidPosition(this);
- }
-
- @Override
- public long getLong(int columnIndex) {
- final int index = getColumnIndexForCurrentRowType(columnIndex);
- if (index >= 0) {
- return currentCursor.getLong(index);
- }
-
- return 0;
- }
-
- @Override
- public int getInt(int columnIndex) {
- assertValidRowType();
- assertValidColumnIndex(columnIndex);
-
- if (columnNames[columnIndex].equals(TopSites.TYPE)) {
- switch (currentRowType) {
- case BLANK:
- return TopSites.TYPE_BLANK;
-
- case TOP:
- return TopSites.TYPE_TOP;
-
- case PINNED:
- return TopSites.TYPE_PINNED;
-
- case SUGGESTED:
- return TopSites.TYPE_SUGGESTED;
-
- default:
- return -1;
- }
- }
-
- final int index = getColumnIndexForCurrentRowType(columnIndex);
- if (index >= 0) {
- return currentCursor.getInt(index);
- }
-
- return 0;
- }
-
- @Override
- public String getString(int columnIndex) {
- final int index = getColumnIndexForCurrentRowType(columnIndex);
- if (index >= 0) {
- return currentCursor.getString(index);
- }
-
- return "";
- }
-
- @Override
- public float getFloat(int columnIndex) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public double getDouble(int columnIndex) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public short getShort(int columnIndex) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public byte[] getBlob(int columnIndex) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void copyStringToBuffer(int columnIndex, CharArrayBuffer buffer) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean isNull(int columnIndex) {
- final int index = getColumnIndexForCurrentRowType(columnIndex);
- if (index >= 0) {
- return currentCursor.isNull(index);
- }
-
- return true;
- }
-
- @Override
- public int getType(int columnIndex) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public int getColumnCount() {
- return columnNames.length;
- }
-
- @Override
- public int getColumnIndex(String columnName) {
- final Integer index = columnIndexes.get(columnName);
- if (index == null) {
- return -1;
- }
-
- return index;
- }
-
- @Override
- public int getColumnIndexOrThrow(String columnName) throws IllegalArgumentException {
- final int index = getColumnIndex(columnName);
- if (index < 0) {
- throw new IllegalArgumentException("Column index not found: " + columnName);
- }
-
- return index;
- }
-
- @Override
- public String getColumnName(int columnIndex) {
- return columnNames[columnIndex];
- }
-
- @Override
- public String[] getColumnNames() {
- return columnNames;
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public boolean requery() {
- boolean result = topCursor.requery() && pinnedCursor.requery();
- if (suggestedCursor != null) {
- result &= suggestedCursor.requery();
- }
-
- updatePinnedPositions();
- updateCount();
-
- return result;
- }
-
- @Override
- public Bundle respond(Bundle extras) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Bundle getExtras() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public void setExtras(Bundle extras) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean getWantsAllOnMoveCalls() {
- return false;
- }
-
- @Override
- public Uri getNotificationUri() {
- // There's no single notification URI for the wrapper
- return null;
- }
-
- @Override
- public void setNotificationUri(ContentResolver cr, Uri uri) {
- // Keep the original notification URI for the
- // wrapped cursors so that we get proper change
- // notifications from the ContentResolver.
- }
-
- @Override
- public void registerContentObserver(ContentObserver observer) {
- topCursor.registerContentObserver(observer);
- pinnedCursor.registerContentObserver(observer);
-
- if (suggestedCursor != null) {
- suggestedCursor.registerContentObserver(observer);
- }
- }
-
- @Override
- public void unregisterContentObserver(ContentObserver observer) {
- topCursor.unregisterContentObserver(observer);
- pinnedCursor.unregisterContentObserver(observer);
-
- if (suggestedCursor != null) {
- suggestedCursor.unregisterContentObserver(observer);
- }
- }
-
- @Override
- public void registerDataSetObserver(DataSetObserver observer) {
- topCursor.registerDataSetObserver(observer);
- pinnedCursor.registerDataSetObserver(observer);
-
- if (suggestedCursor != null) {
- suggestedCursor.registerDataSetObserver(observer);
- }
- }
-
- @Override
- public void unregisterDataSetObserver(DataSetObserver observer) {
- topCursor.unregisterDataSetObserver(observer);
- pinnedCursor.unregisterDataSetObserver(observer);
-
- if (suggestedCursor != null) {
- suggestedCursor.unregisterDataSetObserver(observer);
- }
- }
-
- @SuppressWarnings("deprecation")
- @Override
- public void deactivate() {
- topCursor.deactivate();
- pinnedCursor.deactivate();
-
- if (suggestedCursor != null) {
- suggestedCursor.deactivate();
- }
- }
-
- @Override
- public boolean isClosed() {
- boolean result = topCursor.isClosed() && pinnedCursor.isClosed();
-
- if (suggestedCursor != null) {
- result &= suggestedCursor.isClosed();
- }
-
- return result;
- }
-
- @Override
- public void close() {
- topCursor.close();
- topIndexes = null;
-
- pinnedCursor.close();
- pinnedIndexes = null;
- pinnedPositions.clear();
-
- if (suggestedCursor != null) {
- suggestedCursor.close();
- suggestedIndexes = null;
- }
- }
-}
--- a/mobile/android/base/moz.build
+++ b/mobile/android/base/moz.build
@@ -237,17 +237,16 @@ gbjar.sources += ['java/org/mozilla/geck
'db/SearchHistoryProvider.java',
'db/SharedBrowserDatabaseProvider.java',
'db/SQLiteBridgeContentProvider.java',
'db/StubBrowserDB.java',
'db/SuggestedSites.java',
'db/Table.java',
'db/TabsAccessor.java',
'db/TabsProvider.java',
- 'db/TopSitesCursorWrapper.java',
'db/URLMetadata.java',
'db/URLMetadataTable.java',
'DevToolsAuthHelper.java',
'distribution/Distribution.java',
'distribution/ReferrerDescriptor.java',
'distribution/ReferrerReceiver.java',
'dlc/BaseAction.java',
'dlc/catalog/DownloadContent.java',
--- a/mobile/android/tests/browser/junit3/instrumentation.ini
+++ b/mobile/android/tests/browser/junit3/instrumentation.ini
@@ -2,9 +2,8 @@
subsuite = browser
[src/org/mozilla/tests/browser/junit3/TestDistribution.java]
[src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java]
[src/org/mozilla/tests/browser/junit3/TestImageDownloader.java]
[src/org/mozilla/tests/browser/junit3/TestJarReader.java]
[src/org/mozilla/tests/browser/junit3/TestRawResource.java]
[src/org/mozilla/tests/browser/junit3/TestSuggestedSites.java]
-[src/org/mozilla/tests/browser/junit3/TestTopSitesCursorWrapper.java]
--- a/mobile/android/tests/browser/junit3/moz.build
+++ b/mobile/android/tests/browser/junit3/moz.build
@@ -18,17 +18,16 @@ jar.sources += [
'src/org/mozilla/tests/browser/junit3/TestGeckoMenu.java',
'src/org/mozilla/tests/browser/junit3/TestGeckoProfilesProvider.java',
'src/org/mozilla/tests/browser/junit3/TestGeckoSharedPrefs.java',
'src/org/mozilla/tests/browser/junit3/TestImageDownloader.java',
'src/org/mozilla/tests/browser/junit3/TestJarReader.java',
'src/org/mozilla/tests/browser/junit3/TestRawResource.java',
'src/org/mozilla/tests/browser/junit3/TestRemoteTabs.java',
'src/org/mozilla/tests/browser/junit3/TestSuggestedSites.java',
- 'src/org/mozilla/tests/browser/junit3/TestTopSitesCursorWrapper.java',
]
jar.generated_sources = [] # None yet -- try to keep it this way.
jar.javac_flags += ['-Xlint:all']
jar.extra_jars += [
CONFIG['ANDROID_SUPPORT_V4_AAR_LIB'],
CONFIG['ANDROID_RECYCLERVIEW_V7_AAR_LIB'],
TOPOBJDIR + '/mobile/android/base/constants.jar',
deleted file mode 100644
--- a/mobile/android/tests/browser/junit3/src/org/mozilla/tests/browser/junit3/TestTopSitesCursorWrapper.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-package org.mozilla.tests.browser.junit3;
-
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.database.MatrixCursor.RowBuilder;
-import android.test.InstrumentationTestCase;
-import android.text.TextUtils;
-import org.mozilla.gecko.db.BrowserContract.Bookmarks;
-import org.mozilla.gecko.db.BrowserContract.Combined;
-import org.mozilla.gecko.db.BrowserContract.SuggestedSites;
-import org.mozilla.gecko.db.BrowserContract.TopSites;
-import org.mozilla.gecko.db.TopSitesCursorWrapper;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class TestTopSitesCursorWrapper extends InstrumentationTestCase {
-
- private String[] TOP_SITES_COLUMNS = new String[] { Combined._ID,
- Combined.URL,
- Combined.TITLE,
- Combined.BOOKMARK_ID,
- Combined.HISTORY_ID };
-
- private String[] PINNED_SITES_COLUMNS = new String[] { Bookmarks._ID,
- Bookmarks.URL,
- Bookmarks.TITLE,
- Bookmarks.POSITION };
-
- private String[] SUGGESTED_SITES_COLUMNS = new String[] { SuggestedSites._ID,
- SuggestedSites.URL,
- SuggestedSites.TITLE };
-
- private final int MIN_COUNT = 6;
-
- private final String TOP_PREFIX = "top-";
- private final String PINNED_PREFIX = "pinned-";
- private final String SUGGESTED_PREFIX = "suggested-";
-
- private Cursor createTopSitesCursor(int count) {
- MatrixCursor c = new MatrixCursor(TOP_SITES_COLUMNS);
-
- for (int i = 0; i < count; i++) {
- RowBuilder row = c.newRow();
- row.add(-1);
- row.add(TOP_PREFIX + "url" + i);
- row.add(TOP_PREFIX + "title" + i);
- row.add(i);
- row.add(i);
- }
-
- return c;
- }
-
- private Cursor createPinnedSitesCursor(Integer[] positions) {
- MatrixCursor c = new MatrixCursor(PINNED_SITES_COLUMNS);
-
- if (positions == null) {
- return c;
- }
-
- for (int i = 0; i < positions.length; i++) {
- int position = positions[i];
-
- RowBuilder row = c.newRow();
- row.add(-1);
- row.add(PINNED_PREFIX + "url" + i);
- row.add(PINNED_PREFIX + "title" + i);
- row.add(position);
- }
-
- return c;
- }
-
- private Cursor createSuggestedSitesCursor(int count) {
- MatrixCursor c = new MatrixCursor(SUGGESTED_SITES_COLUMNS);
-
- for (int i = 0; i < count; i++) {
- RowBuilder row = c.newRow();
- row.add(-1);
- row.add(SUGGESTED_PREFIX + "url" + i);
- row.add(SUGGESTED_PREFIX + "title" + i);
- }
-
- return c;
- }
-
- private TopSitesCursorWrapper createTopSitesCursorWrapper(int topSitesCount, Integer[] pinnedPositions,
- int suggestedSitesCount) {
- Cursor pinnedSites = createPinnedSitesCursor(pinnedPositions);
- Cursor topSites = createTopSitesCursor(topSitesCount);
- Cursor suggestedSites = createSuggestedSitesCursor(suggestedSitesCount);
-
- return new TopSitesCursorWrapper(pinnedSites, topSites, suggestedSites, MIN_COUNT);
- }
-
- private void assertUrlAndTitle(Cursor c, String prefix, int index) {
- String url = c.getString(c.getColumnIndex(TopSites.URL));
- String title = c.getString(c.getColumnIndex(TopSites.TITLE));
-
- assertEquals(prefix + "url" + index, url);
- assertEquals(prefix + "title" + index, title);
- }
-
- private void assertBlank(Cursor c) {
- String url = c.getString(c.getColumnIndex(TopSites.URL));
- String title = c.getString(c.getColumnIndex(TopSites.TITLE));
-
- assertTrue(TextUtils.isEmpty(url));
- assertTrue(TextUtils.isEmpty(title));
- }
-
- private void assertRowType(Cursor c, int position, int rowType) {
- assertTrue(c.moveToPosition(position));
- assertEquals(rowType, getRowType(c));
- }
-
- private int getRowType(Cursor c) {
- return c.getInt(c.getColumnIndex(TopSites.TYPE));
- }
-
- public void testCount() {
- // The sum of all sites is smaller than MIN_COUNT
- Cursor c = createTopSitesCursorWrapper(2, new Integer[] { 0, 1 }, 1);
- assertEquals(MIN_COUNT, c.getCount());
- c.close();
-
- // No top or suggested sites, some pinned sites, still smaller than MIN_COUNT
- c = createTopSitesCursorWrapper(0, new Integer[] { 0, 1, 2 }, 0);
- assertEquals(MIN_COUNT, c.getCount());
- c.close();
-
- // Some top sites, no pinned or suggested sites, still smaller than MIN_COUNT
- c = createTopSitesCursorWrapper(3, null, 0);
- assertEquals(MIN_COUNT, c.getCount());
- c.close();
-
- // Some suggested sites, no pinned or top sites, still smaller than MIN_COUNT
- c = createTopSitesCursorWrapper(0, null, 3);
- assertEquals(MIN_COUNT, c.getCount());
- c.close();
-
- // The sum of top and pinned sites is greater than MIN_COUNT
- c = createTopSitesCursorWrapper(10, new Integer[] { 0, 1, 2 }, 0);
- assertEquals(13, c.getCount());
- c.close();
-
- // The sum of suggested and pinned sites is greater than MIN_COUNT
- c = createTopSitesCursorWrapper(0, new Integer[] { 0, 1 }, 8);
- assertEquals(10, c.getCount());
- c.close();
-
- // The sum of top, pinned, and suggested sites is greater than MIN_COUNT
- c = createTopSitesCursorWrapper(2, new Integer[] { 0, 1, 2 }, 2);
- assertEquals(7, c.getCount());
- c.close();
-
- // The sum of top and suggested sites is smaller than MIN_COUNT
- c = createTopSitesCursorWrapper(2, null, 2);
- assertEquals(MIN_COUNT, c.getCount());
- c.close();
- }
-
- public void testCloseWrappedCursors() {
- Cursor pinnedSites = createPinnedSitesCursor(new Integer[] { 0, 1 });
- Cursor topSites = createTopSitesCursor(2);
- Cursor suggestedSites = createSuggestedSitesCursor(2);
- Cursor wrapper = new TopSitesCursorWrapper(pinnedSites, topSites, suggestedSites, MIN_COUNT);
-
- assertFalse(pinnedSites.isClosed());
- assertFalse(topSites.isClosed());
- assertFalse(suggestedSites.isClosed());
-
- wrapper.close();
-
- // Closing wrapper closes wrapped cursors
- assertTrue(pinnedSites.isClosed());
- assertTrue(topSites.isClosed());
- assertTrue(suggestedSites.isClosed());
- }
-
- public void testIsPinned() {
- Integer[] pinnedPositions = new Integer[] { 0, 1 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 2);
-
- List<Integer> pinnedList = Arrays.asList(pinnedPositions);
-
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- boolean isPinnedPosition = pinnedList.contains(c.getPosition());
- assertEquals(isPinnedPosition, getRowType(c) == TopSites.TYPE_PINNED);
- }
-
- c.close();
- }
-
- public void testBlankPositions() {
- Integer[] pinnedPositions = new Integer[] { 0, 1, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(0, pinnedPositions, 1);
-
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- if (getRowType(c) == TopSites.TYPE_BLANK) {
- assertBlank(c);
- }
- }
-
- c.close();
- }
-
- public void testIsNull() {
- Integer[] pinnedPositions = new Integer[] { 0, 1, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 1);
-
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- int rowType = getRowType(c);
-
- if (rowType == TopSites.TYPE_BLANK) {
- assertTrue(c.isNull(c.getColumnIndex(TopSites.URL)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.TITLE)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.BOOKMARK_ID)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.HISTORY_ID)));
- } else if (rowType == TopSites.TYPE_PINNED) {
- assertFalse(c.isNull(c.getColumnIndex(TopSites.URL)));
- assertFalse(c.isNull(c.getColumnIndex(TopSites.TITLE)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.BOOKMARK_ID)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.HISTORY_ID)));
- } else if (rowType == TopSites.TYPE_TOP) {
- assertFalse(c.isNull(c.getColumnIndex(TopSites.URL)));
- assertFalse(c.isNull(c.getColumnIndex(TopSites.TITLE)));
- assertFalse(c.isNull(c.getColumnIndex(TopSites.BOOKMARK_ID)));
- assertFalse(c.isNull(c.getColumnIndex(TopSites.HISTORY_ID)));
- } else if (rowType == TopSites.TYPE_SUGGESTED) {
- assertFalse(c.isNull(c.getColumnIndex(TopSites.URL)));
- assertFalse(c.isNull(c.getColumnIndex(TopSites.TITLE)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.BOOKMARK_ID)));
- assertTrue(c.isNull(c.getColumnIndex(TopSites.HISTORY_ID)));
- } else {
- fail("Invalid row type found in the cursor");
- }
- }
-
- c.close();
- }
-
- public void testColumnValues() {
- Integer[] pinnedPositions = new Integer[] { 0, 1 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 1);
-
- int topIndex = 0;
- int pinnedIndex = 0;
- int suggestedIndex = 0;
-
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- int rowType = getRowType(c);
-
- if (rowType == TopSites.TYPE_BLANK) {
- assertBlank(c);
- } else if (rowType == TopSites.TYPE_PINNED) {
- assertUrlAndTitle(c, PINNED_PREFIX, pinnedIndex++);
- } else if (rowType == TopSites.TYPE_TOP) {
- assertUrlAndTitle(c, TOP_PREFIX, topIndex++);
- } else if (rowType == TopSites.TYPE_SUGGESTED) {
- assertUrlAndTitle(c, SUGGESTED_PREFIX, suggestedIndex++);
- } else {
- fail("Invalid row type found in the cursor");
- }
- }
-
- c.close();
- }
-
- public void testColumns() {
- Integer[] pinnedPositions = new Integer[] { 0, 1, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 3);
-
- assertEquals(6, c.getColumnCount());
-
- String[] columnNames = c.getColumnNames();
- assertEquals(columnNames.length, c.getColumnCount());
-
- boolean allRowsHaveAllCols = true;
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- for (int i = 0; i < columnNames.length; i++) {
- try {
- c.getColumnIndexOrThrow(columnNames[i]);
- } catch (Exception e) {
- allRowsHaveAllCols = false;
- }
- }
- }
- assertTrue(allRowsHaveAllCols);
-
- c.close();
- }
-
- public void testRowTypes() {
- Integer[] pinnedPositions = new Integer[] { 0, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 1);
-
- // Check pinned sites
- for (int i = 0; i < pinnedPositions.length; i++) {
- assertRowType(c, pinnedPositions[0], TopSites.TYPE_PINNED);
- }
-
- // Check top sites
- assertRowType(c, 1, TopSites.TYPE_TOP);
- assertRowType(c, 2, TopSites.TYPE_TOP);
-
- // Suggested site
- assertRowType(c, 3, TopSites.TYPE_SUGGESTED);
-
- // Blank position
- assertRowType(c, 5, TopSites.TYPE_BLANK);
-
- c.close();
- }
-
- public void testPositionOutOfBounds() {
- Integer[] pinnedPositions = new Integer[] { 0, 1, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 1);
-
- boolean failed = false;
- try {
- assertFalse(c.moveToPosition(-1));
- c.getInt(0);
- } catch (Exception e) {
- failed = true;
- }
- assertTrue(failed);
-
- failed = false;
- try {
- assertFalse(c.moveToPosition(c.getCount()));
- c.getInt(0);
- } catch (Exception e) {
- failed = true;
- }
- assertTrue(failed);
-
- c.close();
- }
-
- public void testColumnIndexOutOfBounds() {
- Integer[] pinnedPositions = new Integer[] { 0, 1, 4 };
- TopSitesCursorWrapper c = createTopSitesCursorWrapper(2, pinnedPositions, 1);
-
- boolean failed = false;
- try {
- assertTrue(c.moveToPosition(0));
- c.getInt(-1);
- } catch (Exception e) {
- failed = true;
- }
- assertTrue(failed);
-
- failed = false;
- try {
- assertTrue(c.moveToPosition(0));
- c.getString(c.getColumnCount());
- } catch (Exception e) {
- failed = true;
- }
- assertTrue(failed);
-
- c.close();
- }
-
- public void testNullSuggestedCursor() {
- Cursor pinnedSites = createPinnedSitesCursor(new Integer[] { 0, 1, 4 });
- Cursor topSites = createTopSitesCursor(3);
- Cursor c = new TopSitesCursorWrapper(pinnedSites, topSites, null, MIN_COUNT);
-
- // Simply go through all rows and make sure nothing breaks.
- c.moveToPosition(-1);
- while (c.moveToNext()) {
- assertNotSame(TopSites.TYPE_SUGGESTED, getRowType(c));
- }
-
- c.close();
- }
-}