package com.bumptech.glide.load.resource.bitmap;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.Application;
import android.graphics.Bitmap;
import com.bumptech.glide.Glide;
import com.bumptech.glide.GlideBuilder;
import com.bumptech.glide.load.Transformation;
import com.bumptech.glide.load.engine.Resource;
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.tests.KeyAssertions;
import com.bumptech.glide.tests.Util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18)
public class CenterCropTest {
@Mock Resource<Bitmap> resource;
@Mock BitmapPool pool;
@Mock Transformation<Bitmap> transformation;
private CenterCrop centerCrop;
private int bitmapWidth;
private int bitmapHeight;
private Bitmap bitmap;
private Application context;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
bitmapWidth = 100;
bitmapHeight = 100;
bitmap = Bitmap.createBitmap(bitmapWidth, bitmapHeight, Bitmap.Config.ARGB_8888);
when(resource.get()).thenReturn(bitmap);
when(pool.get(anyInt(), anyInt(), any(Bitmap.Config.class)))
.thenAnswer(new Util.CreateBitmap());
context = RuntimeEnvironment.application;
Glide.init(new GlideBuilder().setBitmapPool(pool).build(context));
centerCrop = new CenterCrop();
}
@After
public void tearDown() {
Glide.tearDown();
}
@Test
public void testDoesNotPutNullBitmapAcquiredFromPool() {
reset(pool);
when(pool.get(anyInt(), anyInt(), any(Bitmap.Config.class))).thenReturn(null);
centerCrop.transform(context, resource, 100, 100);
verify(pool, never()).put(any(Bitmap.class));
}
@Test
public void testReturnsGivenResourceIfMatchesSizeExactly() {
Resource<Bitmap> result =
centerCrop.transform(context, resource, bitmapWidth, bitmapHeight);
assertEquals(resource, result);
}
@Test
public void testDoesNotRecycleGivenResourceIfMatchesSizeExactly() {
centerCrop.transform(context, resource, bitmapWidth, bitmapHeight);
verify(resource, never()).recycle();
}
@Test
public void testDoesNotRecycleGivenResource() {
centerCrop.transform(context, resource, 50, 50);
verify(resource, never()).recycle();
}
@Test
public void testAsksBitmapPoolForArgb8888IfInConfigIsNull() {
Shadows.shadowOf(bitmap).setConfig(null);
centerCrop.transform(context, resource, 10, 10);
verify(pool).get(anyInt(), anyInt(), eq(Bitmap.Config.ARGB_8888));
verify(pool, never()).get(anyInt(), anyInt(), (Bitmap.Config) isNull());
}
@Test
public void testReturnsBitmapWithExactlyGivenDimensionsIfBitmapIsLargerThanTarget() {
int expectedWidth = 75;
int expectedHeight = 74;
for (int[] dimens : new int[][] { new int[] { 800, 200 }, new int[] { 450, 100 },
new int[] { 78, 78 } }) {
Bitmap toTransform = Bitmap.createBitmap(dimens[0], dimens[1], Bitmap.Config.ARGB_4444);
when(resource.get()).thenReturn(toTransform);
Resource<Bitmap> result =
centerCrop.transform(context, resource, expectedWidth, expectedHeight);
Bitmap transformed = result.get();
assertEquals(expectedWidth, transformed.getWidth());
assertEquals(expectedHeight, transformed.getHeight());
}
}
@Test
public void testReturnsBitmapWithExactlyGivenDimensionsIfBitmapIsSmallerThanTarget() {
int expectedWidth = 100;
int expectedHeight = 100;
for (int[] dimens : new int[][] { new int[] { 50, 90 }, new int[] { 150, 2 },
new int[] { 78, 78 } }) {
Bitmap toTransform = Bitmap.createBitmap(dimens[0], dimens[1], Bitmap.Config.ARGB_4444);
when(resource.get()).thenReturn(toTransform);
Resource<Bitmap> result =
centerCrop.transform(context, resource, expectedWidth, expectedHeight);
Bitmap transformed = result.get();
assertEquals(expectedWidth, transformed.getWidth());
assertEquals(expectedHeight, transformed.getHeight());
}
}
@Test
public void testEquals() throws NoSuchAlgorithmException {
KeyAssertions.assertSame(centerCrop, new CenterCrop());
doAnswer(new Util.WriteDigest("other")).when(transformation)
.updateDiskCacheKey(any(MessageDigest.class));
KeyAssertions.assertDifferent(centerCrop, transformation);
}
}