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

Commit 435d2f72 authored by Doris Liu's avatar Doris Liu
Browse files

Test for end value when ValueAnimators end

Change-Id: Iaec25a3e2379fd32ee003bff9670f8fde8b4038f
parent be5a8ac5
Loading
Loading
Loading
Loading
+58 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,8 @@ import android.os.SystemClock;
import android.test.ActivityInstrumentationTestCase2;
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.SmallTest;


import static android.test.MoreAsserts.assertNotEqual;

public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAnimatorActivity> {
public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAnimatorActivity> {
    private ValueAnimator a1;
    private ValueAnimator a1;
    private ValueAnimator a2;
    private ValueAnimator a2;
@@ -27,6 +29,11 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
    private final static long TOLERANCE = 100; // ms
    private final static long TOLERANCE = 100; // ms
    private final static long POLL_INTERVAL = 100; // ms
    private final static long POLL_INTERVAL = 100; // ms


    private final static float A1_START_VALUE = 0f;
    private final static float A1_END_VALUE = 1f;
    private final static int A2_START_VALUE = 100;
    private final static int A2_END_VALUE = 200;

    public ValueAnimatorTests() {
    public ValueAnimatorTests() {
        super(BasicAnimatorActivity.class);
        super(BasicAnimatorActivity.class);
    }
    }
@@ -34,8 +41,8 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
    @Override
    @Override
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        super.setUp();
        super.setUp();
        a1 = ValueAnimator.ofFloat(0, 1f).setDuration(300);
        a1 = ValueAnimator.ofFloat(A1_START_VALUE, A1_END_VALUE).setDuration(300);
        a2 = ValueAnimator.ofInt(100, 200).setDuration(500);
        a2 = ValueAnimator.ofInt(A2_START_VALUE, A2_END_VALUE).setDuration(500);
    }
    }


    @Override
    @Override
@@ -379,6 +386,55 @@ public class ValueAnimatorTests extends ActivityInstrumentationTestCase2<BasicAn
        assertTrue(Math.abs(entireSpan - frameDelta) < TOLERANCE);
        assertTrue(Math.abs(entireSpan - frameDelta) < TOLERANCE);
    }
    }


    @SmallTest
    public void testEndValue() throws Throwable {
        final MyListener l1 = new MyListener();
        a1.addListener(l1);

        final MyListener l2 = new MyListener();
        a2.addListener(l2);

        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                a1.start();
                a2.start();
            }
        });

        Thread.sleep(POLL_INTERVAL);
        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                // Animation has started but not finished, check animated values against end values
                assertFalse(l1.endCalled);
                assertFalse(l2.endCalled);
                assertNotEqual(A1_END_VALUE, a1.getAnimatedValue());
                assertNotEqual(A1_END_VALUE, a2.getAnimatedValue());

                // Force a2 to end.
                a2.end();
            }
        });

        Thread.sleep(a1.getTotalDuration());

        runTestOnUiThread(new Runnable() {
            @Override
            public void run() {
                assertFalse(l1.cancelCalled);
                assertTrue(l1.endCalled);
                assertFalse(l2.cancelCalled);
                assertTrue(l2.endCalled);

                // By now a1 should have finished normally and a2 has skipped to the end, check
                // their end values.
                assertEquals(A1_END_VALUE, ((Float) (a1.getAnimatedValue())).floatValue());
                assertEquals(A2_END_VALUE, ((Integer) (a2.getAnimatedValue())).intValue());
            }
        });
    }

    class MyUpdateListener implements ValueAnimator.AnimatorUpdateListener {
    class MyUpdateListener implements ValueAnimator.AnimatorUpdateListener {
        boolean wasRunning = false;
        boolean wasRunning = false;
        long firstRunningFrameTime = -1;
        long firstRunningFrameTime = -1;