@Test public void testDontPreloadItemsRepeatedlyWhileDecreasing() { final AtomicInteger called = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { if (position >= 20) { return Collections.emptyList(); } final int current = called.getAndIncrement(); assertEquals(19 - current, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 21, 10, 30); preloader.onScroll(null, 20, 10, 30); preloader.onScroll(null, 17, 10, 30); assertEquals(13, called.get()); }
@Test public void testDontPreloadItemsRepeatedlyWhileIncreasing() { final AtomicInteger called = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { final int current = called.getAndIncrement(); assertEquals(11 + current, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 1, 10, 30); preloader.onScroll(null, 4, 10, 30); assertEquals(13, called.get()); }
@Test public void testGetItemsIsNeverCalledWithStartLessThanZero() { final AtomicBoolean called = new AtomicBoolean(false); final AtomicInteger calledCount = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { if (position >= 17) { return Collections.emptyList(); } called.set(true); final int count = calledCount.getAndIncrement(); assertEquals(5 - count, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 7, 10, 30); preloader.onScroll(null, 6, 10, 30); assertTrue(called.get()); }
@Test public void testGetItemsIsCalledDecreasing() { final AtomicBoolean called = new AtomicBoolean(false); final AtomicInteger calledCount = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { // Ignore the preload caused from us starting at the end if (position >= 40) { return Collections.emptyList(); } final int count = calledCount.getAndIncrement(); called.set(true); assertEquals(28 - count, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 30, 10, 40); preloader.onScroll(null, 29, 10, 40); assertTrue(called.get()); }
@SuppressWarnings("ResultOfMethodCallIgnored") @Test public void testItemsArePreloadedWithGlide() { final List<Object> objects = new ArrayList<>(); objects.add(new Object()); objects.add(new Object()); final HashSet<Object> loadedObjects = new HashSet<>(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { return objects.subList(position - 11, position - 10); } @Nullable @Override public RequestBuilder<Object> getPreloadRequestBuilder(@NonNull Object item) { loadedObjects.add(item); return super.getPreloadRequestBuilder(item); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 1, 10, 13); assertThat(loadedObjects).containsAllIn(objects); }
@Test public void testGetItemsIsNeverCalledWithEndGreaterThanTotalItems() { final AtomicBoolean called = new AtomicBoolean(false); final AtomicInteger calledCount = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { called.set(true); final int count = calledCount.getAndIncrement(); assertEquals(26 + count, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 16, 10, 30); assertTrue(called.get()); }
@Test public void testGetItemsIsCalledIncreasing() { final AtomicBoolean called = new AtomicBoolean(false); final AtomicInteger calledCount = new AtomicInteger(); ListPreloaderAdapter preloaderAdapter = new ListPreloaderAdapter() { @NonNull @Override public List<Object> getPreloadItems(int position) { called.set(true); final int count = calledCount.getAndIncrement(); assertEquals(11 + count, position); return super.getPreloadItems(position); } }; ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, 10); preloader.onScroll(null, 1, 10, 30); assertEquals(10, calledCount.get()); }
ListPreloader<Object> preloader = new ListPreloader<>(requestManager, preloaderAdapter, preloaderAdapter, toPreload); preloader.onScroll(null, 1, 10, 20);
Iterable<Integer> expected = Arrays.asList(10, 11, 20, 21, 10, 11, 20, 21); preloader.onScroll(null, 1, 10, 1 + 10 + 2);