Home | History | Annotate | Download | only in paging
      1 /*
      2  * Copyright 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package androidx.paging
     18 
     19 import org.junit.Assert.assertEquals
     20 import org.junit.Test
     21 import org.junit.runner.RunWith
     22 import org.junit.runners.JUnit4
     23 import org.mockito.ArgumentCaptor
     24 import org.mockito.ArgumentMatchers.eq
     25 import org.mockito.Mockito.mock
     26 import org.mockito.Mockito.verify
     27 import org.mockito.Mockito.verifyNoMoreInteractions
     28 import java.util.Collections
     29 
     30 @Suppress("DEPRECATION")
     31 @RunWith(JUnit4::class)
     32 class TiledDataSourceTest {
     33 
     34     fun TiledDataSource<String>.loadInitial(
     35             startPosition: Int, count: Int, pageSize: Int): List<String> {
     36         @Suppress("UNCHECKED_CAST")
     37         val receiver = mock(PageResult.Receiver::class.java) as PageResult.Receiver<String>
     38 
     39         this.dispatchLoadInitial(true, startPosition, count, pageSize, FailExecutor(), receiver)
     40 
     41         @Suppress("UNCHECKED_CAST")
     42         val argument = ArgumentCaptor.forClass(PageResult::class.java)
     43                 as ArgumentCaptor<PageResult<String>>
     44         verify(receiver).onPageResult(eq(PageResult.INIT), argument.capture())
     45         verifyNoMoreInteractions(receiver)
     46 
     47         val observed = argument.value
     48 
     49         return observed.page
     50     }
     51 
     52     @Test
     53     fun loadInitialEmpty() {
     54         class EmptyDataSource : TiledDataSource<String>() {
     55             override fun countItems(): Int {
     56                 return 0
     57             }
     58 
     59             override fun loadRange(startPosition: Int, count: Int): List<String> {
     60                 return emptyList()
     61             }
     62         }
     63 
     64         assertEquals(Collections.EMPTY_LIST, EmptyDataSource().loadInitial(0, 1, 5))
     65     }
     66 
     67     @Test
     68     fun loadInitialTooLong() {
     69         val list = List(26) { "" + 'a' + it }
     70         class AlphabetDataSource : TiledDataSource<String>() {
     71             override fun countItems(): Int {
     72                 return list.size
     73             }
     74 
     75             override fun loadRange(startPosition: Int, count: Int): List<String> {
     76                 return list.subList(startPosition, startPosition + count)
     77             }
     78         }
     79         // baseline behavior
     80         assertEquals(list, AlphabetDataSource().loadInitial(0, 26, 10))
     81         assertEquals(list, AlphabetDataSource().loadInitial(50, 26, 10))
     82     }
     83 }
     84