diff --git a/mobile/android/base/tests/robocop.ini b/mobile/android/base/tests/robocop.ini index edcce15659f3..7db548b5f1a9 100644 --- a/mobile/android/base/tests/robocop.ini +++ b/mobile/android/base/tests/robocop.ini @@ -34,6 +34,7 @@ skip-if = processor == "x86" [testInputUrlBar] [testJarReader] [testLinkContextMenu] +[testHomeListsProvider] [testLoad] [testMailToContextMenu] [testMasterPassword] diff --git a/mobile/android/base/tests/testHomeListsProvider.java b/mobile/android/base/tests/testHomeListsProvider.java new file mode 100644 index 000000000000..d44ad5142937 --- /dev/null +++ b/mobile/android/base/tests/testHomeListsProvider.java @@ -0,0 +1,124 @@ +package org.mozilla.gecko.tests; + +import android.content.ContentValues; +import android.content.ContentUris; +import android.database.Cursor; +import android.net.Uri; + +public class testHomeListsProvider extends ContentProviderTest { + + private Uri mItemsFakeUri; + private Uri mItemsUri; + + private String mItemsIdCol; + private String mItemsProviderIdCol; + private String mItemsTitleCol; + private String mItemsUrlCol; + + @Override + protected int getTestType() { + return TEST_MOCHITEST; + } + + private void loadContractInfo() throws Exception { + mItemsFakeUri = getUriColumn("HomeListItems", "CONTENT_FAKE_URI"); + mItemsUri = getContentUri("HomeListItems"); + + mItemsIdCol = getStringColumn("HomeListItems", "_ID"); + mItemsProviderIdCol = getStringColumn("HomeListItems", "PROVIDER_ID"); + mItemsTitleCol = getStringColumn("HomeListItems", "TITLE"); + mItemsUrlCol = getStringColumn("HomeListItems", "URL"); + } + + private void ensureEmptyDatabase() throws Exception { + // Delete all the list entries. + mProvider.delete(mItemsUri, null, null); + + final Cursor c = mProvider.query(mItemsUri, null, null, null, null); + mAsserter.is(c.getCount(), 0, "All list entries were deleted"); + c.close(); + } + + @Override + public void setUp() throws Exception { + super.setUp("org.mozilla.gecko.db.HomeListsProvider", "AUTHORITY", "homelists.db"); + loadContractInfo(); + + mTests.add(new TestFakeItems()); + + // Disabled until database support lands + //mTests.add(new TestInsertItem()); + } + + public void testListsProvider() throws Exception { + for (int i = 0; i < mTests.size(); i++) { + Runnable test = mTests.get(i); + + setTestName(test.getClass().getSimpleName()); + // Disabled until database support lands + //ensureEmptyDatabase(); + test.run(); + } + } + + abstract class Test implements Runnable { + @Override + public void run() { + try { + test(); + } catch (Exception e) { + mAsserter.is(true, false, "Test " + this.getClass().getName() + + " threw exception: " + e); + } + } + + public abstract void test() throws Exception; + } + + class TestFakeItems extends Test { + @Override + public void test() throws Exception { + final long id = 1; + final String providerId = "fake-provider"; + final String title = "Example"; + final String url = "http://example.com"; + + final Cursor c = mProvider.query(mItemsFakeUri, null, null, null, null); + mAsserter.is(c.moveToFirst(), true, "Fake list item found"); + + mAsserter.is(c.getLong(c.getColumnIndex(mItemsIdCol)), id, "Fake list item has correct ID"); + mAsserter.is(c.getString(c.getColumnIndex(mItemsProviderIdCol)), providerId, "Fake list item has correct provider ID"); + mAsserter.is(c.getString(c.getColumnIndex(mItemsTitleCol)), title, "Fake list item has correct title"); + mAsserter.is(c.getString(c.getColumnIndex(mItemsUrlCol)), url, "Fake list item has correct URL"); + + c.close(); + } + } + + class TestInsertItem extends Test { + @Override + public void test() throws Exception { + final String providerId = "{c77da387-4c80-0c45-9f22-70276c29b3ed}"; + final String title = "Mozilla"; + final String url = "https://mozilla.org"; + + // Insert a new list item with test values. + final ContentValues cv = new ContentValues(); + cv.put(mItemsProviderIdCol, providerId); + cv.put(mItemsTitleCol, title); + cv.put(mItemsUrlCol, url); + + final long id = ContentUris.parseId(mProvider.insert(mItemsUri, cv)); + + // Check that the item was inserted correctly. + final Cursor c = mProvider.query(mItemsUri, null, mItemsIdCol + " = ?", new String[] { String.valueOf(id) }, null); + mAsserter.is(c.moveToFirst(), true, "Inserted list item found"); + + mAsserter.is(c.getString(c.getColumnIndex(mItemsProviderIdCol)), providerId, "Inserted list item has correct provider ID"); + mAsserter.is(c.getString(c.getColumnIndex(mItemsTitleCol)), title, "Inserted list item has correct title"); + mAsserter.is(c.getString(c.getColumnIndex(mItemsUrlCol)), url, "Inserted list item has correct URL"); + + c.close(); + } + } +}