@Override public synchronized int findOrCreateId(@NonNull DownloadTask task) { final Integer candidate = keyToIdMap.get(task); if (candidate != null) return candidate; final int size = storedInfos.size(); for (int i = 0; i < size; i++) { final BreakpointInfo info = storedInfos.valueAt(i); if (info != null && info.isSameFrom(task)) { return info.id; } } final int unStoredSize = unStoredTasks.size(); for (int i = 0; i < unStoredSize; i++) { final IdentifiedTask another = unStoredTasks.valueAt(i); if (another == null) continue; if (another.compareIgnoreId(task)) return another.getId(); } final int id = allocateId(); unStoredTasks.put(id, task.mock(id)); keyToIdMap.add(task, id); return id; }
private static DownloadTask mockTask() { DownloadTask task = mock(DownloadTask.class); doReturn(mock(DownloadTask.MockTaskForCompare.class)).when(task).mock(anyInt()); when(task.getUrl()).thenReturn("https://jacksgong.com/" + index++); return task; }
@Test public void mockTaskForCompare() { DownloadTask task = new DownloadTask .Builder("https://jacksgong.com", parentPath, filename) .build(); IdentifiedTask identifiedTask = task.mock(0); assertThat(identifiedTask.compareIgnoreId(task)).isTrue(); task = new DownloadTask .Builder("https://www.jacksgong.com", new File(parentPath)) .build(); identifiedTask = task.mock(0); assertThat(identifiedTask.compareIgnoreId(task)).isTrue(); task = new DownloadTask .Builder("https://jacksgong.com", "non-exist-parent", "non-exist") .build(); identifiedTask = task.mock(0); assertThat(identifiedTask.compareIgnoreId(task)).isTrue(); }