private static Action noopAction(Request data) { return new Action(mockPicasso(), data) { @Override void complete(RequestHandler.Result result) { } @Override void error(Exception e) { } @NonNull @Override Object getTarget() { throw new AssertionError(); } }; } }
static BitmapHunter mockHunter(String key, RequestHandler.Result result, Action action) { Request data = new Request.Builder(URI_1).build(); BitmapHunter hunter = mock(BitmapHunter.class); when(hunter.getKey()).thenReturn(key); when(hunter.getResult()).thenReturn(result); when(hunter.getData()).thenReturn(data); when(hunter.getAction()).thenReturn(action); Picasso picasso = mockPicasso(); when(hunter.getPicasso()).thenReturn(picasso); return hunter; }
@Test public void forFileWithNoPathSegments() { Action action = mockAction("keykeykey", Uri.fromFile(new File("/"))); BitmapHunter hunter = forRequest(mockPicasso(new FileRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(FileRequestHandler.class); }
@Test public void forAndroidBitmapResourceRequest() { Resources resources = mockResources(BITMAP_RESOURCE_VALUE); when(context.getResources()).thenReturn(resources); Action action = mockAction(RESOURCE_ID_KEY_1, null, null, RESOURCE_ID_1); BitmapHunter hunter = forRequest(mockPicasso(new ResourceRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(ResourceRequestHandler.class); }
@Test public void performRetryForContentLengthResetsNetworkPolicy() { NetworkInfo networkInfo = mockNetworkInfo(true); when(connectivityManager.getActiveNetworkInfo()).thenReturn(networkInfo); BitmapHunter hunter = new BitmapHunter(mockPicasso(), dispatcher, cache, stats, mockAction(URI_KEY_2, URI_2), RETRYING_REQUEST_HANDLER); hunter.exception = new ContentLengthException("304 error"); dispatcher.performRetry(hunter); assertThat(NetworkPolicy.shouldReadFromDiskCache(hunter.data.networkPolicy)).isFalse(); }
@Test public void forAndroidBitmapResourceUriWithId() { Action action = mockAction(RESOURCE_ID_URI_KEY, RESOURCE_ID_URI); BitmapHunter hunter = forRequest(mockPicasso(new ResourceRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(ResourceRequestHandler.class); }
@Test public void forAndroidBitmapResourceUriWithType() { Action action = mockAction(RESOURCE_TYPE_URI_KEY, RESOURCE_TYPE_URI); BitmapHunter hunter = forRequest(mockPicasso(new ResourceRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(ResourceRequestHandler.class); }
@Test public void sequenceIsIncremented() { Action action = mockAction(URI_KEY_1, URI_1); Picasso picasso = mockPicasso(); BitmapHunter hunter1 = forRequest(picasso, dispatcher, cache, stats, action); BitmapHunter hunter2 = forRequest(picasso, dispatcher, cache, stats, action); assertThat(hunter2.sequence).isGreaterThan(hunter1.sequence); }
@Test public void forContentProviderRequest() { Action action = mockAction(CONTENT_KEY_1, CONTENT_1_URL); BitmapHunter hunter = forRequest(mockPicasso(new ContentStreamRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(ContentStreamRequestHandler.class); }
@Test public void forContactsThumbnailPhotoRequest() { Action action = mockAction(CONTACT_PHOTO_KEY_1, CONTACT_PHOTO_URI_1); BitmapHunter hunter = forRequest(mockPicasso(new ContactsPhotoRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(ContactsPhotoRequestHandler.class); }
@Test public void forFileWithAuthorityRequest() { Action action = mockAction(FILE_KEY_1, FILE_1_URL); BitmapHunter hunter = forRequest(mockPicasso(new FileRequestHandler(context)), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(FileRequestHandler.class); }
@Test public void forCustomRequest() { Action action = mockAction(CUSTOM_URI_KEY, CUSTOM_URI); BitmapHunter hunter = forRequest(mockPicasso(new CustomRequestHandler()), dispatcher, cache, stats, action); assertThat(hunter.requestHandler).isInstanceOf(CustomRequestHandler.class); }
@Test public void getPriorityWithSingleRequest() { Action action = mockAction(URI_KEY_1, URI_1, HIGH); NetworkRequestHandler requestHandler = new NetworkRequestHandler(UNUSED_CALL_FACTORY, stats); BitmapHunter hunter = forRequest(mockPicasso(requestHandler), dispatcher, cache, stats, action); assertThat(hunter.getAction()).isEqualTo(action); assertThat(hunter.getActions()).isNull(); assertThat(hunter.getPriority()).isEqualTo(HIGH); }
@Test public void performSubmitWithFetchAction() { String pausedTag = "pausedTag"; dispatcher.pausedTags.add(pausedTag); assertThat(dispatcher.pausedActions).isEmpty(); FetchAction fetchAction1 = new FetchAction(mockPicasso(), new Request.Builder(URI_1).tag(pausedTag).build(), null); FetchAction fetchAction2 = new FetchAction(mockPicasso(), new Request.Builder(URI_1).tag(pausedTag).build(), null); dispatcher.performSubmit(fetchAction1); dispatcher.performSubmit(fetchAction2); assertThat(dispatcher.pausedActions).hasSize(2); }
@Test public void performCancelWithFetchActionWithCallback() { String pausedTag = "pausedTag"; dispatcher.pausedTags.add(pausedTag); assertThat(dispatcher.pausedActions).isEmpty(); Callback callback = mockCallback(); FetchAction fetchAction1 = new FetchAction(mockPicasso(), new Request.Builder(URI_1).tag(pausedTag).build(), callback); dispatcher.performCancel(fetchAction1); fetchAction1.cancel(); assertThat(dispatcher.pausedActions).isEmpty(); }
@Test public void getPriorityWithNoRequests() { Action action = mockAction(URI_KEY_1, URI_1); NetworkRequestHandler requestHandler = new NetworkRequestHandler(UNUSED_CALL_FACTORY, stats); BitmapHunter hunter = forRequest(mockPicasso(requestHandler), dispatcher, cache, stats, action); hunter.detach(action); assertThat(hunter.getAction()).isNull(); assertThat(hunter.getActions()).isNull(); assertThat(hunter.getPriority()).isEqualTo(LOW); }
@Test public void getPriorityWithMultipleRequests() { Action action1 = mockAction(URI_KEY_1, URI_1, NORMAL); Action action2 = mockAction(URI_KEY_1, URI_1, HIGH); NetworkRequestHandler requestHandler = new NetworkRequestHandler(UNUSED_CALL_FACTORY, stats); BitmapHunter hunter = forRequest(mockPicasso(requestHandler), dispatcher, cache, stats, action1); hunter.attach(action2); assertThat(hunter.getAction()).isEqualTo(action1); assertThat(hunter.getActions()).containsExactly(action2); assertThat(hunter.getPriority()).isEqualTo(HIGH); }
@Test public void performCompleteCleansUpAndPostsToMain() { Request data = new Request.Builder(URI_1).build(); Action action = noopAction(data); BitmapHunter hunter = new BitmapHunter(mockPicasso(), dispatcher, cache, stats, action, EMPTY_REQUEST_HANDLER); hunter.result = new RequestHandler.Result(bitmap1, MEMORY); dispatcher.performComplete(hunter); assertThat(dispatcher.hunterMap).isEmpty(); // TODO verify post to main thread. }
@Test public void performCompleteWithNoStoreMemoryPolicy() { Request data = new Request.Builder(URI_1).memoryPolicy(MemoryPolicy.NO_STORE).build(); Action action = noopAction(data); BitmapHunter hunter = new BitmapHunter(mockPicasso(), dispatcher, cache, stats, action, EMPTY_REQUEST_HANDLER); hunter.result = new RequestHandler.Result(bitmap1, MEMORY); dispatcher.performComplete(hunter); assertThat(dispatcher.hunterMap).isEmpty(); assertThat(cache.size()).isEqualTo(0); }
@Test public void performCompleteSetsResultInCache() { Request data = new Request.Builder(URI_1).build(); Action action = noopAction(data); BitmapHunter hunter = new BitmapHunter(mockPicasso(), dispatcher, cache, stats, action, EMPTY_REQUEST_HANDLER); hunter.result = new RequestHandler.Result(bitmap1, MEMORY); dispatcher.performComplete(hunter); assertThat(cache.get(hunter.getKey())).isSameAs(hunter.result.getBitmap()); }