Back to Repositories

Testing LottieValueAnimator Pause-Resume Callbacks in lottie-android

This test suite validates the pause and resume functionality of the LottieValueAnimator class in the Lottie Android animation library. It ensures proper callback handling and listener interactions for animation state changes.

Test Coverage Overview

The test coverage focuses on verifying animation pause and resume callback behaviors.

  • Tests pause animation callback triggering
  • Validates resume animation event handling
  • Verifies listener interaction patterns
  • Ensures correct callback count and parameter passing

Implementation Analysis

The testing approach utilizes Mockito for mocking AnimatorPauseListener behaviors and verifying interactions. Each test follows a clear arrange-act-assert pattern with mock verification to ensure precise callback execution.

The implementation leverages JUnit’s test framework while incorporating Mockito’s powerful verification methods to validate the exact number and nature of listener invocations.

Technical Details

  • JUnit 4 testing framework
  • Mockito mocking framework
  • BaseTest class extension
  • Android Animation API integration
  • Mock verification using times() and eq() matchers

Best Practices Demonstrated

The test suite demonstrates excellent testing practices through clear test organization and thorough verification.

  • Clear test method naming conventions
  • Proper test isolation and setup
  • Explicit verification of both positive and negative cases
  • Precise mock interaction verification
  • Single responsibility principle in test methods

airbnb/lottie-android

lottie/src/test/java/com/airbnb/lottie/utils/LottieValueAnimatorTest.java

            
package com.airbnb.lottie.utils;

import android.animation.Animator;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;

import com.airbnb.lottie.BaseTest;

import org.junit.Test;

public class LottieValueAnimatorTest extends BaseTest {
  @Test
  public void callOfPauseAnimationShouldFireCallbackOnAnimationPause() {
    // Set
    Animator.AnimatorPauseListener listener = mock(Animator.AnimatorPauseListener.class);

    LottieValueAnimator animator = new LottieValueAnimator();
    animator.addPauseListener(listener);

    // Do
    animator.pauseAnimation();

    // Check
    verify(listener, times(1)).onAnimationPause(eq(animator));
    verify(listener, times(0)).onAnimationResume(any());
  }

  @Test
  public void callOfResumeAnimationShouldFireCallbackOnAnimationResume() {
    // Set
    Animator.AnimatorPauseListener listener = mock(Animator.AnimatorPauseListener.class);

    LottieValueAnimator animator = new LottieValueAnimator();
    animator.addPauseListener(listener);

    // Do
    animator.resumeAnimation();

    // Check
    verify(listener, times(0)).onAnimationPause(any());
    verify(listener, times(1)).onAnimationResume(eq(animator));
  }
}