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