@Override public void run() { while (!shutedDown) { final DownloadTask nextTask; synchronized (this) { if (taskList.isEmpty() || paused) { runningTask = null; looping = false; break; } nextTask = taskList.remove(0); } nextTask.execute(listenerBunch); } }
/** * Attach the {@code listener} to this manager and execute the {@code task}. * * @param task the task will be execute. * @param listener the listener will be attached to this manager. */ public synchronized void executeTaskWithUnifiedListener(@NonNull DownloadTask task, @NonNull DownloadListener listener) { attachListener(task, listener); task.execute(hostListener); }
@Override public void run() { for (DownloadTask task : scheduleTaskList) { if (!isStarted()) { callbackQueueEndOnSerialLoop(task.isAutoCallbackToUIThread()); break; } task.execute(targetListener); } } });
@Test public void executeTaskWithUnifiedListener() { final DownloadTask task = mockTask(1); doNothing().when(listenerManager).attachListener(eq(task), eq(listener)); doNothing().when(task).execute(eq(listenerManager.hostListener)); listenerManager.executeTaskWithUnifiedListener(task, listener); verify(listenerManager).attachListener(eq(task), eq(listener)); verify(task).execute(eq(listenerManager.hostListener)); }
@Test public void run() { // empty serialQueue.looping = true; serialQueue.run(); assertThat(serialQueue.looping).isFalse(); // non empty but paused serialQueue.looping = true; taskList.add(task1); taskList.add(task2); serialQueue.paused = true; serialQueue.run(); verify(task1, never()).execute(any(DownloadListener.class)); verify(task2, never()).execute(any(DownloadListener.class)); verify(taskList, never()).remove(anyInt()); assertThat(serialQueue.looping).isFalse(); // non empty and non paused serialQueue.looping = true; serialQueue.paused = false; serialQueue.run(); verify(task1).execute(any(DownloadListener.class)); verify(task2).execute(any(DownloadListener.class)); verify(taskList, times(2)).remove(eq(0)); assertThat(serialQueue.looping).isFalse(); }
doNothing().when(tasks[0]).execute(any(DownloadListener.class)); doNothing().when(tasks[1]).execute(any(DownloadListener.class)); when(context.isStarted()).thenReturn(false); context.start(listener, true); verify(tasks[0], never()).execute(any(DownloadListener.class)); verify(tasks[1], never()).execute(any(DownloadListener.class)); verify(handler).post(any(Runnable.class)); verify(queueListener).queueEnd(eq(context));
doNothing().when(tasks[0]).execute(any(DownloadListener.class)); doNothing().when(tasks[1]).execute(any(DownloadListener.class)); verify(tasks[0]).execute(any(DownloadListener.class)); verify(tasks[1], never()).execute(any(DownloadListener.class)); verify(handler, never()).post(any(Runnable.class)); verify(queueListener).queueEnd(eq(context));
@Test public void operation() { final DownloadDispatcher dispatcher = OkDownload.with().downloadDispatcher(); final String url = "url"; final Uri uri = mock(Uri.class); when(uri.getScheme()).thenReturn(ContentResolver.SCHEME_FILE); when(uri.getPath()).thenReturn("~/path"); DownloadTask task = new DownloadTask.Builder(url, uri).build(); // enqueue final DownloadListener listener = mock(DownloadListener.class); task.enqueue(listener); assertThat(task.getListener()).isEqualTo(listener); verify(dispatcher).enqueue(eq(task)); // cancel task.cancel(); verify(dispatcher).cancel(eq(task)); // execute task.execute(listener); assertThat(task.getListener()).isEqualTo(listener); verify(dispatcher).execute(eq(task)); }
@Test public void start_withoutQueueListener() throws IOException { mockOkDownload(); // without queue listener final DownloadTask[] tasks = new DownloadTask[2]; tasks[0] = spy(new DownloadTask.Builder("url1", "path", "filename1").build()); tasks[1] = spy(new DownloadTask.Builder("url2", "path", "filename1").build()); context = spy(new DownloadContext(tasks, null, queueSet)); doAnswer(new Answer() { @Override public Object answer(InvocationOnMock invocation) { final Runnable runnable = invocation.getArgument(0); runnable.run(); return null; } }).when(context).executeOnSerialExecutor(any(Runnable.class)); doNothing().when(tasks[0]).execute(any(DownloadListener.class)); doNothing().when(tasks[1]).execute(any(DownloadListener.class)); assertThat(context.isStarted()).isFalse(); context.start(listener, true); verify(context).executeOnSerialExecutor(any(Runnable.class)); verify(tasks[0]).execute(any(DownloadListener.class)); verify(tasks[1]).execute(any(DownloadListener.class)); assertThat(context.isStarted()).isTrue(); context.start(listener, false); final DownloadDispatcher dispatcher = OkDownload.with().downloadDispatcher(); verify(dispatcher).enqueue(tasks); assertThat(tasks[0].getListener()).isEqualTo(listener); assertThat(tasks[1].getListener()).isEqualTo(listener); }