package com.bumptech.glide; import static com.bumptech.glide.tests.BackgroundUtil.testInBackground; import static org.mockito.Matchers.eq; import static org.mockito.Matchers.isA; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.widget.ImageView; import com.bumptech.glide.request.Request; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.Target; import com.bumptech.glide.tests.BackgroundUtil; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @SuppressWarnings("unchecked") @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 18) public class RequestBuilderTest { @Mock GlideContext glideContext; @Mock RequestManager requestManager; private Glide glide; @Before public void setUp() { MockitoAnnotations.initMocks(this); glide = Glide.get(RuntimeEnvironment.application); } @After public void tearDown() { Glide.tearDown(); } @Test(expected = NullPointerException.class) public void testThrowsIfContextIsNull() { new RequestBuilder<>(null /*context*/, requestManager, Object.class); } @Test(expected = NullPointerException.class) public void testThrowsWhenTransitionsOptionsIsNull() { //noinspection ConstantConditions testing if @NonNull is enforced getNullModelRequest().transition(null); } @Test public void testDoesNotThrowWithNullModelWhenRequestIsBuilt() { getNullModelRequest().into(mock(Target.class)); } @Test public void testAddsNewRequestToRequestTracker() { Target<Object> target = mock(Target.class); getNullModelRequest().into(target); verify(requestManager).track(eq(target), isA(Request.class)); } @Test public void testRemovesPreviousRequestFromRequestTracker() { Request previous = mock(Request.class); Target<Object> target = mock(Target.class); when(target.getRequest()).thenReturn(previous); getNullModelRequest().into(target); verify(requestManager).clear(eq(target)); } @Test(expected = NullPointerException.class) public void testThrowsIfGivenNullTarget() { //noinspection ConstantConditions testing if @NonNull is enforced getNullModelRequest().into((Target<Object>) null); } @Test(expected = NullPointerException.class) public void testThrowsIfGivenNullView() { getNullModelRequest().into((ImageView) null); } @Test(expected = RuntimeException.class) public void testThrowsIfIntoViewCalledOnBackgroundThread() throws InterruptedException { final ImageView imageView = new ImageView(RuntimeEnvironment.application); testInBackground(new BackgroundUtil.BackgroundTester() { @Override public void runTest() throws Exception { getNullModelRequest().into(imageView); } }); } @Test(expected = RuntimeException.class) public void testThrowsIfIntoTargetCalledOnBackgroundThread() throws InterruptedException { final Target<Object> target = mock(Target.class); testInBackground(new BackgroundUtil.BackgroundTester() { @Override public void runTest() throws Exception { getNullModelRequest().into(target); } }); } private RequestBuilder<Object> getNullModelRequest() { when(glideContext.buildImageViewTarget(isA(ImageView.class), isA(Class.class))) .thenReturn(mock(Target.class)); when(glideContext.getDefaultRequestOptions()).thenReturn(new RequestOptions()); when(requestManager.getDefaultRequestOptions()) .thenReturn((RequestOptions) new RequestOptions()); return new RequestBuilder<>(glide, requestManager, Object.class) .load((Object) null); } }