• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static org.junit.Assert.assertFalse;
20 import static org.junit.Assert.assertTrue;
21 
22 import android.graphics.Point;
23 import android.graphics.Rect;
24 import android.support.test.filters.SmallTest;
25 import android.support.test.runner.AndroidJUnit4;
26 import android.support.v7.widget.RecyclerView.OnScrollListener;
27 import android.view.MotionEvent;
28 
29 import com.android.documentsui.selection.BandSelectionHelper.BandHost;
30 import com.android.documentsui.selection.testing.SelectionPredicates;
31 import com.android.documentsui.selection.testing.TestAdapter;
32 import com.android.documentsui.selection.testing.TestBandPredicate;
33 import com.android.documentsui.selection.testing.TestEvents.Builder;
34 import com.android.documentsui.selection.testing.TestStableIdProvider;
35 
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 
40 import java.util.Collections;
41 import java.util.List;
42 
43 @RunWith(AndroidJUnit4.class)
44 @SmallTest
45 public class BandSelectionHelperTest {
46 
47     private List<String> mItems;
48     private BandSelectionHelper mBandController;
49     private boolean mIsActive;
50     private Builder mStartBuilder;
51     private Builder mStopBuilder;
52     private MotionEvent mStartEvent;
53     private MotionEvent mStopEvent;
54     private TestBandHost mBandHost;
55     private TestBandPredicate mBandPredicate;
56 
57     @Before
setup()58     public void setup() throws Exception {
59         mItems = TestAdapter.createItemList(10);
60         mIsActive = false;
61         TestAdapter adapter = new TestAdapter();
62         adapter.updateTestModelIds(mItems);
63         mBandHost = new TestBandHost();
64         mBandPredicate = new TestBandPredicate();
65 
66         SelectionHelper helper = new DefaultSelectionHelper(
67                 DefaultSelectionHelper.MODE_SINGLE,
68                 adapter,
69                 new TestStableIdProvider(adapter),
70                 SelectionPredicates.CAN_SET_ANYTHING);
71 
72         mBandController = new BandSelectionHelper(
73                 mBandHost,
74                 adapter,
75                 new TestStableIdProvider(adapter),
76                 helper,
77                 SelectionPredicates.CAN_SET_ANYTHING,
78                 mBandPredicate,
79                 new ContentLock()) {
80                     @Override
81                     public boolean isActive() {
82                         return mIsActive;
83                     }
84                 };
85 
86         mStartBuilder = new Builder().mouse().primary().action(MotionEvent.ACTION_MOVE);
87         mStopBuilder = new Builder().mouse().action(MotionEvent.ACTION_UP);
88         mStartEvent = mStartBuilder.build();
89         mStopEvent = mStopBuilder.build();
90     }
91 
92     @Test
testGoodStart()93     public void testGoodStart() {
94         assertTrue(mBandController.shouldStart(mStartEvent));
95     }
96 
97     @Test
testBadStart_NoButtons()98     public void testBadStart_NoButtons() {
99         assertFalse(mBandController.shouldStart(
100                 mStartBuilder.releaseButton(MotionEvent.BUTTON_PRIMARY).build()));
101     }
102 
103     @Test
testBadStart_SecondaryButton()104     public void testBadStart_SecondaryButton() {
105         assertFalse(
106                 mBandController.shouldStart(mStartBuilder.secondary().build()));
107     }
108 
109     @Test
testBadStart_TertiaryButton()110     public void testBadStart_TertiaryButton() {
111         assertFalse(
112                 mBandController.shouldStart(mStartBuilder.tertiary().build()));
113     }
114 
115     @Test
testBadStart_Touch()116     public void testBadStart_Touch() {
117         assertFalse(mBandController.shouldStart(
118                 mStartBuilder.touch().releaseButton(MotionEvent.BUTTON_PRIMARY).build()));
119     }
120 
121     @Test
testBadStart_RespectsCanInitiateBand()122     public void testBadStart_RespectsCanInitiateBand() {
123         mBandPredicate.setCanInitiate(false);
124         assertFalse(mBandController.shouldStart(mStartEvent));
125     }
126 
127     @Test
testBadStart_ActionDown()128     public void testBadStart_ActionDown() {
129         assertFalse(mBandController
130                 .shouldStart(mStartBuilder.action(MotionEvent.ACTION_DOWN).build()));
131     }
132 
133     @Test
testBadStart_ActionUp()134     public void testBadStart_ActionUp() {
135         assertFalse(mBandController
136                 .shouldStart(mStartBuilder.action(MotionEvent.ACTION_UP).build()));
137     }
138 
139     @Test
testBadStart_ActionPointerDown()140     public void testBadStart_ActionPointerDown() {
141         assertFalse(mBandController.shouldStart(
142                 mStartBuilder.action(MotionEvent.ACTION_POINTER_DOWN).build()));
143     }
144 
145     @Test
testBadStart_ActionPointerUp()146     public void testBadStart_ActionPointerUp() {
147         assertFalse(mBandController.shouldStart(
148                 mStartBuilder.action(MotionEvent.ACTION_POINTER_UP).build()));
149     }
150 
151     @Test
testBadStart_NoItems()152     public void testBadStart_NoItems() {
153         TestAdapter emptyAdapter = new TestAdapter();
154         emptyAdapter.updateTestModelIds(Collections.EMPTY_LIST);
155 
156         SelectionHelper helper = new DefaultSelectionHelper(
157                 DefaultSelectionHelper.MODE_SINGLE,
158                 emptyAdapter,
159                 new TestStableIdProvider(emptyAdapter),
160                 SelectionPredicates.CAN_SET_ANYTHING);
161 
162         mBandController = new BandSelectionHelper(
163                 new TestBandHost(),
164                 emptyAdapter,
165                 new TestStableIdProvider(emptyAdapter),
166                 helper,
167                 SelectionPredicates.CAN_SET_ANYTHING,
168                 mBandPredicate,
169                 new ContentLock());
170 
171         assertFalse(mBandController.shouldStart(mStartEvent));
172     }
173 
174     @Test
testBadStart_alreadyActive()175     public void testBadStart_alreadyActive() {
176         mIsActive = true;
177         assertFalse(mBandController.shouldStart(mStartEvent));
178     }
179 
180     @Test
testGoodStop()181     public void testGoodStop() {
182         mIsActive = true;
183         assertTrue(mBandController.shouldStop(mStopEvent));
184     }
185 
186     @Test
testGoodStop_PointerUp()187     public void testGoodStop_PointerUp() {
188         mIsActive = true;
189         assertTrue(mBandController
190                 .shouldStop(mStopBuilder.action(MotionEvent.ACTION_POINTER_UP).build()));
191     }
192 
193     @Test
testGoodStop_Cancel()194     public void testGoodStop_Cancel() {
195         mIsActive = true;
196         assertTrue(mBandController
197                 .shouldStop(mStopBuilder.action(MotionEvent.ACTION_CANCEL).build()));
198     }
199 
200     @Test
testBadStop_NotActive()201     public void testBadStop_NotActive() {
202         assertFalse(mBandController.shouldStop(mStopEvent));
203     }
204 
205     @Test
testBadStop_NonMouse()206     public void testBadStop_NonMouse() {
207         mIsActive = true;
208         assertFalse(mBandController.shouldStop(mStopBuilder.touch().build()));
209     }
210 
211     @Test
testBadStop_Move()212     public void testBadStop_Move() {
213         mIsActive = true;
214         assertFalse(mBandController.shouldStop(
215                 mStopBuilder.action(MotionEvent.ACTION_MOVE).touch().build()));
216     }
217 
218     @Test
testBadStop_Down()219     public void testBadStop_Down() {
220         mIsActive = true;
221         assertFalse(mBandController.shouldStop(
222                 mStopBuilder.action(MotionEvent.ACTION_DOWN).touch().build()));
223     }
224 
225     private final class TestBandHost extends BandHost {
226         @Override
scrollBy(int dy)227         public void scrollBy(int dy) {
228         }
229 
230         @Override
runAtNextFrame(Runnable r)231         public void runAtNextFrame(Runnable r) {
232         }
233 
234         @Override
removeCallback(Runnable r)235         public void removeCallback(Runnable r) {
236         }
237 
238         @Override
showBand(Rect rect)239         public void showBand(Rect rect) {
240         }
241 
242         @Override
hideBand()243         public void hideBand() {
244         }
245 
246         @Override
addOnScrollListener(OnScrollListener listener)247         public void addOnScrollListener(OnScrollListener listener) {
248         }
249 
250         @Override
removeOnScrollListener(OnScrollListener listener)251         public void removeOnScrollListener(OnScrollListener listener) {
252         }
253 
254         @Override
getHeight()255         public int getHeight() {
256             return 0;
257         }
258 
259         @Override
invalidateView()260         public void invalidateView() {
261         }
262 
263         @Override
createAbsolutePoint(Point relativePoint)264         public Point createAbsolutePoint(Point relativePoint) {
265             return null;
266         }
267 
268         @Override
getAbsoluteRectForChildViewAt(int index)269         public Rect getAbsoluteRectForChildViewAt(int index) {
270             return null;
271         }
272 
273         @Override
getAdapterPositionAt(int index)274         public int getAdapterPositionAt(int index) {
275             return 0;
276         }
277 
278         @Override
getColumnCount()279         public int getColumnCount() {
280             return 0;
281         }
282 
283         @Override
getChildCount()284         public int getChildCount() {
285             return 0;
286         }
287 
288         @Override
getVisibleChildCount()289         public int getVisibleChildCount() {
290             return 0;
291         }
292 
293         @Override
hasView(int adapterPosition)294         public boolean hasView(int adapterPosition) {
295             return false;
296         }
297     }
298 }
299