1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.widget.listview.arrowscroll;
18
19import android.test.ActivityInstrumentationTestCase2;
20import android.test.suitebuilder.annotation.MediumTest;
21import android.test.suitebuilder.annotation.Suppress;
22import android.util.ListUtil;
23import android.view.KeyEvent;
24import android.widget.ListView;
25import android.widget.listview.ListOfShortShortTallShortShort;
26
27public class ListOfShortShortTallShortShortTest extends ActivityInstrumentationTestCase2<ListOfShortShortTallShortShort> {
28    private ListView mListView;
29    private ListUtil mListUtil;
30
31    public ListOfShortShortTallShortShortTest() {
32        super(ListOfShortShortTallShortShort.class);
33    }
34
35    @Override
36    protected void setUp() throws Exception {
37        super.setUp();
38        mListView = getActivity().getListView();
39        mListUtil = new ListUtil(mListView, getInstrumentation());
40    }
41
42    @MediumTest
43    @Suppress // Failing.
44    public void testPreconditions() {
45        assertEquals("list item count", 5, mListView.getCount());
46        assertEquals("list visible child count", 3, mListView.getChildCount());
47        int firstTwoHeight = mListView.getChildAt(0).getHeight() + mListView.getChildAt(1).getHeight();
48        assertTrue("first two items should fit within fading edge",
49                firstTwoHeight <= mListView.getVerticalFadingEdgeLength());
50        assertTrue("first two items should fit within list max scroll",
51                firstTwoHeight <= mListView.getMaxScrollAmount());
52    }
53
54    @MediumTest
55    public void testFadeTopTwoItemsOut() {
56        // put 2nd item selected
57        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
58        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
59
60        // one more to get two items scrolled off
61        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
62
63        assertEquals("selected item position", 2, mListView.getSelectedItemPosition());
64        assertTrue("selected item top should be above list top",
65                mListView.getSelectedView().getTop() < mListUtil.getListTop());
66        assertTrue("selected item bottom should be below list bottom",
67                mListView.getSelectedView().getBottom() > mListUtil.getListBottom());
68        assertEquals("should only be 1 child of list (2 should have been scrolled off and removed",
69                1, mListView.getChildCount());
70    }
71
72    @MediumTest
73    @Suppress // Failing.
74    public void testFadeInTwoBottomItems() {
75        // put 2nd item selected
76        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
77        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
78
79        // one more to get two items scrolled off
80        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
81        assertEquals("number of list children", 1, mListView.getChildCount());
82
83        // last down brings bottom two items into view
84        sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
85        assertEquals("should have scrolled two extra views onto screen",
86                3, mListView.getChildCount());
87        assertEquals("new view position", 3, mListView.getChildAt(1).getId());
88        assertEquals("new view position", 4, mListView.getChildAt(2).getId());
89
90        assertTrue("bottom most view shouldn't be above list bottom",
91                mListView.getChildAt(2).getBottom() >= mListUtil.getListBottom());
92    }
93
94    @MediumTest
95    public void testFadeOutBottomTwoItems() throws Exception {
96        mListUtil.arrowScrollToSelectedPosition(4);
97
98        // go up to tall item
99        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
100        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
101
102        // one more time to scroll off bottom two items
103        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
104
105
106        assertEquals("selected item position", 2, mListView.getSelectedItemPosition());
107        assertTrue("selected item top should be at or above list top",
108                mListView.getSelectedView().getTop() <= mListUtil.getListTop());
109        assertTrue("selected item bottom should be below list bottom",
110                mListView.getSelectedView().getBottom() > mListUtil.getListBottom());
111        assertEquals("should only be 1 child of list (2 should have been scrolled off and removed",
112                1, mListView.getChildCount());
113    }
114
115    @MediumTest
116    @Suppress // Failing.
117    public void testFadeInTopTwoItems() throws Exception {
118        mListUtil.arrowScrollToSelectedPosition(4);
119
120        // put 2nd item selected
121        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
122        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
123
124        // one more to get two items scrolled off
125        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
126        assertEquals("number of list children", 1, mListView.getChildCount());
127
128        // last down brings top two items into view
129        sendKeys(KeyEvent.KEYCODE_DPAD_UP);
130        assertEquals("should have scrolled two extra views onto screen",
131                3, mListView.getChildCount());
132        assertEquals("new view position", 0, mListView.getChildAt(0).getId());
133        assertEquals("new view position", 1, mListView.getChildAt(1).getId());
134
135        assertTrue("top most view shouldn't be above list top",
136                mListView.getChildAt(0).getTop() <= mListUtil.getListTop());
137    }
138
139
140}
141