blob: e583dce9a18ba8709fe147bd74930ba228687fea [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 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}.
*/
public class HeaderViewListAdapterTest extends AndroidTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
}
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());
}
public void testGetHeadersCount() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, headerViewListAdapter.getHeadersCount());
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
header.add(lv.new FixedViewInfo());
headerViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertEquals(1, headerViewListAdapter.getHeadersCount());
}
public void testGetFootersCount() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, headerViewListAdapter.getFootersCount());
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
footer.add(lv.new FixedViewInfo());
headerViewListAdapter = new HeaderViewListAdapter(null, footer, null);
assertEquals(1, headerViewListAdapter.getFootersCount());
}
public void testIsEmpty() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertTrue(headerViewListAdapter.isEmpty());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertTrue(headerViewListAdapter.isEmpty());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertFalse(headerViewListAdapter.isEmpty());
}
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);
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertEquals(2, headerViewListAdapter.getHeadersCount());
assertFalse(headerViewListAdapter.removeHeader(new ListView(getContext())));
assertTrue(headerViewListAdapter.removeHeader(lv1));
assertEquals(1, headerViewListAdapter.getHeadersCount());
headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
try {
headerViewListAdapter.removeHeader(null);
//fail("Removing from null header should result in NullPointerException");
} catch (NullPointerException e) {
// expected.
}
}
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);
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, footer, null);
assertEquals(2, headerViewListAdapter.getFootersCount());
assertFalse(headerViewListAdapter.removeFooter(new ListView(getContext())));
assertTrue(headerViewListAdapter.removeFooter(lv1));
assertEquals(1, headerViewListAdapter.getFootersCount());
headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
try {
headerViewListAdapter.removeFooter(null);
//fail("Removing from null footer should result in NullPointerException");
} catch (NullPointerException e) {
// expected.
}
}
public void testGetCount() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(0, headerViewListAdapter.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();
headerViewListAdapter = new HeaderViewListAdapter(header, footer, emptyAdapter);
// 4 is header's count + footer's count + emptyAdapter's count
assertEquals(4, headerViewListAdapter.getCount());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(header, footer, fullAdapter);
// 5 is header's count + footer's count + fullAdapter's count
assertEquals(5, headerViewListAdapter.getCount());
}
public void testAreAllItemsEnabled() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertTrue(headerViewListAdapter.areAllItemsEnabled());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertTrue(headerViewListAdapter.areAllItemsEnabled());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertFalse(headerViewListAdapter.areAllItemsEnabled());
}
public void testIsEnabled() {
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
HeaderViewListAdapter headerViewListAdapter =
new HeaderViewListAdapter(null, null, fullAdapter);
assertTrue(headerViewListAdapter.isEnabled(0));
ListView lv = new ListView(getContext());
ArrayList<ListView.FixedViewInfo> header = new ArrayList<ListView.FixedViewInfo>(4);
header.add(lv.new FixedViewInfo());
headerViewListAdapter = new HeaderViewListAdapter(header, null, fullAdapter);
assertFalse(headerViewListAdapter.isEnabled(0));
assertTrue(headerViewListAdapter.isEnabled(1));
ArrayList<ListView.FixedViewInfo> footer = new ArrayList<ListView.FixedViewInfo>(4);
footer.add(lv.new FixedViewInfo());
footer.add(lv.new FixedViewInfo());
headerViewListAdapter = new HeaderViewListAdapter(header, footer, fullAdapter);
assertFalse(headerViewListAdapter.isEnabled(0));
assertTrue(headerViewListAdapter.isEnabled(1));
assertFalse(headerViewListAdapter.isEnabled(2));
assertFalse(headerViewListAdapter.isEnabled(3));
headerViewListAdapter = new HeaderViewListAdapter(null, footer, fullAdapter);
assertTrue(headerViewListAdapter.isEnabled(0));
assertFalse(headerViewListAdapter.isEnabled(1));
assertFalse(headerViewListAdapter.isEnabled(2));
}
public void testGetItem() {
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();
HeaderViewListAdapter headerViewListAdapter =
new HeaderViewListAdapter(header, footer, headerViewFullAdapter);
assertSame(data1, headerViewListAdapter.getItem(0));
assertSame(data2, headerViewListAdapter.getItem(1));
assertSame(headerViewFullAdapter.getItem(0), headerViewListAdapter.getItem(2));
assertSame(data3, headerViewListAdapter.getItem(3));
assertSame(data4, headerViewListAdapter.getItem(4));
}
public void testGetItemId() {
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();
HeaderViewListAdapter headerViewListAdapter =
new HeaderViewListAdapter(header, null, fullAdapter);
assertEquals(-1, headerViewListAdapter.getItemId(0));
assertEquals(fullAdapter.getItemId(0), headerViewListAdapter.getItemId(2));
}
public void testHasStableIds() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertFalse(headerViewListAdapter.hasStableIds());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertTrue(headerViewListAdapter.hasStableIds());
}
public void testGetView() {
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);
// No adapter, just header
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(header, null, null);
assertSame(lv1, headerViewListAdapter.getView(0, null, null));
assertSame(lv2, headerViewListAdapter.getView(1, null, null));
// Adapter only
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
View expected = fullAdapter.getView(0, null, null);
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertSame(expected, headerViewListAdapter.getView(0, null, null));
// Header and adapter
headerViewListAdapter = new HeaderViewListAdapter(header, null, fullAdapter);
assertSame(lv1, headerViewListAdapter.getView(0, null, null));
assertSame(lv2, headerViewListAdapter.getView(1, null, null));
assertSame(expected, headerViewListAdapter.getView(2, null, null));
}
public void testGetItemViewType() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
headerViewListAdapter.getItemViewType(0));
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
headerViewListAdapter.getItemViewType(-1));
assertEquals(0, headerViewListAdapter.getItemViewType(0));
assertEquals(AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER,
headerViewListAdapter.getItemViewType(2));
}
public void testGetViewTypeCount() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertEquals(1, headerViewListAdapter.getViewTypeCount());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertEquals(fullAdapter.getViewTypeCount(), headerViewListAdapter.getViewTypeCount());
}
public void testRegisterDataSetObserver() {
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
HeaderViewListAdapter headerViewListAdapter =
new HeaderViewListAdapter(null, null, fullAdapter);
DataSetObserver observer = new HeaderViewDataSetObserver();
headerViewListAdapter.registerDataSetObserver(observer);
assertSame(observer, fullAdapter.getDataSetObserver());
}
public void testUnregisterDataSetObserver() {
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
HeaderViewListAdapter headerViewListAdapter =
new HeaderViewListAdapter(null, null, fullAdapter);
DataSetObserver observer = new HeaderViewDataSetObserver();
headerViewListAdapter.registerDataSetObserver(observer);
headerViewListAdapter.unregisterDataSetObserver(null);
assertSame(observer, fullAdapter.getDataSetObserver());
headerViewListAdapter.unregisterDataSetObserver(observer);
assertNull(fullAdapter.getDataSetObserver());
}
public void testGetFilter() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(headerViewListAdapter.getFilter());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertNull(headerViewListAdapter.getFilter());
HeaderViewEmptyAdapter emptyAdapter = new HeaderViewEmptyAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, emptyAdapter);
assertSame(emptyAdapter.getFilter(), headerViewListAdapter.getFilter());
}
public void testGetWrappedAdapter() {
HeaderViewListAdapter headerViewListAdapter = new HeaderViewListAdapter(null, null, null);
assertNull(headerViewListAdapter.getWrappedAdapter());
HeaderViewFullAdapter fullAdapter = new HeaderViewFullAdapter();
headerViewListAdapter = new HeaderViewListAdapter(null, null, fullAdapter);
assertSame(fullAdapter, headerViewListAdapter.getWrappedAdapter());
}
private class HeaderViewEmptyAdapter implements ListAdapter, Filterable {
private final HeaderViewFilterTest mFilter;
public HeaderViewEmptyAdapter() {
mFilter = new HeaderViewFilterTest();
}
public boolean areAllItemsEnabled() {
return false;
}
public boolean isEnabled(int position) {
return true;
}
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;
private final View mView = new View(getContext());
public DataSetObserver getDataSetObserver() {
return mObserver;
}
public boolean areAllItemsEnabled() {
return true;
}
public boolean isEnabled(int position) {
return true;
}
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 mView;
}
public int getItemViewType(int position) {
return 0;
}
public int getViewTypeCount() {
return 1;
}
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
}
}
}