1999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar/*
2999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Copyright (C) 2015 The Android Open Source Project
3999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar *
4999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
5999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * you may not use this file except in compliance with the License.
6999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * You may obtain a copy of the License at
7999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar *
8999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
9999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar *
10999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * Unless required by applicable law or agreed to in writing, software
11999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
12999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * See the License for the specific language governing permissions and
14999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar * limitations under the License.
15999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar */
16999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
17999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarpackage android.support.v7.widget;
18999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
19999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.After;
20999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.Before;
21999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.Test;
22999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.runner.RunWith;
23999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport org.junit.runners.Parameterized;
24999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
25999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.support.test.InstrumentationRegistry;
26999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.test.suitebuilder.annotation.MediumTest;
27999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport android.widget.FrameLayout;
28999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
29999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport java.util.ArrayList;
30999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport java.util.List;
31999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
32999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarimport static android.support.v7.widget.LinearLayoutManager.HORIZONTAL;
330a017072206f93474ccd2706e7983c2ff778b904Yigit Boyarimport static org.junit.Assert.*;
34999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
35999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar@RunWith(Parameterized.class)
36999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyarpublic class LinearLayoutManagerResizeTest extends BaseLinearLayoutManagerTest {
37999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
38999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    final Config mConfig;
39999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
40999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    public LinearLayoutManagerResizeTest(Config config) {
41999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        mConfig = config;
42999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    }
43999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
44999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    @Parameterized.Parameters(name = "{0}")
45999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    public static List<Config> testResize() throws Throwable {
46999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        List<Config> configs = new ArrayList<>();
47999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        for (Config config : addConfigVariation(createBaseVariations(), "mItemCount", 5
48999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                , Config.DEFAULT_ITEM_COUNT)) {
49999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            configs.add(config);
50999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        }
51999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        return configs;
52999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    }
53999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
54999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    @MediumTest
55999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    @Test
56999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    public void resize() throws Throwable {
57999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        final Config config = (Config) mConfig.clone();
58999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        final FrameLayout container = getRecyclerViewContainer();
59999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        runTestOnUiThread(new Runnable() {
60999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            @Override
61999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            public void run() {
62999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                container.setPadding(0, 0, 0, 0);
63999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            }
64999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        });
65999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar
66999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        setupByConfig(config, true);
67999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        int lastVisibleItemPosition = mLayoutManager.findLastVisibleItemPosition();
68999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        int firstVisibleItemPosition = mLayoutManager.findFirstVisibleItemPosition();
69999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        int lastCompletelyVisibleItemPosition = mLayoutManager
70999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                .findLastCompletelyVisibleItemPosition();
71999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        int firstCompletelyVisibleItemPosition = mLayoutManager
72999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                .findFirstCompletelyVisibleItemPosition();
73999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        mLayoutManager.expectLayouts(1);
74999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        // resize the recycler view to half
75999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        runTestOnUiThread(new Runnable() {
76999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            @Override
77999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            public void run() {
78999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                if (config.mOrientation == HORIZONTAL) {
79999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    container.setPadding(0, 0, container.getWidth() / 2, 0);
80999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                } else {
81999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    container.setPadding(0, 0, 0, container.getWidth() / 2);
82999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                }
83999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            }
84999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        });
85999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        mLayoutManager.waitForLayout(1);
86999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        if (config.mStackFromEnd) {
87999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            assertEquals("[" + config + "]: last visible position should not change.",
88999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    lastVisibleItemPosition, mLayoutManager.findLastVisibleItemPosition());
89999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            assertEquals("[" + config + "]: last completely visible position should not change",
90999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    lastCompletelyVisibleItemPosition,
91999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    mLayoutManager.findLastCompletelyVisibleItemPosition());
92999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        } else {
93999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            assertEquals("[" + config + "]: first visible position should not change.",
94999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    firstVisibleItemPosition, mLayoutManager.findFirstVisibleItemPosition());
95999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar            assertEquals("[" + config + "]: last completely visible position should not change",
96999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    firstCompletelyVisibleItemPosition,
97999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar                    mLayoutManager.findFirstCompletelyVisibleItemPosition());
98999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar        }
99999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar    }
100999c3976674d20b0de5425490bdfe7415b9c6af2Yigit Boyar}
101