package com.bumptech.glide.request.transition; import static com.bumptech.glide.request.transition.Transition.ViewAdapter; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; 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.graphics.drawable.TransitionDrawable; import android.widget.ImageView; 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 DrawableCrossFadeViewAnimationTest { private CrossFadeHarness harness; @Before public void setup() { harness = new CrossFadeHarness(); } @Test public void testStartsDefaultAnimationIfNoPreviousDrawableIsNotSet() { when(harness.adapter.getView()).thenReturn(harness.view); harness.animation.transition(harness.current, harness.adapter); verify(harness.defaultAnimation).transition(eq(harness.current), eq(harness.adapter)); } @Test public void testIgnoresNullViews() { when(harness.adapter.getView()).thenReturn(null); harness.animation.transition(harness.current, harness.adapter); } @Test public void testReturnsFalseIfStartsDefaultAnimation() { assertFalse(harness.animation.transition(harness.current, harness.adapter)); } @Test public void testSetsTransitionDrawableIfPreviousIsNotNull() { Drawable previous = new ColorDrawable(Color.WHITE); when(harness.adapter.getCurrentDrawable()).thenReturn(previous); harness.animation.transition(harness.current, harness.adapter); verify(harness.adapter).setDrawable(any(TransitionDrawable.class)); } @Test public void testReturnsTrueIfSetsTransitionDrawable() { Drawable previous = new ColorDrawable(Color.RED); when(harness.adapter.getCurrentDrawable()).thenReturn(previous); assertTrue(harness.animation.transition(harness.current, harness.adapter)); } @SuppressWarnings("unchecked") private static class CrossFadeHarness { Drawable current = new ColorDrawable(Color.GRAY); ViewAdapter adapter = mock(ViewAdapter.class); ImageView view = mock(ImageView.class); Transition<Drawable> defaultAnimation = mock(Transition.class); int duration = 200; DrawableCrossFadeTransition animation = new DrawableCrossFadeTransition(defaultAnimation, duration, true /*isCrossFadeEnabled*/); } }