1/*
2 * Copyright (C) 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
17package androidx.room.integration.testapp.paging;
18
19import static junit.framework.Assert.assertFalse;
20
21import static org.hamcrest.CoreMatchers.is;
22import static org.hamcrest.MatcherAssert.assertThat;
23
24import android.support.test.filters.SmallTest;
25import android.support.test.runner.AndroidJUnit4;
26
27import androidx.annotation.NonNull;
28import androidx.room.integration.testapp.test.TestDatabaseTest;
29import androidx.room.integration.testapp.test.TestUtil;
30import androidx.room.integration.testapp.vo.User;
31import androidx.room.paging.LimitOffsetDataSource;
32
33import org.junit.After;
34import org.junit.Test;
35import org.junit.runner.RunWith;
36
37import java.util.ArrayList;
38import java.util.List;
39
40@SmallTest
41@RunWith(AndroidJUnit4.class)
42public class LimitOffsetDataSourceTest extends TestDatabaseTest {
43
44    @After
45    public void teardown() {
46        mUserDao.deleteEverything();
47    }
48
49    private LimitOffsetDataSource<User> loadUsersByAgeDesc() {
50        return (LimitOffsetDataSource<User>) mUserDao.loadUsersByAgeDesc().create();
51    }
52
53    @Test
54    public void emptyPage() {
55        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
56        assertThat(dataSource.countItems(), is(0));
57    }
58
59    @Test
60    public void loadCount() {
61        createUsers(6);
62        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
63        assertThat(dataSource.countItems(), is(6));
64    }
65
66    @Test
67    public void singleItem() {
68        List<User> users = createUsers(1);
69        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
70        assertThat(dataSource.countItems(), is(1));
71        List<User> initial = dataSource.loadRange(0, 10);
72
73        assertThat(initial.get(0), is(users.get(0)));
74        assertFalse(dataSource.loadRange(1, 10).iterator().hasNext());
75    }
76
77    @Test
78    public void initial() {
79        List<User> users = createUsers(10);
80        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
81        assertThat(dataSource.countItems(), is(10));
82        List<User> initial = dataSource.loadRange(0, 1);
83        assertThat(initial.get(0), is(users.get(0)));
84        List<User> second = dataSource.loadRange(1, 1);
85        assertThat(second.get(0), is(users.get(1)));
86    }
87
88    @Test
89    public void loadAll() {
90        List<User> users = createUsers(10);
91
92        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
93        List<User> all = dataSource.loadRange(0, 10);
94        assertThat(users, is(all));
95    }
96
97    @Test
98    public void loadAfter() {
99        List<User> users = createUsers(10);
100        LimitOffsetDataSource<User> dataSource = loadUsersByAgeDesc();
101        List<User> result = dataSource.loadRange(4, 2);
102        assertThat(result, is(users.subList(4, 6)));
103    }
104
105    @NonNull
106    private List<User> createUsers(int count) {
107        List<User> users = new ArrayList<>();
108        for (int i = 0; i < count; i++) {
109            User user = TestUtil.createUser(i);
110            user.setAge(1);
111            mUserDao.insert(user);
112            users.add(user);
113        }
114        return users;
115    }
116}
117