| Index: chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java
|
| diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61106707fa4252e5b9a999be2998d62c121df877
|
| --- /dev/null
|
| +++ b/chrome/android/junit/src/org/chromium/chrome/browser/contextmenu/ChromeContextMenuPopulatorTest.java
|
| @@ -0,0 +1,162 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.contextmenu;
|
| +
|
| +import static org.mockito.Mockito.doReturn;
|
| +
|
| +import android.util.Pair;
|
| +
|
| +import org.hamcrest.Matchers;
|
| +import org.junit.Assert;
|
| +import org.junit.Before;
|
| +import org.junit.Rule;
|
| +import org.junit.Test;
|
| +import org.junit.runner.RunWith;
|
| +import org.mockito.Mock;
|
| +import org.mockito.Mockito;
|
| +import org.mockito.MockitoAnnotations;
|
| +import org.robolectric.RuntimeEnvironment;
|
| +import org.robolectric.annotation.Config;
|
| +
|
| +import org.chromium.base.ContextUtils;
|
| +import org.chromium.chrome.browser.ChromeFeatureList;
|
| +import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuMode;
|
| +import org.chromium.chrome.browser.firstrun.FirstRunStatus;
|
| +import org.chromium.chrome.browser.search_engines.TemplateUrlService;
|
| +import org.chromium.chrome.test.util.browser.Features;
|
| +import org.chromium.testing.local.LocalRobolectricTestRunner;
|
| +
|
| +import java.util.ArrayList;
|
| +import java.util.List;
|
| +
|
| +/**
|
| + * Unit tests for the context menu logic of Chrome.
|
| + */
|
| +@RunWith(LocalRobolectricTestRunner.class)
|
| +@Config(manifest = Config.NONE)
|
| +@Features(@Features.Register(value = ChromeFeatureList.CUSTOM_CONTEXT_MENU, enabled = false))
|
| +public class ChromeContextMenuPopulatorTest {
|
| + private static final String PAGE_URL = "http://www.blah.com";
|
| + private static final String LINK_URL = "http://www.blah.com/other_blah";
|
| + private static final String LINK_TEXT = "BLAH!";
|
| + private static final String IMAGE_SRC_URL = "http://www.blah.com/image.jpg";
|
| + private static final String IMAGE_TITLE_TEXT = "IMAGE!";
|
| +
|
| + @Rule
|
| + public Features.Processor mFeaturesProcessor = new Features.Processor();
|
| +
|
| + @Mock
|
| + private ContextMenuItemDelegate mItemDelegate;
|
| + @Mock
|
| + private TemplateUrlService mTemplateUrlService;
|
| +
|
| + private ChromeContextMenuPopulator mPopulator;
|
| +
|
| + @Before
|
| + public void setUp() throws Exception {
|
| + MockitoAnnotations.initMocks(this);
|
| + ContextUtils.initApplicationContextForTests(RuntimeEnvironment.application);
|
| +
|
| + doReturn(PAGE_URL).when(mItemDelegate).getPageUrl();
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.NORMAL_MODE);
|
| + }
|
| +
|
| + private void initializePopulator(@ContextMenuMode int mode) {
|
| + mPopulator = Mockito.spy(new ChromeContextMenuPopulator(mItemDelegate, mode));
|
| + doReturn(true).when(mPopulator).isAcceptedScheme(Mockito.anyString());
|
| + doReturn(true).when(mPopulator).isDownloadableScheme(Mockito.anyString());
|
| + doReturn(mTemplateUrlService).when(mPopulator).getTemplateUrlService();
|
| + }
|
| +
|
| + @Test
|
| + public void testBeforeFRE_Link() {
|
| + FirstRunStatus.setFirstRunFlowComplete(false);
|
| +
|
| + final ContextMenuParams contextMenuParams = createLinkContextParams();
|
| +
|
| + List<ContextMenuItem> enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems,
|
| + Matchers.containsInAnyOrder(
|
| + ContextMenuItem.COPY_LINK_ADDRESS, ContextMenuItem.COPY_LINK_TEXT));
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.CUSTOM_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems,
|
| + Matchers.containsInAnyOrder(
|
| + ContextMenuItem.COPY_LINK_ADDRESS, ContextMenuItem.COPY_LINK_TEXT));
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.FULLSCREEN_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems,
|
| + Matchers.containsInAnyOrder(
|
| + ContextMenuItem.COPY_LINK_ADDRESS, ContextMenuItem.COPY_LINK_TEXT));
|
| + }
|
| +
|
| + @Test
|
| + public void testBeforeFRE_Image() {
|
| + FirstRunStatus.setFirstRunFlowComplete(false);
|
| +
|
| + final ContextMenuParams contextMenuParams = createImageContextParams();
|
| +
|
| + List<ContextMenuItem> enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems, Matchers.empty());
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.CUSTOM_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems, Matchers.empty());
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.FULLSCREEN_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(enabledItems, Matchers.empty());
|
| + }
|
| +
|
| + @Test
|
| + public void testBeforeFRE_ImageLink() {
|
| + FirstRunStatus.setFirstRunFlowComplete(false);
|
| +
|
| + final ContextMenuParams contextMenuParams = createImageLinkContextParams();
|
| +
|
| + List<ContextMenuItem> enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(
|
| + enabledItems, Matchers.containsInAnyOrder(ContextMenuItem.COPY_LINK_ADDRESS));
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.CUSTOM_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(
|
| + enabledItems, Matchers.containsInAnyOrder(ContextMenuItem.COPY_LINK_ADDRESS));
|
| +
|
| + initializePopulator(ChromeContextMenuPopulator.FULLSCREEN_TAB_MODE);
|
| + enabledItems = getEnabledItems(contextMenuParams);
|
| + Assert.assertThat(
|
| + enabledItems, Matchers.containsInAnyOrder(ContextMenuItem.COPY_LINK_ADDRESS));
|
| + }
|
| +
|
| + private List<ContextMenuItem> getEnabledItems(ContextMenuParams params) {
|
| + List<Pair<Integer, List<ContextMenuItem>>> contextMenuState =
|
| + mPopulator.buildContextMenu(null, RuntimeEnvironment.application, params);
|
| +
|
| + List<ContextMenuItem> enabledItems = new ArrayList<>();
|
| + for (int i = 0; i < contextMenuState.size(); i++) {
|
| + enabledItems.addAll(contextMenuState.get(i).second);
|
| + }
|
| + return enabledItems;
|
| + }
|
| +
|
| + private static ContextMenuParams createLinkContextParams() {
|
| + return new ContextMenuParams(
|
| + 0, PAGE_URL, LINK_URL, LINK_TEXT, "", "", "", false, null, false);
|
| + }
|
| +
|
| + private static ContextMenuParams createImageContextParams() {
|
| + return new ContextMenuParams(ContextMenuParams.MediaType.MEDIA_TYPE_IMAGE, PAGE_URL, "", "",
|
| + IMAGE_SRC_URL, IMAGE_TITLE_TEXT, "", false, null, true);
|
| + }
|
| +
|
| + private static ContextMenuParams createImageLinkContextParams() {
|
| + return new ContextMenuParams(ContextMenuParams.MediaType.MEDIA_TYPE_IMAGE, PAGE_URL,
|
| + PAGE_URL, LINK_URL, IMAGE_SRC_URL, IMAGE_TITLE_TEXT, "", false, null, true);
|
| + }
|
| +}
|
|
|