package pl.droidsonroids.gif;
import android.graphics.drawable.Drawable;
import android.view.View;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.Spy;
import org.robolectric.RobolectricTestRunner;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricTestRunner.class)
public class MultiCallbackTest {
@Mock View view;
@Spy Drawable drawable;
private Runnable action;
private MultiCallback simpleMultiCallback;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
simpleMultiCallback = new MultiCallback();
action = new Runnable() {
@Override
public void run() {
//no-op
}
};
}
@Test
public void testInvalidateDrawable() {
simpleMultiCallback.addView(view);
drawable.setCallback(simpleMultiCallback);
drawable.invalidateSelf();
verify(view).invalidateDrawable(drawable);
}
@Test
public void testScheduleDrawable() {
simpleMultiCallback.addView(view);
drawable.setCallback(simpleMultiCallback);
drawable.scheduleSelf(action, 0);
verify(view).scheduleDrawable(drawable, action, 0);
}
@Test
public void testUnscheduleDrawable() {
simpleMultiCallback.addView(view);
drawable.setCallback(simpleMultiCallback);
drawable.unscheduleSelf(action);
verify(view).unscheduleDrawable(drawable, action);
}
@Test
public void testViewRemoval() {
simpleMultiCallback.addView(view);
drawable.setCallback(simpleMultiCallback);
drawable.invalidateSelf();
simpleMultiCallback.removeView(view);
drawable.invalidateSelf();
verify(view).invalidateDrawable(drawable);
}
@Test
public void testViewInvalidate() {
final MultiCallback viewInvalidateMultiCallback = new MultiCallback(true);
viewInvalidateMultiCallback.addView(view);
drawable.setCallback(viewInvalidateMultiCallback);
drawable.invalidateSelf();
verify(view).invalidate();
}
}