OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.contextualsearch; | 5 package org.chromium.chrome.browser.contextualsearch; |
6 | 6 |
7 import static org.hamcrest.CoreMatchers.equalTo; | |
8 import static org.hamcrest.CoreMatchers.is; | |
9 import static org.junit.Assert.assertThat; | |
10 | |
11 import android.content.Context; | 7 import android.content.Context; |
12 import android.net.Uri; | 8 import android.net.Uri; |
13 import android.support.test.filters.SmallTest; | 9 import android.support.test.filters.SmallTest; |
14 import android.widget.LinearLayout; | 10 import android.widget.LinearLayout; |
15 | 11 |
| 12 import org.junit.Assert; |
| 13 import org.junit.Before; |
| 14 import org.junit.Rule; |
| 15 import org.junit.Test; |
| 16 import org.junit.runner.RunWith; |
| 17 |
16 import org.chromium.base.ThreadUtils; | 18 import org.chromium.base.ThreadUtils; |
| 19 import org.chromium.base.test.util.CommandLineFlags; |
17 import org.chromium.base.test.util.Feature; | 20 import org.chromium.base.test.util.Feature; |
18 import org.chromium.base.test.util.Restriction; | 21 import org.chromium.base.test.util.Restriction; |
19 import org.chromium.chrome.browser.ChromeActivity; | 22 import org.chromium.chrome.browser.ChromeActivity; |
| 23 import org.chromium.chrome.browser.ChromeSwitches; |
20 import org.chromium.chrome.browser.WebContentsFactory; | 24 import org.chromium.chrome.browser.WebContentsFactory; |
21 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; | 25 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManager; |
22 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapp
er; | 26 import org.chromium.chrome.browser.compositor.bottombar.OverlayPanelManagerWrapp
er; |
23 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context
ualSearchPanel; | 27 import org.chromium.chrome.browser.compositor.bottombar.contextualsearch.Context
ualSearchPanel; |
24 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; | 28 import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost; |
25 import org.chromium.chrome.browser.contextualsearch.ContextualSearchInternalStat
eController.InternalState; | 29 import org.chromium.chrome.browser.contextualsearch.ContextualSearchInternalStat
eController.InternalState; |
26 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon
troller.SelectionType; | 30 import org.chromium.chrome.browser.contextualsearch.ContextualSearchSelectionCon
troller.SelectionType; |
27 import org.chromium.chrome.test.ChromeActivityTestCaseBase; | 31 import org.chromium.chrome.test.ChromeActivityTestRule; |
| 32 import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
28 import org.chromium.content.browser.ContentViewCore; | 33 import org.chromium.content.browser.ContentViewCore; |
29 import org.chromium.content.browser.SelectionClient; | 34 import org.chromium.content.browser.SelectionClient; |
30 import org.chromium.content.browser.SelectionPopupController; | 35 import org.chromium.content.browser.SelectionPopupController; |
31 import org.chromium.content_public.browser.WebContents; | 36 import org.chromium.content_public.browser.WebContents; |
32 import org.chromium.ui.resources.dynamics.DynamicResourceLoader; | 37 import org.chromium.ui.resources.dynamics.DynamicResourceLoader; |
33 import org.chromium.ui.touch_selection.SelectionEventType; | 38 import org.chromium.ui.touch_selection.SelectionEventType; |
34 | 39 |
35 import javax.annotation.Nullable; | 40 import javax.annotation.Nullable; |
36 | 41 |
37 /** | 42 /** |
38 * Mock touch events with Contextual Search to test behavior of its panel and ma
nager. | 43 * Mock touch events with Contextual Search to test behavior of its panel and ma
nager. |
39 */ | 44 */ |
40 public class ContextualSearchTapEventTest extends ChromeActivityTestCaseBase<Chr
omeActivity> { | 45 @RunWith(ChromeJUnit4ClassRunner.class) |
| 46 @CommandLineFlags.Add({ |
| 47 ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, |
| 48 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG, |
| 49 }) |
| 50 public class ContextualSearchTapEventTest { |
| 51 @Rule |
| 52 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = |
| 53 new ChromeActivityTestRule<>(ChromeActivity.class); |
41 | 54 |
42 private ContextualSearchManagerWrapper mContextualSearchManager; | 55 private ContextualSearchManagerWrapper mContextualSearchManager; |
43 private ContextualSearchPanel mPanel; | 56 private ContextualSearchPanel mPanel; |
44 private OverlayPanelManagerWrapper mPanelManager; | 57 private OverlayPanelManagerWrapper mPanelManager; |
45 private SelectionClient mContextualSearchClient; | 58 private SelectionClient mContextualSearchClient; |
46 | 59 |
47 /** | 60 /** |
48 * A ContextualSearchRequest that foregoes URI template lookup. | 61 * A ContextualSearchRequest that foregoes URI template lookup. |
49 */ | 62 */ |
50 private static class MockContextualSearchRequest extends ContextualSearchReq
uest { | 63 private static class MockContextualSearchRequest extends ContextualSearchReq
uest { |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 255 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
243 @Override | 256 @Override |
244 public void run() { | 257 public void run() { |
245 mContextualSearchManager.handleSelection(text, true, SelectionTy
pe.TAP, 0, 0); | 258 mContextualSearchManager.handleSelection(text, true, SelectionTy
pe.TAP, 0, 0); |
246 } | 259 } |
247 }); | 260 }); |
248 } | 261 } |
249 | 262 |
250 // -------------------------------------------------------------------------
------------------- | 263 // -------------------------------------------------------------------------
------------------- |
251 | 264 |
252 public ContextualSearchTapEventTest() { | 265 @Before |
253 super(ChromeActivity.class); | 266 public void setUp() throws Exception { |
254 } | 267 mActivityTestRule.startMainActivityOnBlankPage(); |
255 | 268 final ChromeActivity activity = mActivityTestRule.getActivity(); |
256 @Override | |
257 protected void setUp() throws Exception { | |
258 super.setUp(); | |
259 | |
260 final ChromeActivity activity = getActivity(); | |
261 | 269 |
262 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 270 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
263 @Override | 271 @Override |
264 public void run() { | 272 public void run() { |
265 mPanelManager = new OverlayPanelManagerWrapper(); | 273 mPanelManager = new OverlayPanelManagerWrapper(); |
266 mPanelManager.setContainerView(new LinearLayout(activity)); | 274 mPanelManager.setContainerView(new LinearLayout(activity)); |
267 mPanelManager.setDynamicResourceLoader(new DynamicResourceLoader
(0, null)); | 275 mPanelManager.setDynamicResourceLoader(new DynamicResourceLoader
(0, null)); |
268 | 276 |
269 mContextualSearchManager = new ContextualSearchManagerWrapper(ac
tivity); | 277 mContextualSearchManager = new ContextualSearchManagerWrapper(ac
tivity); |
270 mPanel = new ContextualSearchPanelWrapper(activity, null, mPanel
Manager); | 278 mPanel = new ContextualSearchPanelWrapper(activity, null, mPanel
Manager); |
271 mPanel.setManagementDelegate(mContextualSearchManager); | 279 mPanel.setManagementDelegate(mContextualSearchManager); |
272 mContextualSearchManager.setContextualSearchPanel(mPanel); | 280 mContextualSearchManager.setContextualSearchPanel(mPanel); |
273 | 281 |
274 mContextualSearchClient = mContextualSearchManager; | 282 mContextualSearchClient = mContextualSearchManager; |
275 } | 283 } |
276 }); | 284 }); |
277 } | 285 } |
278 | 286 |
279 @Override | |
280 public void startMainActivity() throws InterruptedException { | |
281 startMainActivityWithURL("about:blank"); | |
282 } | |
283 | |
284 /** | 287 /** |
285 * Tests that a Tap gesture followed by tapping empty space closes the panel
. | 288 * Tests that a Tap gesture followed by tapping empty space closes the panel
. |
286 */ | 289 */ |
| 290 @Test |
287 @SmallTest | 291 @SmallTest |
288 @Feature({"ContextualSearch"}) | 292 @Feature({"ContextualSearch"}) |
289 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 293 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
290 public void testLongpressFollowedByNonTextTap() { | 294 public void testLongpressFollowedByNonTextTap() { |
291 assertTrue(mPanelManager.getRequestPanelShowCount() == 0); | 295 Assert.assertEquals(mPanelManager.getRequestPanelShowCount(), 0); |
292 | 296 |
293 // Fake a selection event. | 297 // Fake a selection event. |
294 mockLongpressText("text"); | 298 mockLongpressText("text"); |
295 | 299 |
296 assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); | 300 Assert.assertEquals(mPanelManager.getRequestPanelShowCount(), 1); |
297 assertThat(mPanelManager.getPanelHideCount(), is(0)); | 301 Assert.assertEquals(mPanelManager.getPanelHideCount(), 0); |
298 assertThat(mContextualSearchManager.getSelectionController().getSelected
Text(), | 302 Assert.assertEquals(mContextualSearchManager.getSelectionController().ge
tSelectedText(), |
299 equalTo("text")); | 303 "text"); |
300 | 304 |
301 // Fake tap on non-text. | 305 // Fake tap on non-text. |
302 mockTapEmptySpace(); | 306 mockTapEmptySpace(); |
303 | 307 |
304 assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); | 308 Assert.assertEquals(mPanelManager.getRequestPanelShowCount(), 1); |
305 assertThat(mPanelManager.getPanelHideCount(), is(1)); | 309 Assert.assertEquals(mPanelManager.getPanelHideCount(), 1); |
306 assertNull(mContextualSearchManager.getSelectionController().getSelected
Text()); | 310 Assert.assertNull(mContextualSearchManager.getSelectionController().getS
electedText()); |
307 } | 311 } |
308 | 312 |
309 /** | 313 /** |
310 * Tests that a Tap gesture followed by tapping empty space closes the panel
. | 314 * Tests that a Tap gesture followed by tapping empty space closes the panel
. |
311 */ | 315 */ |
| 316 @Test |
312 @SmallTest | 317 @SmallTest |
313 @Feature({"ContextualSearch"}) | 318 @Feature({"ContextualSearch"}) |
314 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) | 319 @Restriction(Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
315 public void testTextTapFollowedByNonTextTap() { | 320 public void testTextTapFollowedByNonTextTap() { |
316 assertTrue(mPanelManager.getRequestPanelShowCount() == 0); | 321 Assert.assertEquals(mPanelManager.getRequestPanelShowCount(), 0); |
317 | 322 |
318 // Fake a Tap event. | 323 // Fake a Tap event. |
319 mockTapText("text"); | 324 mockTapText("text"); |
320 // Right now the tap-processing sequence will stall at selectWordAroundC
aret, so we need | 325 // Right now the tap-processing sequence will stall at selectWordAroundC
aret, so we need |
321 // to prod it forward with a manual hack: | 326 // to prod it forward with a manual hack: |
322 mockSelectWordAroundCaretAck("text"); | 327 mockSelectWordAroundCaretAck("text"); |
323 assertThat(mPanelManager.getRequestPanelShowCount(), is(1)); | 328 Assert.assertEquals(mPanelManager.getRequestPanelShowCount(), 1); |
324 assertThat(mPanelManager.getPanelHideCount(), is(0)); | 329 Assert.assertEquals(mPanelManager.getPanelHideCount(), 0); |
325 } | 330 } |
326 } | 331 } |
OLD | NEW |