• 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 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