Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a59a744a authored by Gaurav Bhola's avatar Gaurav Bhola Committed by Android (Google) Code Review
Browse files

Merge "Fix HorizontalScrollViewFunctionaTest" into udc-qpr-dev

parents 30b0ca31 034d0ad9
Loading
Loading
Loading
Loading
+34 −9
Original line number Original line Diff line number Diff line
@@ -17,7 +17,9 @@
package android.widget;
package android.widget;


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;


import android.content.Context;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;
import android.util.PollingCheck;
import android.util.PollingCheck;


@@ -32,6 +34,9 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;


import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

@RunWith(AndroidJUnit4.class)
@RunWith(AndroidJUnit4.class)
@MediumTest
@MediumTest
@Presubmit
@Presubmit
@@ -49,23 +54,43 @@ public class HorizontalScrollViewFunctionalTest {
    }
    }


    @Test
    @Test
    public void testScrollAfterFlingTop() {
    public void testScrollAfterFlingLeft() throws Throwable {
        mHorizontalScrollView.scrollTo(100, 0);
        WatchedEdgeEffect edgeEffect = new WatchedEdgeEffect(mActivity);
        mHorizontalScrollView.fling(-10000);
        mHorizontalScrollView.mEdgeGlowLeft = edgeEffect;
        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowLeft.getDistance() > 0);
        mActivityRule.runOnUiThread(() -> mHorizontalScrollView.scrollTo(100, 0));
        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowLeft.getDistance() == 0f);
        mActivityRule.runOnUiThread(() -> mHorizontalScrollView.fling(-10000));
        assertTrue(edgeEffect.onAbsorbLatch.await(1, TimeUnit.SECONDS));
        mActivityRule.runOnUiThread(() -> {}); // let the absorb takes effect -- least one frame
        PollingCheck.waitFor(() -> edgeEffect.getDistance() == 0f);
        assertEquals(0, mHorizontalScrollView.getScrollX());
        assertEquals(0, mHorizontalScrollView.getScrollX());
    }
    }


    @Test
    @Test
    public void testScrollAfterFlingBottom() {
    public void testScrollAfterFlingRight() throws Throwable {
        WatchedEdgeEffect edgeEffect = new WatchedEdgeEffect(mActivity);
        mHorizontalScrollView.mEdgeGlowRight = edgeEffect;
        int childWidth = mHorizontalScrollView.getChildAt(0).getWidth();
        int childWidth = mHorizontalScrollView.getChildAt(0).getWidth();
        int maxScroll = childWidth - mHorizontalScrollView.getWidth();
        int maxScroll = childWidth - mHorizontalScrollView.getWidth();
        mHorizontalScrollView.scrollTo(maxScroll - 100, 0);
        mActivityRule.runOnUiThread(() -> mHorizontalScrollView.scrollTo(maxScroll - 100, 0));
        mHorizontalScrollView.fling(10000);
        mActivityRule.runOnUiThread(() -> mHorizontalScrollView.fling(10000));
        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowRight.getDistance() > 0);
        assertTrue(edgeEffect.onAbsorbLatch.await(1, TimeUnit.SECONDS));
        mActivityRule.runOnUiThread(() -> {}); // let the absorb takes effect -- at least one frame
        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowRight.getDistance() == 0f);
        PollingCheck.waitFor(() -> mHorizontalScrollView.mEdgeGlowRight.getDistance() == 0f);
        assertEquals(maxScroll, mHorizontalScrollView.getScrollX());
        assertEquals(maxScroll, mHorizontalScrollView.getScrollX());
    }
    }

    static class WatchedEdgeEffect extends EdgeEffect {
        public CountDownLatch onAbsorbLatch = new CountDownLatch(1);

        WatchedEdgeEffect(Context context) {
            super(context);
        }

        @Override
        public void onAbsorb(int velocity) {
            super.onAbsorb(velocity);
            onAbsorbLatch.countDown();
        }
    }
}
}