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