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 com.android.frameworktest.listview; 18 19import android.app.Instrumentation; 20import android.test.ActivityInstrumentationTestCase; 21import android.test.suitebuilder.annotation.LargeTest; 22import android.test.suitebuilder.annotation.MediumTest; 23import android.view.KeyEvent; 24import android.widget.AbsListView; 25import android.widget.ListView; 26 27import android.test.TouchUtils; 28 29public class ListScrollListenerTest extends ActivityInstrumentationTestCase<ListScrollListener> implements 30 AbsListView.OnScrollListener { 31 private ListScrollListener mActivity; 32 private ListView mListView; 33 private int mFirstVisibleItem = -1; 34 private int mVisibleItemCount = -1; 35 private int mTotalItemCount = -1; 36 37 public ListScrollListenerTest() { 38 super("com.android.frameworktest", ListScrollListener.class); 39 } 40 41 @Override 42 protected void setUp() throws Exception { 43 super.setUp(); 44 45 mActivity = getActivity(); 46 mListView = getActivity().getListView(); 47 mListView.setOnScrollListener(this); 48 } 49 50 @MediumTest 51 public void testPreconditions() { 52 assertNotNull(mActivity); 53 assertNotNull(mListView); 54 55 assertEquals(0, mFirstVisibleItem); 56 } 57 58 @LargeTest 59 public void testKeyScrolling() { 60 Instrumentation inst = getInstrumentation(); 61 62 int firstVisibleItem = mFirstVisibleItem; 63 for (int i = 0; i < mVisibleItemCount * 2; i++) { 64 inst.sendCharacterSync(KeyEvent.KEYCODE_DPAD_DOWN); 65 } 66 inst.waitForIdleSync(); 67 assertTrue("Arrow scroll did not happen", mFirstVisibleItem > firstVisibleItem); 68 69 firstVisibleItem = mFirstVisibleItem; 70 inst.sendCharacterSync(KeyEvent.KEYCODE_SPACE); 71 inst.waitForIdleSync(); 72 assertTrue("Page scroll did not happen", mFirstVisibleItem > firstVisibleItem); 73 74 firstVisibleItem = mFirstVisibleItem; 75 KeyEvent down = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, 76 KeyEvent.KEYCODE_DPAD_DOWN, 0, KeyEvent.META_ALT_ON); 77 KeyEvent up = new KeyEvent(0, 0, KeyEvent.ACTION_UP, 78 KeyEvent.KEYCODE_DPAD_DOWN, 0, KeyEvent.META_ALT_ON); 79 inst.sendKeySync(down); 80 inst.sendKeySync(up); 81 inst.waitForIdleSync(); 82 83 assertTrue("Full scroll did not happen", mFirstVisibleItem > firstVisibleItem); 84 assertEquals("Full scroll did not happen", mTotalItemCount, 85 mFirstVisibleItem + mVisibleItemCount); 86 } 87 88 @LargeTest 89 public void testTouchScrolling() { 90 int firstVisibleItem = mFirstVisibleItem; 91 TouchUtils.dragQuarterScreenUp(this); 92 TouchUtils.dragQuarterScreenUp(this); 93 assertTrue("Touch scroll did not happen", mFirstVisibleItem > firstVisibleItem); 94 } 95 96 97 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 98 mFirstVisibleItem = firstVisibleItem; 99 mVisibleItemCount = visibleItemCount; 100 mTotalItemCount = totalItemCount; 101 } 102 103 public void onScrollStateChanged(AbsListView view, int scrollState) { 104 } 105} 106