/** * Check a download state and take action depending on that state. * * @param context any application context. * @param downloadId download identifier from DownloadManager. * @param checkProgress true to only check progress, false to also process install if done. */ synchronized void checkDownload(@NonNull Context context, long downloadId, boolean checkProgress) { /* Querying download manager and even the start intent are detected by strict mode so we do that in background. */ mCheckDownloadTask = AsyncTaskUtils.execute(LOG_TAG, new CheckDownloadTask(context, downloadId, checkProgress, mReleaseDetails)); }
@Test public void init() { new AsyncTaskUtils(); }
/** * Remove a previously downloaded file and any notification. */ @SuppressLint("VisibleForTests") private synchronized void removeDownload(long downloadId) { cancelNotification(); AsyncTaskUtils.execute(LOG_TAG, new RemoveDownloadTask(mContext, downloadId)); }
@Test public void execute() { @SuppressWarnings("unchecked") AsyncTask<Integer, Void, Void> task = mock(AsyncTask.class); when(task.executeOnExecutor(any(Executor.class), anyInt(), anyInt())).thenReturn(task); assertSame(task, AsyncTaskUtils.execute("", task, 1, 2)); verify(task).executeOnExecutor(any(Executor.class), eq(1), eq(2)); }
@Test public void executeFallback() { @SuppressWarnings("unchecked") AsyncTask<Integer, Void, Void> task = mock(AsyncTask.class); mockStatic(AppCenterLog.class); RejectedExecutionException exception = new RejectedExecutionException(); when(task.executeOnExecutor(any(Executor.class), anyInt(), anyInt())).thenThrow(exception).thenReturn(task); assertSame(task, AsyncTaskUtils.execute("", task, 1, 2)); verify(task, times(2)).executeOnExecutor(any(Executor.class), eq(1), eq(2)); verifyStatic(); AppCenterLog.warn(eq(""), anyString(), eq(exception)); }
@Test @PrepareForTest(AsyncTaskUtils.class) public void clickSettingsThenEnableThenBack() throws Exception { /* Click settings. */ Intent intent = mock(Intent.class); whenNew(Intent.class).withArguments(Settings.ACTION_SECURITY_SETTINGS).thenReturn(intent); ArgumentCaptor<DialogInterface.OnClickListener> clickListener = ArgumentCaptor.forClass(DialogInterface.OnClickListener.class); verify(mDialogBuilder).setPositiveButton(eq(R.string.appcenter_distribute_unknown_sources_dialog_settings), clickListener.capture()); clickListener.getValue().onClick(mUnknownSourcesDialog, DialogInterface.BUTTON_POSITIVE); when(mUnknownSourcesDialog.isShowing()).thenReturn(false); /* Verify navigation. */ verify(mFirstActivity).startActivity(intent); /* Simulate we go to settings, change value then go back. */ mockStatic(AsyncTaskUtils.class); Distribute.getInstance().onActivityPaused(mFirstActivity); when(InstallerUtils.isUnknownSourcesEnabled(mContext)).thenReturn(true); Distribute.getInstance().onActivityResumed(mFirstActivity); /* No more dialog, start download. */ verify(mDialog).show(); verify(mDialog, never()).hide(); verify(mUnknownSourcesDialog).show(); verify(mUnknownSourcesDialog, never()).hide(); verifyStatic(); AsyncTaskUtils.execute(anyString(), argThat(new ArgumentMatcher<AsyncTask<Object, ?, ?>>() { @Override public boolean matches(Object argument) { return argument instanceof DownloadTask; } }), anyVararg()); }
AsyncTaskUtils.execute(anyString(), any(DownloadTask.class), Mockito.<Void>anyVararg());
AsyncTaskUtils.execute(anyString(), argThat(sCheckCompleteTask), Mockito.<Void>anyVararg()); waitCheckDownloadTask(); verifyStatic(); AsyncTaskUtils.execute(anyString(), argThat(sCheckCompleteTask), Mockito.<Void>anyVararg()); verify(cursor).close(); AsyncTaskUtils.execute(anyString(), argThat(sCheckCompleteTask), Mockito.<Void>anyVararg());
mDownloadTask = AsyncTaskUtils.execute(LOG_TAG, new DownloadTask(mContext, releaseDetails));
mDownloadAfterSemaphore = new Semaphore(0); mDownloadTask = new AtomicReference<>(); when(AsyncTaskUtils.execute(anyString(), argThat(new ArgumentMatcher<DownloadTask>() { when(AsyncTaskUtils.execute(anyString(), argThat(new ArgumentMatcher<RemoveDownloadTask>() { mCheckDownloadAfterSemaphore = new Semaphore(0); mCompletionTask = new AtomicReference<>(); when(AsyncTaskUtils.execute(anyString(), argThat(sCheckCompleteTask), Mockito.<Void>anyVararg())).then(new Answer<CheckDownloadTask>() {