1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.documentsui.selection; 18 19 import android.graphics.Point; 20 import android.graphics.Rect; 21 import android.support.v7.widget.RecyclerView.OnScrollListener; 22 import android.test.AndroidTestCase; 23 import android.test.suitebuilder.annotation.SmallTest; 24 import android.view.MotionEvent; 25 26 import com.android.documentsui.DirectoryReloadLock; 27 import com.android.documentsui.dirlist.TestData; 28 import com.android.documentsui.dirlist.TestDocumentsAdapter; 29 import com.android.documentsui.testing.SelectionManagers; 30 import com.android.documentsui.testing.TestEvent.Builder; 31 32 import java.util.Collections; 33 import java.util.List; 34 35 @SmallTest 36 public class BandControllerTest extends AndroidTestCase { 37 38 private static final List<String> ITEMS = TestData.create(10); 39 private BandController mBandController; 40 private boolean mIsActive; 41 42 @Override setUp()43 public void setUp() throws Exception { 44 mIsActive = false; 45 mBandController = new BandController(new TestSelectionEnvironment(), 46 new TestDocumentsAdapter(ITEMS), SelectionManagers.createTestInstance(ITEMS), 47 new DirectoryReloadLock(), null) { 48 @Override 49 public boolean isActive() { 50 return mIsActive; 51 } 52 }; 53 } 54 testGoodStart()55 public void testGoodStart() { 56 assertTrue(mBandController.shouldStart(goodStartEventBuilder().build())); 57 } 58 testBadStart_NoButtons()59 public void testBadStart_NoButtons() { 60 assertFalse(mBandController.shouldStart( 61 goodStartEventBuilder().releaseButton(MotionEvent.BUTTON_PRIMARY).build())); 62 } 63 testBadStart_SecondaryButton()64 public void testBadStart_SecondaryButton() { 65 assertFalse( 66 mBandController.shouldStart(goodStartEventBuilder().secondary().build())); 67 } 68 testBadStart_TertiaryButton()69 public void testBadStart_TertiaryButton() { 70 assertFalse( 71 mBandController.shouldStart(goodStartEventBuilder().tertiary().build())); 72 } 73 testBadStart_Touch()74 public void testBadStart_Touch() { 75 assertFalse(mBandController.shouldStart( 76 goodStartEventBuilder().touch().releaseButton(MotionEvent.BUTTON_PRIMARY).build())); 77 } 78 testBadStart_inDragSpot()79 public void testBadStart_inDragSpot() { 80 assertFalse( 81 mBandController.shouldStart(goodStartEventBuilder().at(1).inDragHotspot().build())); 82 } 83 testBadStart_ActionDown()84 public void testBadStart_ActionDown() { 85 assertFalse(mBandController 86 .shouldStart(goodStartEventBuilder().action(MotionEvent.ACTION_DOWN).build())); 87 } 88 testBadStart_ActionUp()89 public void testBadStart_ActionUp() { 90 assertFalse(mBandController 91 .shouldStart(goodStartEventBuilder().action(MotionEvent.ACTION_UP).build())); 92 } 93 testBadStart_ActionPointerDown()94 public void testBadStart_ActionPointerDown() { 95 assertFalse(mBandController.shouldStart( 96 goodStartEventBuilder().action(MotionEvent.ACTION_POINTER_DOWN).build())); 97 } 98 testBadStart_ActionPointerUp()99 public void testBadStart_ActionPointerUp() { 100 assertFalse(mBandController.shouldStart( 101 goodStartEventBuilder().action(MotionEvent.ACTION_POINTER_UP).build())); 102 } 103 testBadStart_NoItems()104 public void testBadStart_NoItems() { 105 mBandController = new BandController(new TestSelectionEnvironment(), 106 new TestDocumentsAdapter(Collections.EMPTY_LIST), 107 SelectionManagers.createTestInstance(ITEMS), 108 new DirectoryReloadLock(), null); 109 assertFalse(mBandController.shouldStart(goodStartEventBuilder().build())); 110 } 111 testBadStart_alreadyActive()112 public void testBadStart_alreadyActive() { 113 mIsActive = true; 114 assertFalse(mBandController.shouldStart(goodStartEventBuilder().build())); 115 } 116 testGoodStop()117 public void testGoodStop() { 118 mIsActive = true; 119 assertTrue(mBandController.shouldStop(goodStopEventBuilder().build())); 120 } 121 testGoodStop_PointerUp()122 public void testGoodStop_PointerUp() { 123 mIsActive = true; 124 assertTrue(mBandController 125 .shouldStop(goodStopEventBuilder().action(MotionEvent.ACTION_POINTER_UP).build())); 126 } 127 testGoodStop_Cancel()128 public void testGoodStop_Cancel() { 129 mIsActive = true; 130 assertTrue(mBandController 131 .shouldStop(goodStopEventBuilder().action(MotionEvent.ACTION_CANCEL).build())); 132 } 133 testBadStop_NotActive()134 public void testBadStop_NotActive() { 135 assertFalse(mBandController.shouldStop(goodStopEventBuilder().build())); 136 } 137 testBadStop_NonMouse()138 public void testBadStop_NonMouse() { 139 mIsActive = true; 140 assertFalse(mBandController.shouldStop(goodStopEventBuilder().touch().build())); 141 } 142 testBadStop_Move()143 public void testBadStop_Move() { 144 mIsActive = true; 145 assertFalse(mBandController.shouldStop( 146 goodStopEventBuilder().action(MotionEvent.ACTION_MOVE).touch().build())); 147 } 148 testBadStop_Down()149 public void testBadStop_Down() { 150 mIsActive = true; 151 assertFalse(mBandController.shouldStop( 152 goodStopEventBuilder().action(MotionEvent.ACTION_DOWN).touch().build())); 153 } 154 155 goodStartEventBuilder()156 private Builder goodStartEventBuilder() { 157 return new Builder().mouse().primary().action(MotionEvent.ACTION_MOVE).notInDragHotspot(); 158 } 159 goodStopEventBuilder()160 private Builder goodStopEventBuilder() { 161 return new Builder().mouse().action(MotionEvent.ACTION_UP).notInDragHotspot(); 162 } 163 164 private final class TestSelectionEnvironment implements BandController.SelectionEnvironment { 165 @Override scrollBy(int dy)166 public void scrollBy(int dy) { 167 } 168 169 @Override runAtNextFrame(Runnable r)170 public void runAtNextFrame(Runnable r) { 171 } 172 173 @Override removeCallback(Runnable r)174 public void removeCallback(Runnable r) { 175 } 176 177 @Override showBand(Rect rect)178 public void showBand(Rect rect) { 179 } 180 181 @Override hideBand()182 public void hideBand() { 183 } 184 185 @Override addOnScrollListener(OnScrollListener listener)186 public void addOnScrollListener(OnScrollListener listener) { 187 } 188 189 @Override removeOnScrollListener(OnScrollListener listener)190 public void removeOnScrollListener(OnScrollListener listener) { 191 } 192 193 @Override getHeight()194 public int getHeight() { 195 return 0; 196 } 197 198 @Override invalidateView()199 public void invalidateView() { 200 } 201 202 @Override createAbsolutePoint(Point relativePoint)203 public Point createAbsolutePoint(Point relativePoint) { 204 return null; 205 } 206 207 @Override getAbsoluteRectForChildViewAt(int index)208 public Rect getAbsoluteRectForChildViewAt(int index) { 209 return null; 210 } 211 212 @Override getAdapterPositionAt(int index)213 public int getAdapterPositionAt(int index) { 214 return 0; 215 } 216 217 @Override getColumnCount()218 public int getColumnCount() { 219 return 0; 220 } 221 222 @Override getChildCount()223 public int getChildCount() { 224 return 0; 225 } 226 227 @Override getVisibleChildCount()228 public int getVisibleChildCount() { 229 return 0; 230 } 231 232 @Override hasView(int adapterPosition)233 public boolean hasView(int adapterPosition) { 234 return false; 235 } 236 } 237 } 238