blob: a0f0df6a458aa328ee2ac728cb2818f4d26b3e5c [file] [log] [blame]
/*
* Copyright (C) 2008 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 android.widget.cts;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.ToBeFixed;
import android.database.DataSetObserver;
import android.test.AndroidTestCase;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.HeaderViewListAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import java.util.ArrayList;
/**
* Test {@link HeaderViewListAdapter}.
*/
@TestTargetClass(HeaderViewListAdapter.class)
public class HeaderViewListAdapterTest extends AndroidTestCase {
HeaderViewListAdapter mHeaderViewListAdapter;
@Override
protected void setUp() throws Exception {
super.setUp();
mHeaderViewListAdapter = null;
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test constructor(s) of {@link HeaderViewListAdapter}",
method = "HeaderViewListAdapter",
args = {ArrayList.class, ArrayList.class, ListAdapter.class}
)
public void testConstructor() {
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>();
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(5);
new HeaderViewListAdapter(header, footer, null);
new HeaderViewListAdapter(header, footer, new HeaderViewEmptyAdapter());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getHeadersCount()}",
method = "getHeadersCount",
args = {}
)
public void testGetHeadersCount() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, mHeaderViewListAdapter.getHeadersCount());
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
header.add(lv.new FixedViewInfo());
mHeaderViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertEquals(1, mHeaderViewListAdapter.getHeadersCount());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getFootersCount()}",
method = "getFootersCount",
args = {}
)
public void testGetFootersCount() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, mHeaderViewListAdapter.getFootersCount());
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
footer.add(lv.new FixedViewInfo());
mHeaderViewListAdapter = new HeaderViewListAdapter(null, footer, null);
assertEquals(1, mHeaderViewListAdapter.getFootersCount());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#isEmpty()}",
method = "isEmpty",
args = {}
)
public void testIsEmpty() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertTrue(mHeaderViewListAdapter.isEmpty());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertTrue(mHeaderViewListAdapter.isEmpty());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertFalse(mHeaderViewListAdapter.isEmpty());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#removeHeader(View)}",
method = "removeHeader",
args = {android.view.View.class}
)
@ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete.")
public void testRemoveHeader() {
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
ListView lv1 = new ListView(getContext());
ListView lv2 = new ListView(getContext());
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.view = lv1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.view = lv2;
header.add(info1);
header.add(info2);
mHeaderViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertEquals(2, mHeaderViewListAdapter.getHeadersCount());
assertFalse(mHeaderViewListAdapter.removeHeader(new ListView(getContext())));
assertTrue(mHeaderViewListAdapter.removeHeader(lv1));
assertEquals(1, mHeaderViewListAdapter.getHeadersCount());
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
try {
mHeaderViewListAdapter.removeHeader(null);
} catch (NullPointerException e) {
// expected.
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#removeFooter(View)}",
method = "removeFooter",
args = {android.view.View.class}
)
@ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete.")
public void testRemoveFooter() {
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
ListView lv1 = new ListView(getContext());
ListView lv2 = new ListView(getContext());
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.view = lv1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.view = lv2;
footer.add(info1);
footer.add(info2);
mHeaderViewListAdapter = new HeaderViewListAdapter(null, footer, null);
assertEquals(2, mHeaderViewListAdapter.getFootersCount());
assertFalse(mHeaderViewListAdapter.removeFooter(new ListView(getContext())));
assertTrue(mHeaderViewListAdapter.removeFooter(lv1));
assertEquals(1, mHeaderViewListAdapter.getFootersCount());
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
try {
mHeaderViewListAdapter.removeFooter(null);
} catch (NullPointerException e) {
// expected.
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getCount()}",
method = "getCount",
args = {}
)
public void testGetCount() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, mHeaderViewListAdapter.getCount());
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
Object data1 = new Object();
Object data2 = new Object();
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.data = data1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.data = data2;
header.add(info1);
header.add(info2);
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
Object data3 = new Object();
Object data4 = new Object();
ListView.FixedViewInfo info3 = lv.new FixedViewInfo();
info3.data = data3;
ListView.FixedViewInfo info4 = lv.new FixedViewInfo();
info4.data = data4;
footer.add(info3);
footer.add(info4);
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(header, footer, emptyAdapter);
// 4 is header's count + footer's count + emptyAdapter's count
assertEquals(4, mHeaderViewListAdapter.getCount());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(header, footer, fullAdapter);
// 5 is header's count + footer's count + fullAdapter's count
assertEquals(5, mHeaderViewListAdapter.getCount());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#areAllItemsEnabled()}",
method = "areAllItemsEnabled",
args = {}
)
public void testAreAllItemsEnabled() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertTrue(mHeaderViewListAdapter.areAllItemsEnabled());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertTrue(mHeaderViewListAdapter.areAllItemsEnabled());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertFalse(mHeaderViewListAdapter.areAllItemsEnabled());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#isEnabled(int)}",
method = "isEnabled",
args = {int.class}
)
public void testIsEnabled() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertTrue(mHeaderViewListAdapter.isEnabled(0));
assertTrue(mHeaderViewListAdapter.isEnabled(-1));
HeaderViewEmptyAdapter headerViewListAdapter = new HeaderViewEmptyAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, headerViewListAdapter);
assertFalse(mHeaderViewListAdapter.isEnabled(1));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getItem(int)}",
method = "getItem",
args = {int.class}
)
public void testGetItem() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(mHeaderViewListAdapter.getItem(0));
assertNull(mHeaderViewListAdapter.getItem(-1));
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
Object data1 = new Object();
Object data2 = new Object();
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.data = data1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.data = data2;
header.add(info1);
header.add(info2);
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
Object data3 = new Object();
Object data4 = new Object();
ListView.FixedViewInfo info3 = lv.new FixedViewInfo();
info3.data = data3;
ListView.FixedViewInfo info4 = lv.new FixedViewInfo();
info4.data = data4;
footer.add(info3);
footer.add(info4);
HeaderViewFullAdapter headerViewFullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(header, footer, headerViewFullAdapter);
assertSame(data3, mHeaderViewListAdapter.getItem(3));
assertSame(data1, mHeaderViewListAdapter.getItem(0));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getItemId(int)}",
method = "getItemId",
args = {int.class}
)
public void testGetItemId() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(-1, mHeaderViewListAdapter.getItemId(0));
assertEquals(-1, mHeaderViewListAdapter.getItemId(-1));
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
ListView lv1 = new ListView(getContext());
ListView lv2 = new ListView(getContext());
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.view = lv1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.view = lv2;
header.add(info1);
header.add(info2);
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(header, null, fullAdapter);
assertEquals(-1, mHeaderViewListAdapter.getItemId(0));
assertEquals(fullAdapter.getItemId(0), mHeaderViewListAdapter.getItemId(2));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "hasStableIds",
args = {}
)
public void testHasStableIds() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertFalse(mHeaderViewListAdapter.hasStableIds());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertTrue(mHeaderViewListAdapter.hasStableIds());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getView(int, View, ViewGroup)}",
method = "getView",
args = {int.class, android.view.View.class, android.view.ViewGroup.class}
)
@ToBeFixed(bug = "1695243", explanation = "Android API javadocs are incomplete, " +
"should add @throw into javadoc.")
public void testGetView() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(mHeaderViewListAdapter.getView(0, null, null));
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
ListView lv1 = new ListView(getContext());
ListView lv2 = new ListView(getContext());
ListView.FixedViewInfo info1 = lv.new FixedViewInfo();
info1.view = lv1;
ListView.FixedViewInfo info2 = lv.new FixedViewInfo();
info2.view = lv2;
header.add(info1);
header.add(info2);
mHeaderViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertSame(lv2, mHeaderViewListAdapter.getView(1, null, null));
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
try {
mHeaderViewListAdapter.getView(-1, null, null);
fail("should throw NullPointerException.");
} catch (NullPointerException e) {
// expected.
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getItemViewType(int)}",
method = "getItemViewType",
args = {int.class}
)
public void testGetItemViewType() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
mHeaderViewListAdapter.getItemViewType(0));
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
mHeaderViewListAdapter.getItemViewType(-1));
assertEquals(0, mHeaderViewListAdapter.getItemViewType(0));
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
mHeaderViewListAdapter.getItemViewType(2));
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getViewTypeCount()}",
method = "getViewTypeCount",
args = {}
)
public void testGetViewTypeCount() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(1, mHeaderViewListAdapter.getViewTypeCount());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertEquals(fullAdapter.getViewTypeCount(), mHeaderViewListAdapter.getViewTypeCount());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#registerDataSetObserver(DataSetObserver)}",
method = "registerDataSetObserver",
args = {android.database.DataSetObserver.class}
)
public void testRegisterDataSetObserver() {
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
DataSetObserver observer = new HeaderViewDataSetObserver();
mHeaderViewListAdapter.registerDataSetObserver(observer);
assertSame(observer, fullAdapter.getDataSetObserver());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#unregisterDataSetObserver(DataSetObserver)}",
method = "unregisterDataSetObserver",
args = {android.database.DataSetObserver.class}
)
public void testUnregisterDataSetObserver() {
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
DataSetObserver observer = new HeaderViewDataSetObserver();
mHeaderViewListAdapter.registerDataSetObserver(observer);
mHeaderViewListAdapter.unregisterDataSetObserver(null);
assertSame(observer, fullAdapter.getDataSetObserver());
mHeaderViewListAdapter.unregisterDataSetObserver(observer);
assertNull(fullAdapter.getDataSetObserver());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getFilter()}",
method = "getFilter",
args = {}
)
public void testGetFilter() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(mHeaderViewListAdapter.getFilter());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertNull(mHeaderViewListAdapter.getFilter());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertSame(emptyAdapter.getFilter(), mHeaderViewListAdapter.getFilter());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "Test {@link HeaderViewListAdapter#getWrappedAdapter()}",
method = "getWrappedAdapter",
args = {}
)
public void testGetWrappedAdapter() {
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(mHeaderViewListAdapter.getWrappedAdapter());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
mHeaderViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertSame(fullAdapter, mHeaderViewListAdapter.getWrappedAdapter());
}
private class HeaderViewEmptyAdapter implements ListAdapter, Filterable {
private HeaderViewFilterTest mFilter;
public HeaderViewEmptyAdapter() {
mFilter = new HeaderViewFilterTest();
}
public boolean areAllItemsEnabled() {
return false;
}
public boolean isEnabled(int position) {
return false;
}
public void registerDataSetObserver(DataSetObserver observer) {
}
public void unregisterDataSetObserver(DataSetObserver observer) {
}
public int getCount() {
return 0;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
}
public boolean hasStableIds() {
return false;
}
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 1;
}
public boolean isEmpty() {
return true;
}
public Filter getFilter() {
return mFilter;
}
}
private class HeaderViewFullAdapter implements ListAdapter {
private DataSetObserver mObserver;
private Object mItem;
public DataSetObserver getDataSetObserver() {
return mObserver;
}
public Object getItem() {
return mItem;
}
public boolean areAllItemsEnabled() {
return true;
}
public boolean isEnabled(int position) {
return false;
}
public void registerDataSetObserver(DataSetObserver observer) {
mObserver = observer;
}
public void unregisterDataSetObserver(DataSetObserver observer) {
if (mObserver == observer) {
mObserver = null;
}
}
public int getCount() {
return 1;
}
public Object getItem(int position) {
if (mItem == null) {
mItem = new Object();
}
return mItem;
}
public long getItemId(int position) {
return position;
}
public boolean hasStableIds() {
return true;
}
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 2;
}
public boolean isEmpty() {
return false;
}
}
private static class HeaderViewFilterTest extends Filter {
@Override
protected Filter.FilterResults performFiltering(CharSequence constraint) {
return null;
}
@Override
protected void publishResults(CharSequence constraint, Filter.FilterResults results) {
}
}
private class HeaderViewDataSetObserver extends DataSetObserver {
@Override
public void onChanged() {
// Do nothing
}
@Override
public void onInvalidated() {
// Do nothing
}
}
}