Back to Repositories

Testing Bitmap Configuration Strategy Implementation in Glide

This test suite validates the SizeConfigStrategy class in Glide’s bitmap recycling system, focusing on key equality comparisons for different bitmap configurations and sizes. The tests ensure proper handling of bitmap memory allocation and recycling strategies.

Test Coverage Overview

The test suite covers equality testing of SizeConfigStrategy.Key objects with varying bitmap configurations and sizes.

Key areas tested include:
  • Equal keys with identical size and config
  • Different size values
  • Different bitmap configurations
  • Null config handling

Implementation Analysis

The testing approach utilizes Google’s EqualsTester framework for comprehensive equality comparison testing. The implementation follows a structured pattern of testing multiple equality groups with different combinations of size and bitmap configuration parameters.

The test leverages Mockito for dependency injection and AndroidJUnit4 for Android-specific test execution.

Technical Details

Testing tools and setup:
  • AndroidJUnit4 test runner
  • Mockito for mocking dependencies
  • Google’s EqualsTester for equality testing
  • JUnit @Before and @Test annotations
  • Mock KeyPool implementation

Best Practices Demonstrated

The test demonstrates several testing best practices including proper test isolation, comprehensive equality testing, and efficient test organization.

Notable practices:
  • Proper test setup with @Before annotation
  • Systematic equality testing across different scenarios
  • Clear separation of test cases
  • Effective use of mocking for dependencies

bumptech/glide

library/test/src/test/java/com/bumptech/glide/load/engine/bitmap_recycle/SizeConfigStrategyTest.java

            
package com.bumptech.glide.load.engine.bitmap_recycle;

import android.graphics.Bitmap;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.common.testing.EqualsTester;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

@RunWith(AndroidJUnit4.class)
public class SizeConfigStrategyTest {

  @Mock private SizeConfigStrategy.KeyPool pool;

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void testKeyEquals() {
    new EqualsTester()
        .addEqualityGroup(
            new SizeConfigStrategy.Key(pool, 100, Bitmap.Config.ARGB_8888),
            new SizeConfigStrategy.Key(pool, 100, Bitmap.Config.ARGB_8888))
        .addEqualityGroup(new SizeConfigStrategy.Key(pool, 101, Bitmap.Config.ARGB_8888))
        .addEqualityGroup(new SizeConfigStrategy.Key(pool, 100, Bitmap.Config.RGB_565))
        .addEqualityGroup(new SizeConfigStrategy.Key(pool, 100, null /*config*/))
        .testEquals();
  }
}