1431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov/*
2431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * Copyright (C) 2016 The Android Open Source Project
3431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov *
4431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * Licensed under the Apache License, Version 2.0 (the "License");
5431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * you may not use this file except in compliance with the License.
6431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * You may obtain a copy of the License at
7431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov *
8431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov *      http://www.apache.org/licenses/LICENSE-2.0
9431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov *
10431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * Unless required by applicable law or agreed to in writing, software
11431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * distributed under the License is distributed on an "AS IS" BASIS,
12431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * See the License for the specific language governing permissions and
14431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov * limitations under the License.
15431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov */
16431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovpackage android.support.v7.app;
17431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
18431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.test.espresso.Espresso.onView;
19431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.withId;
2021f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.closeDrawer;
2121f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.openDrawer;
2221f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.setDrawerLockMode;
23431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.v7.testutils.TestUtilsActions.setLayoutDirection;
24754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
25431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertEquals;
26431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertFalse;
27431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertTrue;
28431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
29e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikasimport android.support.test.filters.LargeTest;
30754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.test.filters.SmallTest;
318d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport android.support.test.rule.ActivityTestRule;
328d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport android.support.test.runner.AndroidJUnit4;
33754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.v4.view.ViewCompat;
34754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.v4.widget.DrawerLayout;
35754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.v7.appcompat.test.R;
36754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.support.v7.custom.CustomDrawerLayout;
37754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport android.view.View;
38754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
39754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport org.junit.Before;
408d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport org.junit.Rule;
41754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikasimport org.junit.Test;
428d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikasimport org.junit.runner.RunWith;
438d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas
448d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas@RunWith(AndroidJUnit4.class)
458d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikaspublic class DrawerLayoutDoubleTest {
468d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas    @Rule
478d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas    public final ActivityTestRule<DrawerLayoutDoubleActivity> mActivityTestRule =
488d3b808ab4720ef4e9d58f2bba4e31f741d3898cAurimas Liutikas            new ActivityTestRule<>(DrawerLayoutDoubleActivity.class);
49754cb29c50f09a83251dd4bb633ba445b2411adbAurimas Liutikas
50431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private CustomDrawerLayout mDrawerLayout;
51431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
52431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mStartDrawer;
53431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
54431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mEndDrawer;
55431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
56431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mContentView;
57431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
58431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Before
59431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void setUp() {
60431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        final DrawerLayoutDoubleActivity activity = mActivityTestRule.getActivity();
61431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mDrawerLayout = (CustomDrawerLayout) activity.findViewById(R.id.drawer_layout);
62431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mStartDrawer = mDrawerLayout.findViewById(R.id.start_drawer);
63431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mEndDrawer = mDrawerLayout.findViewById(R.id.end_drawer);
64431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mContentView = mDrawerLayout.findViewById(R.id.content);
65431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
66431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the drawers to reset the state for the next test
67431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
68431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
69431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
70431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
71431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
72431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
73431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testQueryOpenStateOfNonExistentDrawer() {
74431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the isDrawerOpen API call to result in an exception being
75431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
76431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Querying open state of a view that is not a drawer",
77431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mContentView));
78431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
79431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
80431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
81431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
82431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testQueryVisibleStateOfNonExistentDrawer() {
83431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the isDrawerVisible API call to result in an exception being
84431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
85431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Querying visible state of a view that is not a drawer",
86431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mContentView));
87431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
88431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
89431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
90431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
91431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testOpenNonExistentDrawer() {
92431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the openDrawer action to result in an exception being
93431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
94431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mContentView));
95431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
96431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
97431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
98431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
99431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testCloseNonExistentDrawer() {
100431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the closeDrawer action to result in an exception being
101431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
102431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mContentView));
103431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
104431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
105431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
106431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
107431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testLockNonExistentDrawer() {
108431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the setDrawerLockMode action to result in an exception being
109431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
110431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
111431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mContentView));
112431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
113431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
114431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private void verifyDrawerOpenClose() {
115431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is closed in initial state",
116431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mStartDrawer));
117431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is not visible in initial state",
118431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
119431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is closed in initial state",
120431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mEndDrawer));
121431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is not visible in initial state",
122431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mEndDrawer));
123431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
124431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Open the start drawer
125431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mStartDrawer));
126431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's open (with the end drawer closed)
127431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("Start drawer is now open", mDrawerLayout.isDrawerOpen(mStartDrawer));
128431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("Start drawer is now visible", mDrawerLayout.isDrawerVisible(mStartDrawer));
129431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
130431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
131431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
132431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the start drawer
133431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
134431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are closed
135431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is now closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
136431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is now not visible", mDrawerLayout.isDrawerVisible(mStartDrawer));
137431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
138431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
139431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
140431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Open the end drawer
141431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mEndDrawer));
142431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's open (with the start drawer closed)
143431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
144431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still not visible",
145431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
146431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("End drawer is now open", mDrawerLayout.isDrawerOpen(mEndDrawer));
147431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("End drawer is now visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
148431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
149431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the end drawer
150431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
151431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are closed
152431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
153431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still not visible",
154431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
155431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
156431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
157431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
158431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
159431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
160e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas    @LargeTest
161431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerOpenCloseLtr() {
162431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
163431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
164431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
165431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerOpenClose();
166431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
167431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
168431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
169e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas    @LargeTest
170431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerOpenCloseRtl() {
171431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
172431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
173431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
174431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerOpenClose();
175431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
176431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
177431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private void verifyDrawerLockUnlock() {
178431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is unlocked in initial state",
179431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
180431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is unlocked in initial state",
181431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
182431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
183431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Lock the start drawer open
184431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
185431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mStartDrawer));
186431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's locked open (with the end drawer unlocked)
187431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now locked open",
188431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_LOCKED_OPEN, mDrawerLayout.getDrawerLockMode(mStartDrawer));
189431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is still unlocked",
190431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
191431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
192431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Unlock the start drawer and close it
193431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
194431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mStartDrawer));
195431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
196431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are unlocked
197431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now unlocked",
198431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
199431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now unlocked",
200431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
201431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
202431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Lock the end drawer open
203431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
204431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mEndDrawer));
205431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's locked open (with the start drawer unlocked)
206431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is still unlocked",
207431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
208431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now locked open",
209431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_LOCKED_OPEN, mDrawerLayout.getDrawerLockMode(mEndDrawer));
210431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
211431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Unlock the end drawer and close it
212431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
213431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mEndDrawer));
214431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
215431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are unlocked
216431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now unlocked",
217431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
218431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now unlocked",
219431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
220431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
221431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
222431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
223e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas    @LargeTest
224431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerLockUnlockLtr() {
225431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
226431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
227431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
228431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerLockUnlock();
229431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
230431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
231431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
232e6cf359406cd7baaa0659b54c1b7d8ac45db122aAurimas Liutikas    @LargeTest
233431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerLockUnlockRtl() {
234431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
235431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
236431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
237431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerLockUnlock();
238431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
239431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov}
240