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

Commit 779139dd authored by George Mount's avatar George Mount Committed by Android (Google) Code Review
Browse files

Merge "Fix HorizontalScrollViewFunctionaTest" into main

parents 99fb57b2 e2e039c9
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();
        }
    }
}
}