154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov/* 254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * you may not use this file except in compliance with the License. 654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * You may obtain a copy of the License at 754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * 1054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 1154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 1254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * See the License for the specific language governing permissions and 1454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * limitations under the License. 1554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov */ 1654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovpackage com.android.contacts.widget; 1754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 1854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.content.Context; 1954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.database.DataSetObserver; 2054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.test.AndroidTestCase; 2154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.view.View; 2254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.view.ViewGroup; 2354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport android.widget.ArrayAdapter; 2454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 25e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.google.common.collect.Lists; 26e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 2754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport java.util.ArrayList; 2854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport java.util.HashMap; 2954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport java.util.HashSet; 3054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovimport java.util.List; 3154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 3254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov/** 3354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov * Tests for {@link CompositeListAdapter}. 3454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov */ 3554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikovpublic class CompositeListAdapterTest extends AndroidTestCase { 3654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 3754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private final class MockAdapter extends ArrayAdapter<String> { 3854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov boolean allItemsEnabled = true; 3954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov HashSet<Integer> enabledItems = new HashSet<Integer>(); 4054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov int viewTypeCount = 1; 4154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov HashMap<Integer, Integer> viewTypes = new HashMap<Integer, Integer>(); 4254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 4354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private MockAdapter(Context context, List<String> objects) { 4454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov super(context, android.R.layout.simple_list_item_1, objects); 4554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov for (int i = 0; i < objects.size(); i++) { 4654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov viewTypes.put(i, 0); 4754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 4854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 4954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 5054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 5154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public View getView(int position, View convertView, ViewGroup parent) { 5254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return new MockView(getContext(), position); 5354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 5454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 5554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 5654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public boolean areAllItemsEnabled() { 5754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return allItemsEnabled; 5854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 5954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 6054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 6154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public boolean isEnabled(int position) { 6254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return enabledItems.contains(position); 6354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 6454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 6554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 6654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int getViewTypeCount() { 6754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return viewTypeCount; 6854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 6954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 7054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 7154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int getItemViewType(int position) { 7254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov return viewTypes.get(position); 7354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 7454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 7554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 7654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private final class MockView extends View { 7754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public MockView(Context context, int position) { 7854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov super(context); 7954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov setTag(position); 8054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 8154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 8254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 8354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private final class TestDataSetObserver extends DataSetObserver { 8454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 8554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int changeCount; 8654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public int invalidationCount; 8754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 8854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 8954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void onChanged() { 9054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov changeCount++; 9154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 9254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 9354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 9454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void onInvalidated() { 9554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov invalidationCount++; 9654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 9754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 9854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 9954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private MockAdapter mAdapter1; 10054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private MockAdapter mAdapter2; 10154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov private MockAdapter mAdapter3; 10254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 10354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov @Override 10454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov protected void setUp() throws Exception { 10554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov super.setUp(); 10654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1 = new MockAdapter(getContext(), Lists.newArrayList("A", "B")); 10754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter2 = new MockAdapter(getContext(), new ArrayList<String>()); 10854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3 = new MockAdapter(getContext(), Lists.newArrayList("C", "D", "E")); 10954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 11054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 11154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetCount() { 11254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 11354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 11454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 11554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 11654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 11754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(5, adapter.getCount()); 11854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 11954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 12054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetCountWithInvalidation() { 12154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 12254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getCount()); 12354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 12454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 12554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(2, adapter.getCount()); 12654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 12754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 12854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(2, adapter.getCount()); 12954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 13054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 13154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(5, adapter.getCount()); 13254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 13354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 13454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetItem() { 13554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 13654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 13754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 13854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 13954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 14054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("A", adapter.getItem(0)); 14154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("B", adapter.getItem(1)); 14254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("C", adapter.getItem(2)); 14354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("D", adapter.getItem(3)); 14454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("E", adapter.getItem(4)); 14554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 14654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 14754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetItemId() { 14854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 14954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 15054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 15154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 15254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 15354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getItemId(0)); 15454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getItemId(1)); 15554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getItemId(2)); 15654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getItemId(3)); 15754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(2, adapter.getItemId(4)); 15854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 15954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 16054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetView() { 16154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 16254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 16354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 16454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 16554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 16654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getView(0, null, null).getTag()); 16754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getView(1, null, null).getTag()); 16854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getView(2, null, null).getTag()); 16954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getView(3, null, null).getTag()); 17054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(2, adapter.getView(4, null, null).getTag()); 17154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 17254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 17354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetViewTypeCount() { 17454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.viewTypeCount = 2; 17554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter2.viewTypeCount = 3; 17654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 17754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 17854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 17954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 18054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 18154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov // Note that mAdapter2 adds an implicit +1 18254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(6, adapter.getViewTypeCount()); 18354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 18454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 18554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testGetItemViewType() { 18654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.viewTypeCount = 2; 18754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.viewTypes.put(0, 1); 18854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.viewTypes.put(1, 0); 18954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 19054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.viewTypeCount = 3; 19154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.viewTypes.put(0, 1); 19254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.viewTypes.put(1, 2); 19354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.viewTypes.put(2, 0); 19454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 19554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 19654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 19754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 19854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 19954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 20054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getItemViewType(0)); 20154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getItemViewType(1)); 20254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 20354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov // Note: mAdapter2 throws in a +1 20454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 20554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(4, adapter.getItemViewType(2)); 20654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(5, adapter.getItemViewType(3)); 20754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(3, adapter.getItemViewType(4)); 20854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 20954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 21054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testNotifyDataSetChangedPropagated() { 21154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 21254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 21354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 21454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 21554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov TestDataSetObserver observer = new TestDataSetObserver(); 21654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.registerDataSetObserver(observer); 21754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.add("X"); 21854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 21954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, observer.changeCount); 22054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, observer.invalidationCount); 22154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(3, adapter.getCount()); 22254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("A", adapter.getItem(0)); 22354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("B", adapter.getItem(1)); 22454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("X", adapter.getItem(2)); 22554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 22654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter2.add("Y"); 22754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(2, observer.changeCount); 22854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, observer.invalidationCount); 22954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(4, adapter.getCount()); 23054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("A", adapter.getItem(0)); 23154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("B", adapter.getItem(1)); 23254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("X", adapter.getItem(2)); 23354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("Y", adapter.getItem(3)); 23454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 23554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 23654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 23754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testNotifyDataSetChangedOnAddingAdapter() { 23854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 23954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 24054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 24154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov TestDataSetObserver observer = new TestDataSetObserver(); 24254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.registerDataSetObserver(observer); 24354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 24454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 24554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, observer.changeCount); 24654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, observer.invalidationCount); 24754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(5, adapter.getCount()); 24854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("A", adapter.getItem(0)); 24954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("B", adapter.getItem(1)); 25054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("C", adapter.getItem(2)); 25154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("D", adapter.getItem(3)); 25254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals("E", adapter.getItem(4)); 25354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 25454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 25554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testNotifyDataSetInvalidated() { 25654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 25754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 25854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 25954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov TestDataSetObserver observer = new TestDataSetObserver(); 26054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.registerDataSetObserver(observer); 26154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 26254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.remove("A"); 26354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, observer.changeCount); 26454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, observer.invalidationCount); 26554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, adapter.getCount()); 26654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 26754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.remove("B"); 26854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, observer.changeCount); 26954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(1, observer.invalidationCount); 27054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertEquals(0, adapter.getCount()); 27154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 27254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 27354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testAreAllItemsEnabled() { 27454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 27554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 27654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 27754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 27854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.areAllItemsEnabled()); 27954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 28054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 28154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testAreAllItemsEnabledWithInvalidation() { 28254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 28354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 28454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.areAllItemsEnabled()); 28554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 28654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.allItemsEnabled = false; 28754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 28854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 28954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertFalse(adapter.areAllItemsEnabled()); 29054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 29154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 29254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testIsEnabled() { 29354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.allItemsEnabled = false; 29454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.enabledItems.add(1); 29554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 29654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 29754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 29854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter2); 29954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 30054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 30154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertFalse(adapter.isEnabled(0)); 30254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(1)); 30354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(2)); 30454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(3)); 30554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(4)); 30654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 30754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 30854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov public void testIsEnabledWhenAllEnabledAtLeastOneAdapter() { 30954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.allItemsEnabled = false; 31054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter1.enabledItems.add(1); 31154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.allItemsEnabled = false; 31254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov mAdapter3.enabledItems.add(1); 31354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 31454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov CompositeListAdapter adapter = new CompositeListAdapter(); 31554d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter1); 31654d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov adapter.addAdapter(mAdapter3); 31754d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov 31854d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertFalse(adapter.isEnabled(0)); 31954d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(1)); 32054d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertFalse(adapter.isEnabled(2)); 32154d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertTrue(adapter.isEnabled(3)); 32254d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov assertFalse(adapter.isEnabled(4)); 32354d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov } 32454d716f3ac9969d3126b878250d41f6fef472a47Dmitri Plotnikov} 325