package com.bumptech.glide.request.transition;
import static org.junit.Assert.assertEquals;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.view.View;
import android.view.animation.Animation;
import com.bumptech.glide.load.DataSource;
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)
public class ViewTransitionAnimationFactoryTest {
private ViewTransition.ViewTransitionAnimationFactory viewTransitionAnimationFactory;
private ViewAnimationFactory<Object> factory;
@Before
public void setUp() {
viewTransitionAnimationFactory = mock(ViewTransition.ViewTransitionAnimationFactory.class);
factory = new ViewAnimationFactory<>(viewTransitionAnimationFactory);
}
@Test
public void testFactoryReturnsNoAnimationIfFromMemoryCache() {
Transition<Object> animation =
factory.build(DataSource.MEMORY_CACHE, true /*isFirstResource*/);
assertEquals(NoTransition.get(), animation);
verify(viewTransitionAnimationFactory, never()).build(RuntimeEnvironment.application);
}
@Test
public void testFactoryReturnsNoAnimationIfNotFirstResource() {
Transition<Object> animation =
factory.build(DataSource.DATA_DISK_CACHE, false /*isFirstResource*/);
assertEquals(NoTransition.get(), animation);
verify(viewTransitionAnimationFactory, never()).build(RuntimeEnvironment.application);
}
@Test
public void testFactoryReturnsActualAnimationIfNotIsFromMemoryCacheAndIsFirstResource() {
Transition<Object> transition =
factory.build(DataSource.DATA_DISK_CACHE, true /*isFirstResource*/);
Animation animation = mock(Animation.class);
when(viewTransitionAnimationFactory.build(any(Context.class))).thenReturn(animation);
Transition.ViewAdapter adapter = mock(Transition.ViewAdapter.class);
View view = mock(View.class);
when(adapter.getView()).thenReturn(view);
transition.transition(new Object(), adapter);
verify(view).startAnimation(eq(animation));
}
}