package com.bumptech.glide.load.resource.drawable;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.drawable.Drawable;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE, sdk = 18)
public class DrawableResourceTest {
private TestDrawable drawable;
private DrawableResource<TestDrawable> resource;
@Before
public void setUp() {
drawable = mock(TestDrawable.class);
resource = new DrawableResource<TestDrawable>(drawable) {
@Override
public Class<TestDrawable> getResourceClass() {
return TestDrawable.class;
}
@Override
public int getSize() {
return 0;
}
@Override
public void recycle() {
}
};
}
@Test
public void testDoesNotReturnOriginalDrawableOnGet() {
when(drawable.getConstantState()).thenReturn(mock(Drawable.ConstantState.class));
assertNotEquals(drawable, resource.get());
}
@Test
public void testReturnsNewDrawableOnGet() {
GifDrawable expected = mock(GifDrawable.class);
Drawable.ConstantState constantState = mock(Drawable.ConstantState.class);
when(constantState.newDrawable()).thenReturn(expected);
when(drawable.getConstantState()).thenReturn(constantState);
assertEquals(expected, resource.get());
verify(drawable).getConstantState();
verify(constantState).newDrawable();
}
@Test(expected = NullPointerException.class)
public void testThrowsIfDrawableIsNull() {
new DrawableResource<TestDrawable>(null) {
@Override
public Class<TestDrawable> getResourceClass() {
return TestDrawable.class;
}
@Override
public int getSize() {
return 0;
}
@Override
public void recycle() {
}
};
}
/**
* Just to have a type to test with which is not directly Drawable
*/
private static class TestDrawable extends Drawable {
@Override
public void draw(Canvas canvas) {
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
@Override
public int getOpacity() {
return 0;
}
}
}