/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.common.widget;
import android.content.Context;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.view.View;
import android.view.ViewGroup;
/**
* Tests for {@link CompositeCursorAdapter}.
*
* To execute, run:
* <pre>
* adb shell am instrument -e class com.android.common.widget.CompositeCursorAdapterTest \
* -w com.android.common.tests/android.test.InstrumentationTestRunner
* </pre>
*/
@SmallTest
public class CompositeCursorAdapterTest extends AndroidTestCase {
public class TestCompositeCursorAdapter extends CompositeCursorAdapter {
public TestCompositeCursorAdapter() {
super(CompositeCursorAdapterTest.this.getContext());
}
private StringBuilder mRequests = new StringBuilder();
@Override
protected View newHeaderView(Context context, int partition, Cursor cursor, ViewGroup parent) {
return new View(context);
}
@Override
protected void bindHeaderView(View view, int partition, Cursor cursor) {
mRequests.append(partition + (cursor == null ? "" : cursor.getColumnNames()[0])
+ "[H] ");
}
@Override
protected View newView(Context context, int sectionIndex, Cursor cursor, int position,
ViewGroup parent) {
return new View(context);
}
@Override
protected void bindView(View v, int partition, Cursor cursor, int position) {
if (!cursor.moveToPosition(position)) {
fail("Invalid position:" + partition + " " + cursor.getColumnNames()[0] + " "
+ position);
}
mRequests.append(partition + cursor.getColumnNames()[0] + "["
+ cursor.getInt(0) + "] ");
}
@Override
public String toString() {
return mRequests.toString().trim();
}
}
public void testGetCountNoEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, false);
adapter.addPartition(false, false);
adapter.changeCursor(0, makeCursor("a", 2));
adapter.changeCursor(1, makeCursor("b", 3));
assertEquals(5, adapter.getCount());
}
public void testGetViewNoEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, false);
adapter.addPartition(false, false);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
for (int i = 0; i < adapter.getCount(); i++) {
adapter.getView(i, null, null);
}
assertEquals("0a[0] 1b[0] 1b[1]", adapter.toString());
}
public void testGetCountWithHeadersAndNoEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, true);
adapter.addPartition(false, true);
adapter.changeCursor(0, makeCursor("a", 2));
adapter.changeCursor(1, makeCursor("b", 3));
assertEquals(7, adapter.getCount());
}
public void testGetViewWithHeadersNoEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, true);
adapter.addPartition(false, true);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
for (int i = 0; i < adapter.getCount(); i++) {
adapter.getView(i, null, null);
}
assertEquals("0a[H] 0a[0] 1b[H] 1b[0] 1b[1]", adapter.toString());
}
public void testGetCountWithHiddenEmptySection() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, true);
adapter.addPartition(false, true);
adapter.changeCursor(1, makeCursor("a", 2));
assertEquals(3, adapter.getCount());
}
public void testGetPartitionForPosition() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, false);
adapter.addPartition(true, true);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
assertEquals(0, adapter.getPartitionForPosition(0));
assertEquals(1, adapter.getPartitionForPosition(1));
assertEquals(1, adapter.getPartitionForPosition(2));
assertEquals(1, adapter.getPartitionForPosition(3));
}
public void testGetOffsetForPosition() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, false);
adapter.addPartition(true, true);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
assertEquals(0, adapter.getOffsetInPartition(0));
assertEquals(-1, adapter.getOffsetInPartition(1));
assertEquals(0, adapter.getOffsetInPartition(2));
assertEquals(1, adapter.getOffsetInPartition(3));
}
public void testGetPositionForPartition() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, true);
adapter.addPartition(true, true);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
assertEquals(0, adapter.getPositionForPartition(0));
assertEquals(2, adapter.getPositionForPartition(1));
}
public void testGetViewWithHiddenEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(false, false);
adapter.addPartition(false, false);
adapter.changeCursor(1, makeCursor("b", 2));
for (int i = 0; i < adapter.getCount(); i++) {
adapter.getView(i, null, null);
}
assertEquals("1b[0] 1b[1]", adapter.toString());
}
public void testGetCountWithShownEmptySection() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, true);
adapter.addPartition(true, true);
adapter.changeCursor(1, makeCursor("a", 2));
assertEquals(4, adapter.getCount());
}
public void testGetViewWithShownEmptySections() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, true);
adapter.addPartition(true, true);
adapter.changeCursor(1, makeCursor("b", 2));
for (int i = 0; i < adapter.getCount(); i++) {
adapter.getView(i, null, null);
}
assertEquals("0[H] 1b[H] 1b[0] 1b[1]", adapter.toString());
}
public void testAreAllItemsEnabledFalse() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, false);
adapter.addPartition(true, true);
assertFalse(adapter.areAllItemsEnabled());
}
public void testAreAllItemsEnabledTrue() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, false);
adapter.addPartition(true, false);
assertTrue(adapter.areAllItemsEnabled());
}
public void testIsEnabled() {
TestCompositeCursorAdapter adapter = new TestCompositeCursorAdapter();
adapter.addPartition(true, false);
adapter.addPartition(true, true);
adapter.changeCursor(0, makeCursor("a", 1));
adapter.changeCursor(1, makeCursor("b", 2));
assertTrue(adapter.isEnabled(0));
assertFalse(adapter.isEnabled(1));
assertTrue(adapter.isEnabled(2));
assertTrue(adapter.isEnabled(3));
}
private Cursor makeCursor(String name, int count) {
MatrixCursor cursor = new MatrixCursor(new String[]{name});
for (int i = 0; i < count; i++) {
cursor.addRow(new Object[]{i});
}
return cursor;
}
}