• 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.queries;
18 
19 import static junit.framework.Assert.assertEquals;
20 import static junit.framework.Assert.assertFalse;
21 import static junit.framework.Assert.assertNotNull;
22 import static junit.framework.Assert.assertNull;
23 import static junit.framework.Assert.assertTrue;
24 import static junit.framework.Assert.fail;
25 
26 import android.annotation.Nullable;
27 import android.os.Bundle;
28 import android.os.Handler;
29 
30 import android.support.test.filters.SmallTest;
31 import android.support.test.runner.AndroidJUnit4;
32 
33 import com.android.documentsui.R;
34 import com.android.documentsui.base.EventHandler;
35 import com.android.documentsui.queries.SearchViewManager.SearchManagerListener;
36 import com.android.documentsui.queries.SearchViewManager;
37 import com.android.documentsui.testing.TestEventHandler;
38 import com.android.documentsui.testing.TestHandler;
39 import com.android.documentsui.testing.TestMenu;
40 import com.android.documentsui.testing.TestTimer;
41 
42 import org.junit.Assert;
43 import org.junit.Before;
44 import org.junit.Test;
45 import org.junit.runner.RunWith;
46 
47 import java.util.Timer;
48 import java.util.TimerTask;
49 
50 @RunWith(AndroidJUnit4.class)
51 @SmallTest
52 public final class SearchViewManagerTest {
53 
54     private TestEventHandler<String> mTestEventHandler;
55     private TestTimer mTestTimer;
56     private TestHandler mTestHandler;
57     private SearchViewManager mSearchViewManager;
58 
59     private boolean mListenerOnSearchChangedCalled;
60 
61     @Before
setUp()62     public void setUp() {
63         mTestEventHandler = new TestEventHandler<>();
64         mTestTimer = new TestTimer();
65         mTestHandler = new TestHandler();
66 
67         final SearchManagerListener searchListener = new SearchManagerListener() {
68             @Override
69             public void onSearchChanged(@Nullable String query) {
70                 mListenerOnSearchChangedCalled = true;
71             }
72             @Override
73             public void onSearchFinished() {}
74             @Override
75             public void onSearchViewChanged(boolean opened) {}
76         };
77 
78         mSearchViewManager = new TestableSearchViewManager(
79                 searchListener, mTestEventHandler, null, mTestTimer, mTestHandler);
80 
81         final TestMenu testMenu = TestMenu.create();
82         mSearchViewManager.install(testMenu, true);
83     }
84 
85     private static class TestableSearchViewManager extends SearchViewManager {
TestableSearchViewManager( SearchManagerListener listener, EventHandler<String> commandProcessor, @Nullable Bundle savedState, Timer timer, Handler handler)86         public TestableSearchViewManager(
87                 SearchManagerListener listener,
88                 EventHandler<String> commandProcessor,
89                 @Nullable Bundle savedState,
90                 Timer timer,
91                 Handler handler) {
92             super(listener, commandProcessor, savedState, timer, handler);
93         }
94 
95         @Override
createSearchTask(String newText)96         public TimerTask createSearchTask(String newText) {
97             TimerTask task = super.createSearchTask(newText);
98             TestTimer.Task testTask = new TestTimer.Task(task);
99             return testTask;
100         }
101     }
102 
fastForwardTo(long timeMs)103     private void fastForwardTo(long timeMs) {
104         mTestTimer.fastForwardTo(timeMs);
105         mTestHandler.dispatchAllMessages();
106     }
107 
108     @Test
testIsExpanded_ExpandsOnClick()109     public void testIsExpanded_ExpandsOnClick() {
110         mSearchViewManager.onClick(null);
111         assertTrue(mSearchViewManager.isExpanded());
112     }
113 
114     @Test
testIsExpanded_CollapsesOnMenuItemActionCollapse()115     public void testIsExpanded_CollapsesOnMenuItemActionCollapse() {
116         mSearchViewManager.onClick(null);
117         mSearchViewManager.onMenuItemActionCollapse(null);
118         assertFalse(mSearchViewManager.isExpanded());
119     }
120 
121     @Test
testIsSearching_FalseOnClick()122     public void testIsSearching_FalseOnClick() throws Exception {
123         mSearchViewManager.onClick(null);
124         assertFalse(mSearchViewManager.isSearching());
125     }
126 
127     @Test
testIsSearching_TrueOnQueryTextSubmit()128     public void testIsSearching_TrueOnQueryTextSubmit() throws Exception {
129         mSearchViewManager.onClick(null);
130         mSearchViewManager.onQueryTextSubmit("query");
131         assertTrue(mSearchViewManager.isSearching());
132     }
133 
134     @Test
testIsSearching_FalseImmediatelyAfterOnQueryTextChange()135     public void testIsSearching_FalseImmediatelyAfterOnQueryTextChange() throws Exception {
136         mSearchViewManager.onClick(null);
137         mSearchViewManager.onQueryTextChange("q");
138         assertFalse(mSearchViewManager.isSearching());
139     }
140 
141     @Test
testIsSearching_TrueAfterOnQueryTextChangeAndWait()142     public void testIsSearching_TrueAfterOnQueryTextChangeAndWait() throws Exception {
143         mSearchViewManager.onClick(null);
144         mSearchViewManager.onQueryTextChange("q");
145         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
146         assertTrue(mSearchViewManager.isSearching());
147     }
148 
149     @Test
testIsSearching_FalseWhenSecondOnQueryTextChangeResetsTimer()150     public void testIsSearching_FalseWhenSecondOnQueryTextChangeResetsTimer() throws Exception {
151         mSearchViewManager.onClick(null);
152         mSearchViewManager.onQueryTextChange("q");
153         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS - 1);
154         mSearchViewManager.onQueryTextChange("qu");
155         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
156         assertFalse(mSearchViewManager.isSearching());
157     }
158 
159     @Test
testIsSearching_TrueAfterSecondOnQueryTextChangeResetsTimer()160     public void testIsSearching_TrueAfterSecondOnQueryTextChangeResetsTimer() throws Exception {
161         mSearchViewManager.onClick(null);
162         mSearchViewManager.onQueryTextChange("q");
163         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS - 1);
164         mSearchViewManager.onQueryTextChange("qu");
165         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS * 2);
166         assertTrue(mSearchViewManager.isSearching());
167     }
168 
169     @Test
testIsSearching_FalseIfSearchCanceled()170     public void testIsSearching_FalseIfSearchCanceled() throws Exception {
171         mSearchViewManager.onClick(null);
172         mSearchViewManager.onQueryTextChange("q");
173         mSearchViewManager.cancelSearch();
174         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
175         assertFalse(mSearchViewManager.isSearching());
176     }
177 
178     @Test
testOnSearchChanged_CalledAfterOnQueryTextSubmit()179     public void testOnSearchChanged_CalledAfterOnQueryTextSubmit() throws Exception {
180         mSearchViewManager.onClick(null);
181         mSearchViewManager.onQueryTextSubmit("q");
182         assertTrue(mListenerOnSearchChangedCalled);
183     }
184 
185     @Test
testOnSearchChanged_NotCalledImmediatelyAfterOnQueryTextChanged()186     public void testOnSearchChanged_NotCalledImmediatelyAfterOnQueryTextChanged() throws Exception {
187         mSearchViewManager.onClick(null);
188         mSearchViewManager.onQueryTextChange("q");
189         assertFalse(mListenerOnSearchChangedCalled);
190     }
191 
192     @Test
testOnSearchChanged_CalledAfterOnQueryTextChangedAndWait()193     public void testOnSearchChanged_CalledAfterOnQueryTextChangedAndWait() throws Exception {
194         mSearchViewManager.onClick(null);
195         mSearchViewManager.onQueryTextChange("q");
196         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
197         assertTrue(mListenerOnSearchChangedCalled);
198     }
199 
200     @Test
testOnSearchChanged_CalledOnlyOnceAfterOnQueryTextSubmit()201     public void testOnSearchChanged_CalledOnlyOnceAfterOnQueryTextSubmit() throws Exception {
202         mSearchViewManager.onClick(null);
203         mSearchViewManager.onQueryTextChange("q");
204         mSearchViewManager.onQueryTextSubmit("q");
205 
206         // Clear the flag to check if it gets set again.
207         mListenerOnSearchChangedCalled = false;
208         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
209         assertFalse(mListenerOnSearchChangedCalled);
210     }
211 
212     @Test
testOnSearchChanged_NotCalledForOnQueryTextSubmitIfSearchAlreadyFinished()213     public void testOnSearchChanged_NotCalledForOnQueryTextSubmitIfSearchAlreadyFinished()
214             throws Exception {
215         mSearchViewManager.onClick(null);
216         mSearchViewManager.onQueryTextChange("q");
217         fastForwardTo(SearchViewManager.SEARCH_DELAY_MS);
218         // Clear the flag to check if it gets set again.
219         mListenerOnSearchChangedCalled = false;
220         mSearchViewManager.onQueryTextSubmit("q");
221         assertFalse(mListenerOnSearchChangedCalled);
222     }
223 }
224