174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay/* 274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * Copyright (C) 2016 The Android Open Source Project 374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * 474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * you may not use this file except in compliance with the License. 674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * You may obtain a copy of the License at 774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * 874956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * http://www.apache.org/licenses/LICENSE-2.0 974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * 1074956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * Unless required by applicable law or agreed to in writing, software 1174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * See the License for the specific language governing permissions and 1474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay * limitations under the License. 1574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay */ 1674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 1774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKaypackage com.android.documentsui.dirlist; 1874956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 19f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Linimport static org.junit.Assert.assertFalse; 2035f99e02f3fa8af21139be216fc57c123779808dBen Linimport static org.junit.Assert.assertTrue; 2135f99e02f3fa8af21139be216fc57c123779808dBen Lin 2274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport android.support.test.filters.SmallTest; 2374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport android.support.test.runner.AndroidJUnit4; 242d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKayimport android.support.v7.widget.RecyclerView; 2574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport android.view.MotionEvent; 2674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 27d9caa6ab53aa784acaf241c0ded3c4ae2d342bf8Steve McKayimport com.android.documentsui.base.Events.InputEvent; 284f78ba643270b9d84da1952d8e408220b25ec6fdSteve McKayimport com.android.documentsui.selection.SelectionManager; 29bd9f05aa36bf19d8b34d0d73a59e9bd65d3d26ebSteve McKayimport com.android.documentsui.selection.SelectionProbe; 305b0a2c187a9e446b683687817d22cbe443585223Steve McKayimport com.android.documentsui.testing.SelectionManagers; 316d20d190bc576bea1da48f79d868a5f383d3458bSteve McKayimport com.android.documentsui.testing.TestActionHandler; 322d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKayimport com.android.documentsui.testing.TestEvent; 332d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKayimport com.android.documentsui.testing.TestEvent.Builder; 34990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKayimport com.android.documentsui.testing.TestEventHandler; 3574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport com.android.documentsui.testing.TestPredicate; 3674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 3774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport org.junit.Before; 3874956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport org.junit.Test; 3974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport org.junit.runner.RunWith; 4074956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 4174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKayimport java.util.List; 4274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 4374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay@RunWith(AndroidJUnit4.class) 4474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay@SmallTest 4574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKaypublic final class UserInputHandler_MouseTest { 4674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 4774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay private static final List<String> ITEMS = TestData.create(100); 4874956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 492d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay private UserInputHandler<TestEvent> mInputHandler; 506d20d190bc576bea1da48f79d868a5f383d3458bSteve McKay private TestActionHandler mActionHandler; 5175b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin private TestFocusHandler mFocusHandler; 522d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay private SelectionProbe mSelection; 5375b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin private SelectionManager mSelectionMgr; 5474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay private TestPredicate<DocumentDetails> mCanSelect; 55aa66c43df01033ccb957bfd1d513945676866f4cBen Lin private TestEventHandler<InputEvent> mContextMenuClickHandler; 56990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKay private TestEventHandler<InputEvent> mDragAndDropHandler; 57990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKay private TestEventHandler<InputEvent> mGestureSelectHandler; 5811a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin private TestEventHandler<Void> mPerformHapticFeedback; 5974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 602d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay private Builder mEvent; 6174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 6274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay @Before 6374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay public void setUp() { 6474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 6575b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelectionMgr = SelectionManagers.createTestInstance(ITEMS); 666d20d190bc576bea1da48f79d868a5f383d3458bSteve McKay mActionHandler = new TestActionHandler(); 672d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay 6875b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelection = new SelectionProbe(mSelectionMgr); 6974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay mCanSelect = new TestPredicate<>(); 70aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mContextMenuClickHandler = new TestEventHandler<>(); 71990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKay mDragAndDropHandler = new TestEventHandler<>(); 72990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKay mGestureSelectHandler = new TestEventHandler<>(); 7375b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mFocusHandler = new TestFocusHandler(); 7474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 752d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mInputHandler = new UserInputHandler<>( 766d20d190bc576bea1da48f79d868a5f383d3458bSteve McKay mActionHandler, 7775b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mFocusHandler, 7875b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelectionMgr, 7974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay (MotionEvent event) -> { 802d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay throw new UnsupportedOperationException("Not exercised in tests."); 8174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay }, 8274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay mCanSelect, 83aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mContextMenuClickHandler::accept, 84990f76ea83a249cd8fc3c797e40626b94cd7945cSteve McKay mDragAndDropHandler::accept, 8511a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin mGestureSelectHandler::accept, 8611a2c1338f07cc0afd60e7ac6ea6ba505b80dadbBen Lin () -> mPerformHapticFeedback.accept(null)); 8774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 88ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mEvent = TestEvent.builder().mouse().overDocIcon(); 8974956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay } 9074956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 9174956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay @Test 9274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay public void testConfirmedClick_StartsSelection() { 932d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mInputHandler.onSingleTapConfirmed(mEvent.at(11).build()); 942d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mSelection.assertSelection(11); 9574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay } 9674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 9774956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay @Test 98ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann public void testClickOnIconWithExistingSelection_AddsToSelection() { 99ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapConfirmed(mEvent.at(11).build()); 100ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(10).build()); 101ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mSelection.assertSelected(10, 11); 102ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann } 103ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 104ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann @Test 105ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann public void testClickOnIconOfSelectedItem_RemovesFromSelection() { 106ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapConfirmed(mEvent.at(8).build()); 107ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(11).shift().build()); 108ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mSelection.assertSelected(8, 9, 10, 11); 109ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 110ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(9).unshift().build()); 111ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mSelection.assertSelected(8, 10, 11); 112ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann } 113ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 114ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann @Test 115dbcccd65dab76420084315b962855bf9fc66108dBen Lin public void testRightClickDown_StartsContextMenu() { 116dbcccd65dab76420084315b962855bf9fc66108dBen Lin mInputHandler.onDown(mEvent.secondary().build()); 117aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mContextMenuClickHandler.assertLastArgument(mEvent.secondary().build()); 118aa66c43df01033ccb957bfd1d513945676866f4cBen Lin } 119aa66c43df01033ccb957bfd1d513945676866f4cBen Lin 120aa66c43df01033ccb957bfd1d513945676866f4cBen Lin @Test 121aa66c43df01033ccb957bfd1d513945676866f4cBen Lin public void testAltClickDown_StartsContextMenu() { 122aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mInputHandler.onDown(mEvent.primary().alt().build()); 123aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mContextMenuClickHandler.assertLastArgument(mEvent.primary().alt().build()); 124dbcccd65dab76420084315b962855bf9fc66108dBen Lin } 125dbcccd65dab76420084315b962855bf9fc66108dBen Lin 126dbcccd65dab76420084315b962855bf9fc66108dBen Lin @Test 12735f99e02f3fa8af21139be216fc57c123779808dBen Lin public void testScroll_shouldTrap() { 128f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin assertTrue(mInputHandler.onScroll(mEvent.at(0).action(MotionEvent.ACTION_MOVE).primary().build())); 129f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin } 130f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin 131f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin @Test 132f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin public void testScroll_NoTrapForTwoFinger() { 133f88bc0b6f1945db1eb11afcfb15bc2c08b13ba9fBen Lin assertFalse(mInputHandler.onScroll(mEvent.at(0).action(MotionEvent.ACTION_MOVE).build())); 13435f99e02f3fa8af21139be216fc57c123779808dBen Lin } 13535f99e02f3fa8af21139be216fc57c123779808dBen Lin 13635f99e02f3fa8af21139be216fc57c123779808dBen Lin @Test 13764ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin public void testUnconfirmedCtrlClick_AddsToExistingSelection() { 13864ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(7).build()); 13964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 14064ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(11).ctrl().build()); 1412d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mSelection.assertSelection(7, 11); 14274956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay } 14374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 1442d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay @Test 14564ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin public void testUnconfirmedShiftClick_ExtendsSelection() { 14664ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(7).build()); 14764ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 14864ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(11).shift().build()); 14964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(7, 8, 9, 10, 11); 15064ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin } 15164ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 15264ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin @Test 15375b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin public void testConfirmedShiftClick_ExtendsSelectionFromOriginFocus() { 15475b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mFocusHandler.focusPos = 7; 15575b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mFocusHandler.focusModelId = "7"; 15675b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin // This is a hack-y test, since the real FocusManager would've set range begin itself. 15775b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelectionMgr.setSelectionRangeBegin(7); 15875b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelection.assertNoSelection(); 15975b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin 16075b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(11).shift().build()); 16175b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin mSelection.assertSelection(7, 8, 9, 10, 11); 16275b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin } 16375b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin 16475b7b9039cf0efcb188e916c6f510328bfe099a8Ben Lin @Test 16564ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin public void testUnconfirmedShiftClick_RotatesAroundOrigin() { 16664ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(7).build()); 16764ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 16864ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(11).shift().build()); 16964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(7, 8, 9, 10, 11); 17064ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 17164ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(5).shift().build()); 17264ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(5, 6, 7); 17364ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertNotSelected(8, 9, 10, 11); 17464ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin } 17564ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 17664ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin @Test 17764ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin public void testUnconfirmedShiftCtrlClick_Combination() { 17864ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(7).build()); 17964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 18064ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(11).shift().build()); 18164ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(7, 8, 9, 10, 11); 18264ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 18364ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(5).unshift().ctrl().build()); 18464ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 18564ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(5, 7, 8, 9, 10, 11); 18664ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin } 18764ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 18864ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin @Test 18964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin public void testUnconfirmedShiftCtrlClick_ShiftTakesPriority() { 19064ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapConfirmed(mEvent.at(7).build()); 19164ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 19264ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mInputHandler.onSingleTapUp(mEvent.at(11).ctrl().shift().build()); 19364ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin mSelection.assertSelection(7, 8, 9, 10, 11); 19464ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin } 19564ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin 19617b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKay // TODO: Add testSpaceBar_Previews, but we need to set a system property 19717b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKay // to have a deterministic state. 19817b761eb2f837d3ac079c07fc33877d6049c3cbaSteve McKay 19964ac117a2d42bc44cd1d742c82fbdc3afa04f762Ben Lin @Test 200d22cc1852ed3e028a37d713e41c57286d2e4c9f2Tomasz Mikolajewski public void testDoubleClick_Opens() { 2012d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mInputHandler.onDoubleTap(mEvent.at(11).build()); 202d22cc1852ed3e028a37d713e41c57286d2e4c9f2Tomasz Mikolajewski mActionHandler.open.assertLastArgument(mEvent.build().getDocumentDetails()); 20374956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay } 20474956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay 2052d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay @Test 206aa66c43df01033ccb957bfd1d513945676866f4cBen Lin public void testMiddleClick_DoesNothing() { 207aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mInputHandler.onSingleTapConfirmed(mEvent.at(11).tertiary().build()); 208aa66c43df01033ccb957bfd1d513945676866f4cBen Lin mSelection.assertNoSelection(); 209aa66c43df01033ccb957bfd1d513945676866f4cBen Lin } 210aa66c43df01033ccb957bfd1d513945676866f4cBen Lin 211aa66c43df01033ccb957bfd1d513945676866f4cBen Lin @Test 2122d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay public void testClickOff_ClearsSelection() { 2132d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mInputHandler.onSingleTapConfirmed(mEvent.at(11).build()); 2142d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mInputHandler.onSingleTapUp(mEvent.at(RecyclerView.NO_POSITION).build()); 2152d1e4a3bb8bd58d2f0c92cbedeafe4ab8b71448eSteve McKay mSelection.assertNoSelection(); 21674956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay } 217ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 218ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann @Test 219ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann public void testClick_Focuses() { 220ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann int id = 11; 221ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapConfirmed(mEvent.at(id).notOverDocIcon().build()); 222ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann assertTrue(mFocusHandler.getFocusModelId().equals(Integer.toString(id))); 223ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann } 224ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 225ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann @Test 226ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann public void testClickOff_ClearsFocus() { 227ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann int id = 11; 228ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapConfirmed(mEvent.at(id).notOverDocIcon().build()); 229ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann assertTrue(mFocusHandler.hasFocusedItem()); 230ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(RecyclerView.NO_POSITION).build()); 231ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann assertFalse(mFocusHandler.hasFocusedItem()); 232ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann } 233ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 234ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann @Test 235ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann public void testClickOffSelection_RemovesSelectionAndFocuses() { 236ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapConfirmed(mEvent.at(1).build()); 237ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(5).shift().build()); 238ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mSelection.assertSelection(1, 2, 3, 4, 5); 239ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann 240ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann int id = 11; 241ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mInputHandler.onSingleTapUp(mEvent.at(id).unshift().notOverDocIcon().build()); 242ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann assertTrue(mFocusHandler.getFocusModelId().equals(Integer.toString(id))); 243ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann mSelection.assertNoSelection(); 244ed895580275101312d7d6fa6ebf78b79b4905a1eJon Mann } 24574956af50b13b5ffde252a13547c960ba3e9c5b4Steve McKay} 246