package com.bumptech.glide.request.target;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import com.bumptech.glide.request.transition.Transition;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18)
public class ImageViewTargetTest {
private ImageView view;
private TestTarget target;
private ColorDrawable drawable;
@Before
public void setUp() {
view = new ImageView(RuntimeEnvironment.application);
target = new TestTarget(view);
drawable = new ColorDrawable(Color.RED);
}
@Test
public void testReturnsCurrentDrawable() {
view.setImageDrawable(drawable);
assertEquals(drawable, target.getCurrentDrawable());
}
@Test
public void testSetsDrawableSetsDrawableOnView() {
target.setDrawable(drawable);
assertEquals(drawable, view.getDrawable());
}
@Test
public void testSetsDrawableOnLoadStarted() {
target.onLoadStarted(drawable);
assertEquals(drawable, view.getDrawable());
}
@Test
public void testSetDrawableOnLoadFailed() {
target.onLoadFailed(drawable);
assertEquals(drawable, view.getDrawable());
}
@Test
public void testSetsDrawableOnLoadCleared() {
target.onLoadCleared(drawable);
assertEquals(drawable, view.getDrawable());
}
@Test
public void testSetsDrawableOnViewInOnResourceReadyWhenAnimationReturnsFalse() {
@SuppressWarnings("unchecked") Transition<Drawable> animation = mock(Transition.class);
when(animation.transition(any(Drawable.class), eq(target))).thenReturn(false);
Drawable resource = new ColorDrawable(Color.GRAY);
target.onResourceReady(resource, animation);
assertEquals(resource, target.resource);
}
@Test
public void testDoesNotSetDrawableOnViewInOnResourceReadyWhenAnimationReturnsTrue() {
Drawable resource = new ColorDrawable(Color.RED);
@SuppressWarnings("unchecked") Transition<Drawable> animation = mock(Transition.class);
when(animation.transition(eq(resource), eq(target))).thenReturn(true);
target.onResourceReady(resource, animation);
assertNull(target.resource);
}
@Test
public void testProvidesCurrentPlaceholderToAnimationIfPresent() {
Drawable placeholder = new ColorDrawable(Color.BLACK);
view.setImageDrawable(placeholder);
@SuppressWarnings("unchecked") Transition<Drawable> animation = mock(Transition.class);
target.onResourceReady(new ColorDrawable(Color.GREEN), animation);
verify(animation).transition(eq(placeholder), eq(target));
}
private static class TestTarget extends ImageViewTarget<Drawable> {
public Drawable resource;
public TestTarget(ImageView view) {
super(view);
}
@Override
protected void setResource(Drawable resource) {
this.resource = resource;
}
}
}