163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay/* 263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Copyright 2017 The Android Open Source Project 363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Licensed under the Apache License, Version 2.0 (the "License"); 563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * you may not use this file except in compliance with the License. 663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * You may obtain a copy of the License at 763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * http://www.apache.org/licenses/LICENSE-2.0 963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * 1063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * Unless required by applicable law or agreed to in writing, software 1163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * distributed under the License is distributed on an "AS IS" BASIS, 1263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * See the License for the specific language governing permissions and 1463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay * limitations under the License. 1563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay */ 1663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 172a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikaspackage androidx.recyclerview.selection; 1863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 192a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.ALT_CLICK; 202a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.CLICK; 212a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.CTRL_CLICK; 222a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.SECONDARY_CLICK; 232a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.SHIFT_CLICK; 242a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport static androidx.recyclerview.selection.testing.TestEvents.Mouse.TERTIARY_CLICK; 2563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 2660dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport static org.junit.Assert.assertFalse; 2760dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport static org.junit.Assert.assertTrue; 2860dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikas 2963d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.support.test.filters.SmallTest; 3063d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.support.test.runner.AndroidJUnit4; 3163d2846409d84487d4856d3b8d18cc4684352e29Steve McKayimport android.view.MotionEvent; 3263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 332a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.SelectionProbe; 342a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.SelectionTrackers; 352a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestAdapter; 362a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestData; 372a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestEvents; 382a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestFocusDelegate; 392a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestItemDetails; 402a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestItemDetailsLookup; 412a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestItemKeyProvider; 422a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestOnContextClickListener; 432a32c7e1264b14a20ed900abadea828b804a46ceAurimas Liutikasimport androidx.recyclerview.selection.testing.TestOnItemActivatedListener; 4460dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport androidx.recyclerview.widget.RecyclerView; 4560dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikas 4660dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport org.junit.Before; 4760dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport org.junit.Test; 4860dadaeed4f5cee272b575dfde6c02e3506a2fa0Aurimas Liutikasimport org.junit.runner.RunWith; 4963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 5063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay@RunWith(AndroidJUnit4.class) 5163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay@SmallTest 5263d2846409d84487d4856d3b8d18cc4684352e29Steve McKaypublic final class MouseInputHandlerTest { 5363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 5463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private MouseInputHandler mInputDelegate; 5563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 567fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay private TestOnContextClickListener mMouseCallbacks; 577fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay private TestOnItemActivatedListener mActivationCallbacks; 587fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay private TestFocusDelegate mFocusCallbacks; 5963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 6063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private TestItemDetailsLookup mDetailsLookup; 6163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private SelectionProbe mSelection; 627fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay private SelectionTracker mSelectionMgr; 6363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 6463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay private TestEvents.Builder mEvent; 6563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 6663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Before 6763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void setUp() { 6863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 697fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay mSelectionMgr = SelectionTrackers.createStringTracker("mouse-input-test", 100); 7063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup = new TestItemDetailsLookup(); 7163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection = new SelectionProbe(mSelectionMgr); 7263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 737fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay mMouseCallbacks = new TestOnContextClickListener(); 747fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay mActivationCallbacks = new TestOnItemActivatedListener(); 757fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay mFocusCallbacks = new TestFocusDelegate(); 7663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 7763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate = new MouseInputHandler( 7863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelectionMgr, 797fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay new TestItemKeyProvider( 807fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay ItemKeyProvider.SCOPE_MAPPED, 817fb763509e07f98d650efc25c91bff8b1cb239acSteve McKay new TestAdapter(TestData.createStringData(100))), 8263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup, 8363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mMouseCallbacks, 8463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mActivationCallbacks, 8563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks); 8663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 8763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mEvent = TestEvents.builder().mouse(); 8863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(RecyclerView.NO_POSITION); 8963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 9063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 9163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 9263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testConfirmedClick_StartsSelection() { 9363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(true); 9463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 9563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 9663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(11); 9763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 9863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 9963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 10063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClickOnSelectRegion_AddsToSelection() { 10163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(true); 10263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 10363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 10463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(10).setInItemSelectRegion(true); 10563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CLICK); 10663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 10763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelected(10, 11); 10863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 10963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 11163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClickOnIconOfSelectedItem_RemovesFromSelection() { 11263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(8).setInItemSelectRegion(true); 11363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 11463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 11663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 11763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelected(8, 9, 10, 11); 11863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 11963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(9); 12063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CLICK); 12163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelected(8, 10, 11); 12263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 12363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 12463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 12563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testRightClickDown_StartsContextMenu() { 12663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onDown(SECONDARY_CLICK); 12763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 12863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mMouseCallbacks.assertLastEvent(SECONDARY_CLICK); 12963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 13063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 13163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 13263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testAltClickDown_StartsContextMenu() { 13363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onDown(ALT_CLICK); 13463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 13563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mMouseCallbacks.assertLastEvent(ALT_CLICK); 13663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 13763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 13863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 13963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testScroll_shouldTrap() { 14063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(0); 14163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay assertTrue(mInputDelegate.onScroll( 14263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay null, 14363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mEvent.action(MotionEvent.ACTION_MOVE).primary().build(), 14463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay -1, 14563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay -1)); 14663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 14763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 14863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 14963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testScroll_NoTrapForTwoFinger() { 15063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(0); 15163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay assertFalse(mInputDelegate.onScroll( 15263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay null, 15363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mEvent.action(MotionEvent.ACTION_MOVE).build(), 15463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay -1, 15563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay -1)); 15663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 15763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 15863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 15963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testUnconfirmedCtrlClick_AddsToExistingSelection() { 16063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(7).setInItemSelectRegion(true); 16163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 16263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 16363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 16463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CTRL_CLICK); 16563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 16663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 11); 16763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 16863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 16963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 17063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testUnconfirmedShiftClick_ExtendsSelection() { 17163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(7).setInItemSelectRegion(true); 17263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 17363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 17463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 17563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 17663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 17763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 8, 9, 10, 11); 17863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 17963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 18063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 18163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testConfirmedShiftClick_ExtendsSelectionFromFocus() { 18263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestItemDetails item = mDetailsLookup.initAt(7); 18363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.focusItem(item); 18463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 18563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay // There should be no selected item at this point, just focus on "7". 18663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 18763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(SHIFT_CLICK); 18863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 8, 9, 10, 11); 18963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 19063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 19163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 19263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testUnconfirmedShiftClick_RotatesAroundOrigin() { 19363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(7).setInItemSelectRegion(true); 19463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 19563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 19663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 19763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 19863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 8, 9, 10, 11); 19963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 20063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(5); 20163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 20263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 20363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(5, 6, 7); 20463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertNotSelected(8, 9, 10, 11); 20563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 20663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 20763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 20863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testUnconfirmedShiftCtrlClick_Combination() { 20963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(7).setInItemSelectRegion(true); 21063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 21163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 21263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 21363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 21463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 8, 9, 10, 11); 21563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 21663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(5); 21763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CTRL_CLICK); 21863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 21963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(5, 7, 8, 9, 10, 11); 22063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 22163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 22263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 22363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testUnconfirmedShiftCtrlClick_ShiftTakesPriority() { 22463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(7).setInItemSelectRegion(true); 22563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 22663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 22763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 22863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(mEvent.ctrl().shift().build()); 22963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 23063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(7, 8, 9, 10, 11); 23163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 23263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 23363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay // TODO: Add testSpaceBar_Previews, but we need to set a system property 23463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay // to have a deterministic state. 23563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 23663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 23763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testDoubleClick_Opens() { 23863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay TestItemDetails doc = mDetailsLookup.initAt(11); 23963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onDoubleTap(CLICK); 24063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 24163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mActivationCallbacks.assertActivated(doc); 24263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 24363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 24463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 24563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testMiddleClick_DoesNothing() { 24663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(true); 24763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(TERTIARY_CLICK); 24863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 24963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertNoSelection(); 25063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 25163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 25263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 25363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClickOff_ClearsSelection() { 25463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(true); 25563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 25663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 25763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(RecyclerView.NO_POSITION); 25863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CLICK); 25963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 26063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertNoSelection(); 26163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 26263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 26363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 26463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClick_Focuses() { 26563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(false); 26663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 26763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 26863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.assertHasFocus(true); 26963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.assertFocused("11"); 27063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 27163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 27263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 27363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClickOff_ClearsFocus() { 27463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11).setInItemSelectRegion(false); 27563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 27663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.assertHasFocus(true); 27763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 27863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(RecyclerView.NO_POSITION); 27963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CLICK); 28063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.assertHasFocus(false); 28163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 28263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 28363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay @Test 28463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay public void testClickOffSelection_RemovesSelectionAndFocuses() { 28563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(1).setInItemSelectRegion(true); 28663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapConfirmed(CLICK); 28763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 28863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(5); 28963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(SHIFT_CLICK); 29063d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 29163d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertSelection(1, 2, 3, 4, 5); 29263d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 29363d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mDetailsLookup.initAt(11); 29463d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mInputDelegate.onSingleTapUp(CLICK); 29563d2846409d84487d4856d3b8d18cc4684352e29Steve McKay 29663d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mFocusCallbacks.assertFocused("11"); 29763d2846409d84487d4856d3b8d18cc4684352e29Steve McKay mSelection.assertNoSelection(); 29863d2846409d84487d4856d3b8d18cc4684352e29Steve McKay } 29963d2846409d84487d4856d3b8d18cc4684352e29Steve McKay} 300