14ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar/* 24ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * Copyright (C) 2014 The Android Open Source Project 34ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * 44ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 54ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * you may not use this file except in compliance with the License. 64ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * You may obtain a copy of the License at 74ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * 84ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 94ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * 104ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * Unless required by applicable law or agreed to in writing, software 114ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 124ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * See the License for the specific language governing permissions and 144ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar * limitations under the License. 154ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar */ 164ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarpackage android.support.v4.widget; 174ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 184ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarimport android.content.Context; 194ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarimport android.test.AndroidTestCase; 2048e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyarimport android.util.Log; 2148e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyarimport android.view.animation.AnimationUtils; 224ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarimport android.view.animation.Interpolator; 2348e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyarimport android.view.animation.LinearInterpolator; 244ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 254ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarimport java.lang.reflect.Constructor; 2648e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyarimport java.lang.reflect.Field; 2748e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyarimport java.lang.reflect.InvocationTargetException; 284ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 294ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyarabstract public class ScrollerCompatTestBase extends AndroidTestCase { 304ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 3148e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar private static final boolean DEBUG = false; 3248e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar 3348e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar private final String TAG; 3448e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar 354ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar private final int mApiLevel; 364ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 374ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar private ScrollerCompat mScroller; 384ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 394ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar public ScrollerCompatTestBase(int apiLevel) { 404ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mApiLevel = apiLevel; 4148e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar TAG = "ScrollerCompatTest api:" + apiLevel; 424ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar } 434ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 4448e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar protected void createScroller(Interpolator interpolator) 4548e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, 4648e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar InstantiationException { 474ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar Constructor<ScrollerCompat> constructor = ScrollerCompat.class 484ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar .getDeclaredConstructor(int.class, Context.class, Interpolator.class); 494ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar constructor.setAccessible(true); 5048e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar mScroller = constructor.newInstance(mApiLevel, getContext(), interpolator); 514ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar } 524ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 5348e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar public void testTargetReached() throws Throwable { 5448e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar if (DEBUG) { 5548e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar Log.d(TAG, "testing if target is reached"); 5648e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar } 5748e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar createScroller(null); 584ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mScroller.fling(0, 0, 0, 1000, 594ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); 604ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar int target = mScroller.getFinalY(); 614ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar while (mScroller.computeScrollOffset()) { 624ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar Thread.sleep(100); 634ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar } 644ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar assertEquals("given enough time, scroller should reach target position", target, 654ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mScroller.getCurrY()); 664ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar } 674ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar 6848e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar public void testAbort() throws Throwable { 6948e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar if (DEBUG) { 7048e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar Log.d(TAG, "testing abort"); 7148e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar } 7248e3efd2e7bc8057212d3936a239838ecf6e40a9Yigit Boyar createScroller(null); 734ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mScroller.fling(0, 0, 0, 10000, 744ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE); 754ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar assertTrue("Scroller should have some offset", mScroller.computeScrollOffset()); 764ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mScroller.abortAnimation(); 774ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar assertFalse("Scroller should clear offset after being aborted", 784ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar mScroller.computeScrollOffset()); 794ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar } 804ad0efc06631e6e35d8ced424c36438bf5827569Yigit Boyar} 81