• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertNotNull;
22 import static org.junit.Assert.assertTrue;
23 
24 import android.support.test.filters.SmallTest;
25 import android.support.test.runner.AndroidJUnit4;
26 import android.support.v7.widget.RecyclerView.Adapter;
27 
28 import com.android.documentsui.DocsSelectionHelper.DelegateFactory;
29 import com.android.documentsui.selection.DefaultSelectionHelper;
30 import com.android.documentsui.selection.Selection;
31 import com.android.documentsui.selection.SelectionHelper;
32 import com.android.documentsui.selection.SelectionHelper.SelectionPredicate;
33 import com.android.documentsui.selection.SelectionHelper.StableIdProvider;
34 
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
42 import java.util.Map;
43 import java.util.Set;
44 
45 /**
46  * Tests for the specialized behaviors provided by DocsSelectionManager.
47  */
48 @RunWith(AndroidJUnit4.class)
49 @SmallTest
50 public class DocsSelectionHelperTest {
51 
52     private DocsSelectionHelper mSelectionMgr;
53     private List<TestSelectionManager> mCreated;
54     private DelegateFactory mFactory;
55 
56     @Before
setup()57     public void setup() {
58         mCreated = new ArrayList<>();
59         mFactory = new DelegateFactory() {
60             @Override
61             TestSelectionManager create(
62                     int mode,
63                     Adapter<?> adapter,
64                     StableIdProvider stableIds,
65                     SelectionPredicate canSetState) {
66 
67                 TestSelectionManager mgr = new TestSelectionManager();
68                 mCreated.add(mgr);
69                 return mgr;
70             }
71         };
72 
73         mSelectionMgr = new DocsSelectionHelper(mFactory, DefaultSelectionHelper.MODE_MULTIPLE);
74     }
75 
76     @Test
testCallableBeforeReset()77     public void testCallableBeforeReset() {
78         mSelectionMgr.hasSelection();
79         assertNotNull(mSelectionMgr.getSelection());
80         assertFalse(mSelectionMgr.isSelected("poodle"));
81     }
82 
83     @Test
testReset_CreatesNewInstances()84     public void testReset_CreatesNewInstances() {
85         mSelectionMgr.reset(null, null, null);  // nulls are passed to factory. We ignore.
86         mSelectionMgr.reset(null, null, null);  // nulls are passed to factory. We ignore.
87 
88         assertCreated(2);
89     }
90 
91     @Test
testReset_ClearsPreviousSelection()92     public void testReset_ClearsPreviousSelection() {
93         mSelectionMgr.reset(null, null, null);  // nulls are passed to factory. We ignore.
94         mSelectionMgr.reset(null, null, null);  // nulls are passed to factory. We ignore.
95 
96         mCreated.get(0).assertCleared(true);
97         mCreated.get(1).assertCleared(false);
98     }
99 
100     @Test
testReplaceSelection()101     public void testReplaceSelection() {
102         mSelectionMgr.reset(null, null, null);  // nulls are passed to factory. We ignore.
103 
104         List<String> ids = new ArrayList<>();
105         ids.add("poodles");
106         ids.add("hammy");
107         mSelectionMgr.replaceSelection(ids);
108         mCreated.get(0).assertCleared(true);
109         mCreated.get(0).assertSelected("poodles", "hammy");
110     }
111 
assertCreated(int count)112     void assertCreated(int count) {
113         assertEquals(count, mCreated.size());
114     }
115 
116     private static final class TestSelectionManager extends SelectionHelper {
117 
118         private boolean mCleared;
119         private Map<String, Boolean> mSelected = new HashMap<>();
120 
assertCleared(boolean expected)121         void assertCleared(boolean expected) {
122             assertEquals(expected, mCleared);
123         }
124 
assertSelected(String... expected)125         void assertSelected(String... expected) {
126             for (String id : expected) {
127                 assertTrue(mSelected.containsKey(id));
128                 assertTrue(mSelected.get(id));
129             }
130             assertEquals(expected.length, mSelected.size());
131         }
132 
133         @Override
addObserver(SelectionObserver listener)134         public void addObserver(SelectionObserver listener) {
135             throw new UnsupportedOperationException();
136         }
137 
138         @Override
hasSelection()139         public boolean hasSelection() {
140             throw new UnsupportedOperationException();
141         }
142 
143         @Override
getSelection()144         public Selection getSelection() {
145             throw new UnsupportedOperationException();
146         }
147 
148         @Override
copySelection(Selection dest)149         public void copySelection(Selection dest) {
150             throw new UnsupportedOperationException();
151         }
152 
153         @Override
isSelected(String id)154         public boolean isSelected(String id) {
155             throw new UnsupportedOperationException();
156         }
157 
158         @Override
restoreSelection(Selection other)159         public void restoreSelection(Selection other) {
160             throw new UnsupportedOperationException();
161         }
162 
163         @Override
setItemsSelected(Iterable<String> ids, boolean selected)164         public boolean setItemsSelected(Iterable<String> ids, boolean selected) {
165             for (String id : ids) {
166                 mSelected.put(id, selected);
167             }
168             return true;
169         }
170 
171         @Override
clearSelection()172         public void clearSelection() {
173             mCleared = true;
174         }
175 
176         @Override
select(String itemId)177         public boolean select(String itemId) {
178             throw new UnsupportedOperationException();
179         }
180 
181         @Override
deselect(String itemId)182         public boolean deselect(String itemId) {
183             throw new UnsupportedOperationException();
184         }
185 
186         @Override
startRange(int pos)187         public void startRange(int pos) {
188             throw new UnsupportedOperationException();
189         }
190 
191         @Override
extendRange(int pos)192         public void extendRange(int pos) {
193             throw new UnsupportedOperationException();
194         }
195 
196         @Override
endRange()197         public void endRange() {
198             throw new UnsupportedOperationException();
199         }
200 
201         @Override
isRangeActive()202         public boolean isRangeActive() {
203             throw new UnsupportedOperationException();
204         }
205 
206         @Override
anchorRange(int position)207         public void anchorRange(int position) {
208             throw new UnsupportedOperationException();
209         }
210 
211         @Override
extendProvisionalRange(int pos)212         public void extendProvisionalRange(int pos) {
213             throw new UnsupportedOperationException();
214         }
215 
216         @Override
clearProvisionalSelection()217         public void clearProvisionalSelection() {
218             throw new UnsupportedOperationException();
219         }
220 
221         @Override
mergeProvisionalSelection()222         public void mergeProvisionalSelection() {
223             throw new UnsupportedOperationException();
224         }
225 
226         @Override
setProvisionalSelection(Set<String> newSelection)227         public void setProvisionalSelection(Set<String> newSelection) {
228             throw new UnsupportedOperationException();
229         }
230     }
231 }
232