package com.bumptech.glide.load.data; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.res.AssetManager; import com.bumptech.glide.Priority; import java.io.IOException; import java.io.InputStream; 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.annotation.Config; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, sdk = 18) public class StreamAssetPathFetcherTest { @Mock AssetManager assetManager; @Mock InputStream expected; @Mock DataFetcher.DataCallback<InputStream> callback; private StreamAssetPathFetcher fetcher; private String assetPath; @Before public void setUp() throws IOException { MockitoAnnotations.initMocks(this); assetPath = "/some/asset/path"; fetcher = new StreamAssetPathFetcher(assetManager, assetPath); when(assetManager.open(eq(assetPath))).thenReturn(expected); } @Test public void testOpensInputStreamForPathWithAssetManager() throws Exception { fetcher.loadData(Priority.NORMAL, callback); verify(callback).onDataReady(eq(expected)); } @Test public void testClosesOpenedInputStreamOnCleanup() throws Exception { fetcher.loadData(Priority.NORMAL, callback); fetcher.cleanup(); verify(expected).close(); } @Test public void testDoesNothingOnCleanupIfNoDataLoaded() throws IOException { fetcher.cleanup(); verify(expected, never()).close(); } @Test public void testDoesNothingOnCancel() throws Exception { fetcher.loadData(Priority.NORMAL, callback); fetcher.cancel(); verify(expected, never()).close(); } }