AnimatorTestRule


class AnimatorTestRule : TestRule


JUnit TestRule that can be used to run Animators without actually waiting for the duration of the animation. This also helps the test to be written in a deterministic manner. Create an instance of AnimatorTestRule and specify it as a org.junit.ClassRule of the test class. Use advanceTimeBy to advance animators that have been started. Note that advanceTimeBy should be called from the same thread you have used to start the animator.

@SmallTest
@RunWith(AndroidJUnit4.class)
public class SampleAnimatorTest {

    @ClassRule
    public static AnimatorTestRule sAnimatorTestRule = new AnimatorTestRule();

    @UiThreadTest
    @Test
    public void sample() {
        final ValueAnimator animator = ValueAnimator.ofInt(0, 1000);
        animator.setDuration(1000L);
        assertThat(animator.getAnimatedValue(), is(0));
        animator.start();
        sAnimatorTestRule.advanceTimeBy(500L);
        assertThat(animator.getAnimatedValue(), is(500));
    }
}

Summary

Public constructors

Public functions

Unit
advanceTimeBy(timeDelta: Long)

Advances the animation clock by the given amount of delta in milliseconds.

Statement
apply(base: Statement, description: Description)
Long

Returns the current time in milliseconds tracked by AnimationHandler.

Public constructors

AnimatorTestRule

Added in 1.0.0
AnimatorTestRule()

Public functions

advanceTimeBy

Added in 1.0.0
fun advanceTimeBy(timeDelta: Long): Unit

Advances the animation clock by the given amount of delta in milliseconds. This call will produce an animation frame to all the ongoing animations. This method needs to be called on the same thread as start.

Parameters
timeDelta: Long

the amount of milliseconds to advance

apply

Added in 1.0.0
fun apply(base: Statement, description: Description): Statement

getCurrentTime

Added in 1.0.0
fun getCurrentTime(): Long

Returns the current time in milliseconds tracked by AnimationHandler. Note that this is a different time than the time tracked by SystemClock This method needs to be called on the same thread as start.