1a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev/*
2a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Copyright (C) 2015 The Android Open Source Project
3a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
4a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Licensed under the Apache License, Version 2.0 (the "License");
5a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * you may not use this file except in compliance with the License.
6a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * You may obtain a copy of the License at
7a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
8a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *      http://www.apache.org/licenses/LICENSE-2.0
9a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev *
10a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * Unless required by applicable law or agreed to in writing, software
11a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * distributed under the License is distributed on an "AS IS" BASIS,
12a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * See the License for the specific language governing permissions and
14a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev * limitations under the License.
15a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev */
16a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
170a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar
18a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevpackage android.support.v7.util;
19a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
20a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport android.support.test.runner.AndroidJUnit4;
21a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport android.support.v7.util.TileList;
22f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyarimport android.test.suitebuilder.annotation.SmallTest;
23a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
24a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.MatcherAssert.*;
25a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport static org.hamcrest.CoreMatchers.*;
26a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.Before;
27a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.Test;
28a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevimport org.junit.runner.RunWith;
29a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
30a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev@RunWith(AndroidJUnit4.class)
31f1b288ec2104488f4a92e911b0ab80c8f0f3e9d1Yigit Boyar@SmallTest
32a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheevpublic class TileListTest {
33a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    int mTileSize = 3;
34a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    TileList<Integer> mTileList;
35a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
36a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Before
37a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    public void setUp() throws Exception {
38a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList = new TileList<>(mTileSize);
39a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
40a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
41a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
420a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void emptyGet() {
43a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(3), nullValue());
44a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(100), nullValue());
45a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
46a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
47a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
480a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void getItemAt() {
49a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 1, 2, 3)), nullValue());
500a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(0), is(1));
510a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(1), is(2));
520a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(2), is(3));
53a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(3), nullValue());
54a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
55a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
56a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
570a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void size() {
58a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(0));
59a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 1, 2, 3)), nullValue());
60a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(1));
61a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 3, 4, 5)), notNullValue());
62a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(1));
63a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(3, 1, 2, 3)), nullValue());
64a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(2));
65a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
66a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.clear();
67a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(0));
68a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
69a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
70a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
710a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void getAtIndex() {
72a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 1, 2, 3)), nullValue());
73a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(3, 1, 2, 3)), nullValue());
74a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(6, 1, 2, 3)), nullValue());
75a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
76a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getAtIndex(0).mStartPosition, is(0));
77a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getAtIndex(1).mStartPosition, is(3));
78a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getAtIndex(2).mStartPosition, is(6));
79a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getAtIndex(3), nullValue());
80a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
81a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
820a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    @Test
830a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void addShortTileAndGet() {
84a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 1)), nullValue());
850a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(0), is(1));
860a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(1), nullValue());
870a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(2), nullValue());
88a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
89a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
90a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
910a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void addToReplaceAndGet() {
92a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        TileList.Tile<Integer> prev = createTile(0, 1, 2, 3);
93a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(prev);
94a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(0, 4, 5, 6)), sameInstance(prev));
950a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(0), is(4));
960a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(1), is(5));
970a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(2), is(6));
98a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(3), nullValue());
99a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
100a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
101a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
1020a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void addRangeWithGapAndGet() {
103a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(createTile(0, 1, 2, 3));
104a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(mTileSize * 2, 4, 5, 6)), nullValue());
1050a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(0), is(1));
1060a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(1), is(2));
1070a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(2), is(3));
108a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(mTileSize), nullValue());
109a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(mTileSize + 1), nullValue());
110a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.getItemAt(mTileSize + 2), nullValue());
1110a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize * 2), is(4));
1120a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize * 2 + 1), is(5));
1130a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize * 2 + 2), is(6));
114a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.addOrReplace(createTile(mTileSize, 7, 8, 9)), nullValue());
1150a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize), is(7));
1160a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize + 1), is(8));
1170a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar        assertThat(mTileList.getItemAt(mTileSize + 2), is(9));
118a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
119a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
120a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    @Test
1210a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar    public void remove() {
122a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(createTile(0, 1, 2, 3));
123a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(createTile(3, 4, 5, 6));
124a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(createTile(6, 7, 8, 9));
125a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        mTileList.addOrReplace(createTile(9, 10, 11, 12));
126a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
127a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.removeAtPos(0).mStartPosition, is(0));
128a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(3));
129a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
130a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.removeAtPos(6).mStartPosition, is(6));
131a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(2));
132a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
133a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.removeAtPos(9).mStartPosition, is(9));
134a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        assertThat(mTileList.size(), is(1));
135a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
136a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev
137a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    private TileList.Tile<Integer> createTile(int startPosition, int... items) {
138a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        TileList.Tile<Integer> window = new TileList.Tile<>(Integer.class, mTileSize);
139a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        window.mStartPosition = startPosition;
140a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        window.mItemCount = items.length;
141a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        for (int i = 0; i < items.length; i ++) {
142a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev            window.mItems[i] = items[i];
143a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        }
144a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev        return window;
145a1470623b0f7c52c9e3985012bf9daeb692d7bccVladislav Kaznacheev    }
1460a017072206f93474ccd2706e7983c2ff778b904Yigit Boyar}