void performCancel(Action action) { String key = action.request.key; BitmapHunter hunter = hunterMap.get(key); if (hunter != null) { hunter.detach(action); if (hunter.cancel()) { hunterMap.remove(key); if (action.picasso.loggingEnabled) { log(OWNER_DISPATCHER, VERB_CANCELED, action.request.logId()); } } } if (pausedTags.contains(action.getTag())) { pausedActions.remove(action.getTarget()); if (action.picasso.loggingEnabled) { log(OWNER_DISPATCHER, VERB_CANCELED, action.request.logId(), "because paused request got canceled"); } } Action remove = failedActions.remove(action.getTarget()); if (remove != null && remove.picasso.loggingEnabled) { log(OWNER_DISPATCHER, VERB_CANCELED, remove.request.logId(), "from replaying"); } }
@Test public void performPauseOnlyDetachesPausedRequest() { Action action1 = mockAction(URI_KEY_1, URI_1, mockTarget(), "tag1"); Action action2 = mockAction(URI_KEY_1, URI_1, mockTarget(), "tag2"); BitmapHunter hunter = mockHunter(URI_KEY_1, new RequestHandler.Result(bitmap1, MEMORY)); when(hunter.getActions()).thenReturn(Arrays.asList(action1, action2)); dispatcher.hunterMap.put(URI_KEY_1, hunter); dispatcher.performPauseTag("tag1"); assertThat(dispatcher.hunterMap).hasSize(1); assertThat(dispatcher.hunterMap.containsValue(hunter)).isTrue(); assertThat(dispatcher.pausedActions).hasSize(1); assertThat(dispatcher.pausedActions.containsValue(action1)).isTrue(); verify(hunter).detach(action1); verify(hunter, never()).detach(action2); }
@Test public void performPauseDetachesRequestAndCancelsHunter() { Action action = mockAction(URI_KEY_1, URI_1, "tag"); BitmapHunter hunter = mockHunter(URI_KEY_1, new RequestHandler.Result(bitmap1, MEMORY), action); when(hunter.cancel()).thenReturn(true); dispatcher.hunterMap.put(URI_KEY_1, hunter); dispatcher.performPauseTag("tag"); assertThat(dispatcher.hunterMap).isEmpty(); assertThat(dispatcher.pausedActions).hasSize(1); assertThat(dispatcher.pausedActions.containsValue(action)).isTrue(); verify(hunter).detach(action); verify(hunter).cancel(); }
@Test public void detachMultipleRequests() { Action action = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); Action action2 = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); BitmapHunter hunter = new TestableBitmapHunter(picasso, dispatcher, cache, stats, action); hunter.attach(action2); hunter.detach(action2); assertThat(hunter.action).isNotNull(); assertThat(hunter.actions).isNotNull(); assertThat(hunter.actions).isEmpty(); hunter.detach(action); assertThat(hunter.action).isNull(); }
@Test public void performCancelUnqueuesAndDetachesPausedRequest() { Action action = mockAction(URI_KEY_1, URI_1, mockTarget(), "tag"); BitmapHunter hunter = mockHunter(URI_KEY_1 + KEY_SEPARATOR, new RequestHandler.Result(bitmap1, MEMORY), action); dispatcher.hunterMap.put(URI_KEY_1 + KEY_SEPARATOR, hunter); dispatcher.pausedTags.add("tag"); dispatcher.pausedActions.put(action.getTarget(), action); dispatcher.performCancel(action); assertThat(dispatcher.pausedTags).containsExactly("tag"); assertThat(dispatcher.pausedActions).isEmpty(); verify(hunter).detach(action); }
@Test public void cancelSingleRequest() { Action action1 = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); BitmapHunter hunter = new TestableBitmapHunter(picasso, dispatcher, cache, stats, action1); hunter.future = new FutureTask<>(mock(Runnable.class), mock(Object.class)); assertThat(hunter.isCancelled()).isFalse(); assertThat(hunter.cancel()).isFalse(); hunter.detach(action1); assertThat(hunter.cancel()).isTrue(); assertThat(hunter.isCancelled()).isTrue(); }
@Test public void performCancelDetachesRequestAndCleansUp() { BitmapTarget target = mockTarget(); Action action = mockAction(URI_KEY_1, URI_1, target); BitmapHunter hunter = mockHunter(URI_KEY_1 + KEY_SEPARATOR, new RequestHandler.Result(bitmap1, MEMORY)); hunter.attach(action); when(hunter.cancel()).thenReturn(true); dispatcher.hunterMap.put(URI_KEY_1 + KEY_SEPARATOR, hunter); dispatcher.failedActions.put(target, action); dispatcher.performCancel(action); verify(hunter).detach(action); verify(hunter).cancel(); assertThat(dispatcher.hunterMap).isEmpty(); assertThat(dispatcher.failedActions).isEmpty(); }
@Test public void cancelMultipleRequests() { Action action1 = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); Action action2 = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); BitmapHunter hunter = new TestableBitmapHunter(picasso, dispatcher, cache, stats, action1); hunter.future = new FutureTask<>(mock(Runnable.class), mock(Object.class)); hunter.attach(action2); assertThat(hunter.isCancelled()).isFalse(); assertThat(hunter.cancel()).isFalse(); hunter.detach(action1); hunter.detach(action2); assertThat(hunter.cancel()).isTrue(); assertThat(hunter.isCancelled()).isTrue(); }
@Test public void detachSingleRequest() { Action action = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); BitmapHunter hunter = new TestableBitmapHunter(picasso, dispatcher, cache, stats, action); assertThat(hunter.action).isNotNull(); hunter.detach(action); assertThat(hunter.action).isNull(); }
@Test public void attachSingleRequest() { Action action1 = mockAction(URI_KEY_1, URI_1, mockImageViewTarget()); BitmapHunter hunter = new TestableBitmapHunter(picasso, dispatcher, cache, stats, action1); assertThat(hunter.action).isEqualTo(action1); hunter.detach(action1); hunter.attach(action1); assertThat(hunter.action).isEqualTo(action1); assertThat(hunter.actions).isNull(); }
@Test public void performCancelMultipleRequestsDetachesOnly() { Action action1 = mockAction(URI_KEY_1, URI_1); Action action2 = mockAction(URI_KEY_1, URI_1); BitmapHunter hunter = mockHunter(URI_KEY_1 + KEY_SEPARATOR, new RequestHandler.Result(bitmap1, MEMORY)); hunter.attach(action1); hunter.attach(action2); dispatcher.hunterMap.put(URI_KEY_1 + KEY_SEPARATOR, hunter); dispatcher.performCancel(action1); verify(hunter).detach(action1); verify(hunter).cancel(); assertThat(dispatcher.hunterMap).hasSize(1); }
@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 getPriorityAfterDetach() { 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); hunter.detach(action2); assertThat(hunter.getAction()).isEqualTo(action1); assertThat(hunter.getActions()).isEmpty(); assertThat(hunter.getPriority()).isEqualTo(NORMAL); }