• 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 package com.android.documentsui.testing;
17 
18 import android.provider.DocumentsContract.Document;
19 import android.test.mock.MockContentResolver;
20 
21 import com.android.documentsui.FocusManager;
22 import com.android.documentsui.Injector;
23 import com.android.documentsui.archives.ArchivesProvider;
24 import com.android.documentsui.base.DocumentInfo;
25 import com.android.documentsui.base.RootInfo;
26 import com.android.documentsui.base.State;
27 import com.android.documentsui.dirlist.TestFocusHandler;
28 import com.android.documentsui.selection.SelectionManager;
29 import com.android.documentsui.sorting.SortModel;
30 import com.android.documentsui.ui.TestDialogController;
31 
32 import junit.framework.Assert;
33 
34 import java.util.ArrayList;
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38 import java.util.concurrent.Executor;
39 
40 public class TestEnv {
41 
42     public static DocumentInfo FOLDER_0;
43     public static DocumentInfo FOLDER_1;
44     public static DocumentInfo FOLDER_2;
45     public static DocumentInfo FILE_TXT;
46     public static DocumentInfo FILE_PNG;
47     public static DocumentInfo FILE_JPG;
48     public static DocumentInfo FILE_GIF;
49     public static DocumentInfo FILE_PDF;
50     public static DocumentInfo FILE_APK;
51     public static DocumentInfo FILE_PARTIAL;
52     public static DocumentInfo FILE_ARCHIVE;
53     public static DocumentInfo FILE_IN_ARCHIVE;
54     public static DocumentInfo FILE_VIRTUAL;
55 
56     public final TestScheduledExecutorService mExecutor;
57     public final State state = new State();
58     public final TestProvidersAccess roots = new TestProvidersAccess();
59     public final TestDocumentsAccess docs = new TestDocumentsAccess();
60     public final TestFocusHandler focusHandler = new TestFocusHandler();
61     public final TestDialogController dialogs = new TestDialogController();
62     public final TestModel model;
63     public final TestModel archiveModel;
64     public final SelectionManager selectionMgr;
65     public final TestSearchViewManager searchViewManager;
66     public final Injector injector;
67     public final TestFeatures features;
68 
69     public final MockContentResolver contentResolver;
70     public final Map<String, TestDocumentsProvider> providers;
71 
TestEnv(String authority)72     private TestEnv(String authority) {
73         state.sortModel = SortModel.createModel();
74         mExecutor = new TestScheduledExecutorService();
75         features = new TestFeatures();
76         model = new TestModel(authority, features);
77         archiveModel = new TestModel(ArchivesProvider.AUTHORITY, features);
78         selectionMgr = SelectionManagers.createTestInstance();
79         searchViewManager = new TestSearchViewManager();
80         injector = new Injector(
81                 features,
82                 new TestActivityConfig(),
83                 null,       //ScopedPreferences are not required for tests
84                 null,   //a MessageBuilder is not required for tests
85                 dialogs,
86                 model);
87         injector.selectionMgr = selectionMgr;
88         injector.focusManager = new FocusManager(features, selectionMgr, null, null, 0);
89         injector.searchManager = searchViewManager;
90 
91         contentResolver = new MockContentResolver();
92         providers = new HashMap<>(roots.getRootsBlocking().size());
93         registerProviders();
94     }
95 
registerProviders()96     private void registerProviders() {
97         for (RootInfo root : roots.getRootsBlocking()) {
98             if (!providers.containsKey(root.authority)) {
99                 TestDocumentsProvider provider = new TestDocumentsProvider(root.authority);
100                 contentResolver.addProvider(root.authority, provider);
101                 providers.put(root.authority, provider);
102             }
103         }
104     }
105 
create()106     public static TestEnv create() {
107         return create(TestProvidersAccess.HOME.authority);
108     }
109 
create(String authority)110     public static TestEnv create(String authority) {
111         TestEnv env = new TestEnv(authority);
112         env.reset();
113         return env;
114     }
115 
clear()116     public void clear() {
117         model.reset();
118         model.update();
119     }
120 
reset()121     public void reset() {
122         model.reset();
123         FOLDER_0 = model.createFolder("folder 0");
124         FOLDER_1 = model.createFolder("folder 1");
125         FOLDER_2 = model.createFolder("folder 2");
126         FILE_TXT = model.createFile("woowoo.txt");
127         FILE_PNG = model.createFile("peppey.png");
128         FILE_JPG = model.createFile("jiffy.jpg");
129         FILE_GIF = model.createFile("glibby.gif");
130         FILE_PDF = model.createFile("busy.pdf");
131         FILE_APK = model.createFile("becareful.apk");
132         FILE_PARTIAL = model.createFile(
133                 "UbuntuFlappyBird.iso",
134                 Document.FLAG_SUPPORTS_DELETE
135                         | Document.FLAG_PARTIAL);
136         FILE_ARCHIVE = model.createFile("whatsinthere.zip");
137         FILE_IN_ARCHIVE = archiveModel.createFile("whatsinthere.png");
138         FILE_VIRTUAL = model.createDocument(
139                 "virtualdoc.vnd",
140                 "application/vnd.google-apps.document",
141                 Document.FLAG_VIRTUAL_DOCUMENT
142                         | Document.FLAG_SUPPORTS_DELETE
143                         | Document.FLAG_SUPPORTS_RENAME);
144 
145         archiveModel.update();
146         model.update();
147     }
148 
populateStack()149     public void populateStack() {
150         DocumentInfo rootDoc = model.getDocument("1");
151         Assert.assertNotNull(rootDoc);
152         Assert.assertEquals(rootDoc.displayName, FOLDER_0.displayName);
153 
154         state.stack.changeRoot(TestProvidersAccess.HOME);
155         state.stack.push(rootDoc);
156     }
157 
beforeAsserts()158     public void beforeAsserts() throws Exception {
159         mExecutor.waitForTasks(30000); // 30 secs
160     }
161 
lookupExecutor(String authority)162     public Executor lookupExecutor(String authority) {
163         return mExecutor;
164     }
165 
selectDocument(DocumentInfo info)166     public void selectDocument(DocumentInfo info) {
167         List<String> ids = new ArrayList<>(1);
168         ids.add(info.documentId);
169         selectionMgr.setItemsSelected(ids, true);
170     }
171 }
172