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 android.support.v4.view.ViewCompat;
19431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport android.support.v4.widget.DrawerLayout;
20431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport android.support.v7.appcompat.test.R;
21431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport android.support.v7.custom.CustomDrawerLayout;
22431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport android.test.suitebuilder.annotation.SmallTest;
23431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport android.view.View;
24431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport org.junit.Before;
25431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport org.junit.Test;
26431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
27431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.test.espresso.Espresso.onView;
28431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.test.espresso.matcher.ViewMatchers.withId;
2921f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.closeDrawer;
3021f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.openDrawer;
3121f78eb90b3217aa5cf69c3ffd359506468b55f4Kirill Grouchnikovimport static android.support.v7.testutils.DrawerLayoutActions.setDrawerLockMode;
32431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static android.support.v7.testutils.TestUtilsActions.setLayoutDirection;
33431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertEquals;
34431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertFalse;
35431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovimport static org.junit.Assert.assertTrue;
36431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
37431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikovpublic class DrawerLayoutDoubleTest
38431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        extends BaseInstrumentationTestCase<DrawerLayoutDoubleActivity> {
39431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private CustomDrawerLayout mDrawerLayout;
40431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
41431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mStartDrawer;
42431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
43431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mEndDrawer;
44431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
45431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private View mContentView;
46431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
47431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public DrawerLayoutDoubleTest() {
48431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        super(DrawerLayoutDoubleActivity.class);
49431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
50431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
51431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Before
52431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void setUp() {
53431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        final DrawerLayoutDoubleActivity activity = mActivityTestRule.getActivity();
54431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mDrawerLayout = (CustomDrawerLayout) activity.findViewById(R.id.drawer_layout);
55431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mStartDrawer = mDrawerLayout.findViewById(R.id.start_drawer);
56431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mEndDrawer = mDrawerLayout.findViewById(R.id.end_drawer);
57431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        mContentView = mDrawerLayout.findViewById(R.id.content);
58431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
59431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the drawers to reset the state for the next test
60431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
61431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
62431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
63431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
64431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
65431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
66431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testQueryOpenStateOfNonExistentDrawer() {
67431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the isDrawerOpen API call to result in an exception being
68431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
69431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Querying open state of a view that is not a drawer",
70431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mContentView));
71431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
72431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
73431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
74431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
75431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testQueryVisibleStateOfNonExistentDrawer() {
76431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the isDrawerVisible API call to result in an exception being
77431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
78431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Querying visible state of a view that is not a drawer",
79431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mContentView));
80431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
81431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
82431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
83431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
84431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testOpenNonExistentDrawer() {
85431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the openDrawer action to result in an exception being
86431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
87431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mContentView));
88431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
89431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
90431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
91431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
92431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testCloseNonExistentDrawer() {
93431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the closeDrawer action to result in an exception being
94431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
95431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mContentView));
96431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
97431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
98431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test(expected=IllegalArgumentException.class)
99431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
100431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testLockNonExistentDrawer() {
101431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Note that we're expecting the setDrawerLockMode action to result in an exception being
102431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // thrown since mContentView is not a drawer.
103431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
104431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mContentView));
105431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
106431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
107431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private void verifyDrawerOpenClose() {
108431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is closed in initial state",
109431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mStartDrawer));
110431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is not visible in initial state",
111431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
112431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is closed in initial state",
113431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerOpen(mEndDrawer));
114431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is not visible in initial state",
115431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mEndDrawer));
116431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
117431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Open the start drawer
118431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mStartDrawer));
119431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's open (with the end drawer closed)
120431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("Start drawer is now open", mDrawerLayout.isDrawerOpen(mStartDrawer));
121431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("Start drawer is now visible", mDrawerLayout.isDrawerVisible(mStartDrawer));
122431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
123431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
124431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
125431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the start drawer
126431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
127431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are closed
128431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is now closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
129431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is now not visible", mDrawerLayout.isDrawerVisible(mStartDrawer));
130431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
131431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
132431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
133431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Open the end drawer
134431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(openDrawer(mEndDrawer));
135431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's open (with the start drawer closed)
136431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
137431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still not visible",
138431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
139431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("End drawer is now open", mDrawerLayout.isDrawerOpen(mEndDrawer));
140431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertTrue("End drawer is now visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
141431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
142431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Close the end drawer
143431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
144431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are closed
145431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still closed", mDrawerLayout.isDrawerOpen(mStartDrawer));
146431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("Start drawer is still not visible",
147431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                mDrawerLayout.isDrawerVisible(mStartDrawer));
148431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still closed", mDrawerLayout.isDrawerOpen(mEndDrawer));
149431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertFalse("End drawer is still not visible", mDrawerLayout.isDrawerVisible(mEndDrawer));
150431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
151431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
152431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
153431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
154431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerOpenCloseLtr() {
155431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
156431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
157431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
158431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerOpenClose();
159431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
160431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
161431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
162431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
163431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerOpenCloseRtl() {
164431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
165431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
166431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
167431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerOpenClose();
168431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
169431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
170431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    private void verifyDrawerLockUnlock() {
171431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is unlocked in initial state",
172431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
173431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is unlocked in initial state",
174431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
175431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
176431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Lock the start drawer open
177431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
178431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mStartDrawer));
179431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's locked open (with the end drawer unlocked)
180431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now locked open",
181431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_LOCKED_OPEN, mDrawerLayout.getDrawerLockMode(mStartDrawer));
182431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is still unlocked",
183431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
184431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
185431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Unlock the start drawer and close it
186431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
187431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mStartDrawer));
188431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mStartDrawer));
189431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are unlocked
190431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now unlocked",
191431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
192431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now unlocked",
193431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
194431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
195431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Lock the end drawer open
196431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
197431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN, mEndDrawer));
198431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that it's locked open (with the start drawer unlocked)
199431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is still unlocked",
200431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
201431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now locked open",
202431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_LOCKED_OPEN, mDrawerLayout.getDrawerLockMode(mEndDrawer));
203431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
204431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // Unlock the end drawer and close it
205431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
206431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, mEndDrawer));
207431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(closeDrawer(mEndDrawer));
208431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        // And check that both drawers are unlocked
209431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("Start drawer is now unlocked",
210431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mStartDrawer));
211431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        assertEquals("End drawer is now unlocked",
212431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                DrawerLayout.LOCK_MODE_UNLOCKED, mDrawerLayout.getDrawerLockMode(mEndDrawer));
213431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
214431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
215431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
216431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
217431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerLockUnlockLtr() {
218431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
219431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_LTR));
220431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
221431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerLockUnlock();
222431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
223431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
224431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @Test
225431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    @SmallTest
226431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    public void testDrawerLockUnlockRtl() {
227431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        onView(withId(R.id.drawer_layout)).perform(
228431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov                setLayoutDirection(ViewCompat.LAYOUT_DIRECTION_RTL));
229431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov
230431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov        verifyDrawerLockUnlock();
231431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov    }
232431713be0958fd0f4d878f5f25755575191fb8baKirill Grouchnikov}
233