package io.pivotal.arca.adapters; import android.database.Cursor; import android.database.MatrixCursor; import android.test.AndroidTestCase; import android.view.View; import android.widget.FrameLayout; import android.widget.TextView; import junit.framework.Assert; import java.util.ArrayList; import java.util.Collection; public class SupportCursorAdapterTest extends AndroidTestCase { public void testSupportCursorAdapterNullCursorHasNoResults() { final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, null); assertFalse(adapter.hasResults()); } public void testSupportCursorAdapterEmptyCursorHasNoResults() { final MatrixCursor cursor = new MatrixCursor(new String[] { "_id" }); final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, null); adapter.swapCursor(cursor); assertFalse(adapter.hasResults()); } public void testSupportCursorAdapterCursorHasResults() { final Cursor cursor = createCursor(new String[] { "_id" }); final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, null); adapter.swapCursor(cursor); assertTrue(adapter.hasResults()); } public void testItemCursorAdapterDefaultViewBinding() { final TextView child1 = new TextView(getContext()); child1.setId(R.id.test_id_1); final FrameLayout container = new FrameLayout(getContext()); container.addView(child1); final String[] columns = new String[] { "_id" }; final Cursor cursor = createCursor(columns); final Collection<Binding> bindings = createBindings(columns); final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, bindings); adapter.bindView(container, getContext(), cursor); assertEquals("default_test", child1.getText()); } public void testItemCursorAdapterCustomViewBinding() { final TextView child1 = new TextView(getContext()); child1.setId(R.id.test_id_1); final FrameLayout container = new FrameLayout(getContext()); container.addView(child1); final String[] columns = new String[] { "_id" }; final Cursor cursor = createCursor(columns); final Collection<Binding> bindings = createBindings(columns); final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, bindings); adapter.setViewBinder(new TestViewBinder()); adapter.bindView(container, getContext(), cursor); assertEquals("custom_test", child1.getText()); } public void testItemCursorAdapterCannotBindView() { try { final View child1 = new View(getContext()); child1.setId(R.id.test_id_1); final FrameLayout container = new FrameLayout(getContext()); container.addView(child1); final String[] columns = new String[] { "_id" }; final Cursor cursor = createCursor(columns); final Collection<Binding> bindings = createBindings(columns); final SupportCursorAdapter adapter = new SupportCursorAdapter(getContext(), -1, bindings); adapter.bindView(container, getContext(), cursor); Assert.fail(); } catch (final IllegalStateException e) { assertNotNull(e); } } private static Collection<Binding> createBindings(final String[] columns) { final Collection<Binding> bindings = new ArrayList<Binding>(); bindings.add(new Binding(R.id.test_id_1, columns[0])); return bindings; } private static MatrixCursor createCursor(final String[] columns) { final MatrixCursor cursor = new MatrixCursor(columns); cursor.addRow(new String[] { "default_test" }); cursor.moveToFirst(); return cursor; } public class TestViewBinder implements ViewBinder { @Override public boolean setViewValue(final View view, final Cursor cursor, final Binding binding) { ((TextView) view).setText("custom_test"); return true; } } }