Commit 1f62c926 authored by Lijin Shen's avatar Lijin Shen Committed by Commit Bot

Tests for tab switcher long-press menu

This CL includes instrumentation tests and render tests for
the tab switcher long-press menu.

Bug: 994364
Change-Id: I47014f00c41005f38517cbe5ed8884cef1ab5daf
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1769308
Commit-Queue: Lijin Shen <lazzzis@google.com>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#691769}
parent c05d3e24
...@@ -492,6 +492,8 @@ chrome_test_java_sources = [ ...@@ -492,6 +492,8 @@ chrome_test_java_sources = [
"javatests/src/org/chromium/chrome/browser/toolbar/LocationBarModelTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/LocationBarModelTest.java",
"javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarTest.java",
"javatests/src/org/chromium/chrome/browser/toolbar/top/BrandColorTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/top/BrandColorTest.java",
"javatests/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherActionMenuTest.java",
"javatests/src/org/chromium/chrome/browser/toolbar/top/TabSwitcherActionMenuRenderTest.java",
"javatests/src/org/chromium/chrome/browser/translate/TranslateCompactInfoBarTest.java", "javatests/src/org/chromium/chrome/browser/translate/TranslateCompactInfoBarTest.java",
"javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java", "javatests/src/org/chromium/chrome/browser/translate/TranslateOptionsTest.java",
"javatests/src/org/chromium/chrome/browser/usage_stats/TabSuspensionTest.java", "javatests/src/org/chromium/chrome/browser/usage_stats/TabSuspensionTest.java",
......
...@@ -17,6 +17,7 @@ import android.widget.PopupWindow; ...@@ -17,6 +17,7 @@ import android.widget.PopupWindow;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
...@@ -43,6 +44,7 @@ public class TabSwitcherActionMenuCoordinator { ...@@ -43,6 +44,7 @@ public class TabSwitcherActionMenuCoordinator {
private ListView mListView; private ListView mListView;
private AnchoredPopupWindow mPopup; private AnchoredPopupWindow mPopup;
private View mContentView;
/** /**
* @param onItemClicked The clicked listener handling clicks on TabSwitcherActionMenu * @param onItemClicked The clicked listener handling clicks on TabSwitcherActionMenu
...@@ -78,11 +80,12 @@ public class TabSwitcherActionMenuCoordinator { ...@@ -78,11 +80,12 @@ public class TabSwitcherActionMenuCoordinator {
* @param listItems The menu item models * @param listItems The menu item models
* @param onItemClicked The clicked listener handling clicks on TabSwitcherActionMenu * @param onItemClicked The clicked listener handling clicks on TabSwitcherActionMenu
*/ */
private void displayMenu(final Context context, View anchorView, ModelList listItems, @VisibleForTesting
public void displayMenu(final Context context, View anchorView, ModelList listItems,
Callback<Integer> onItemClicked) { Callback<Integer> onItemClicked) {
final View contentView = LayoutInflater.from(context).inflate( mContentView = LayoutInflater.from(context).inflate(
R.layout.tab_switcher_action_menu_layout, null); R.layout.tab_switcher_action_menu_layout, null);
mListView = (ListView) contentView.findViewById(R.id.tab_switcher_action_menu_list); mListView = (ListView) mContentView.findViewById(R.id.tab_switcher_action_menu_list);
ModelListAdapter adapter = new ModelListAdapter(listItems) { ModelListAdapter adapter = new ModelListAdapter(listItems) {
@Override @Override
...@@ -119,7 +122,7 @@ public class TabSwitcherActionMenuCoordinator { ...@@ -119,7 +122,7 @@ public class TabSwitcherActionMenuCoordinator {
// clang-format on // clang-format on
mListView.setOnItemClickListener((p, v, pos, id) -> { mListView.setOnItemClickListener((p, v, pos, id) -> {
onItemClicked.onResult((int) id); if (onItemClicked != null) onItemClicked.onResult((int) id);
mPopup.dismiss(); mPopup.dismiss();
}); });
...@@ -133,7 +136,7 @@ public class TabSwitcherActionMenuCoordinator { ...@@ -133,7 +136,7 @@ public class TabSwitcherActionMenuCoordinator {
mPopup = new AnchoredPopupWindow(context, anchorView, mPopup = new AnchoredPopupWindow(context, anchorView,
ApiCompatibilityUtils.getDrawable( ApiCompatibilityUtils.getDrawable(
context.getResources(), R.drawable.popup_bg_tinted), context.getResources(), R.drawable.popup_bg_tinted),
contentView, rectProvider); mContentView, rectProvider);
mPopup.setFocusable(true); mPopup.setFocusable(true);
mPopup.setAnimationStyle(R.style.OverflowMenuAnim); mPopup.setAnimationStyle(R.style.OverflowMenuAnim);
...@@ -143,7 +146,13 @@ public class TabSwitcherActionMenuCoordinator { ...@@ -143,7 +146,13 @@ public class TabSwitcherActionMenuCoordinator {
mPopup.show(); mPopup.show();
} }
private ModelList buildMenuItems(Context context) { @VisibleForTesting
public View getContentView() {
return mContentView;
}
@VisibleForTesting
public ModelList buildMenuItems(Context context) {
ModelList itemList = new ModelList(); ModelList itemList = new ModelList();
itemList.add(new ListItem(ListItemType.MENU_ITEM, itemList.add(new ListItem(ListItemType.MENU_ITEM,
buildPropertyModel( buildPropertyModel(
......
// Copyright 2019 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.toolbar.top;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
import android.app.Activity;
import android.support.test.filters.MediumTest;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.FrameLayout;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.test.params.ParameterAnnotations;
import org.chromium.base.test.params.ParameterSet;
import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.night_mode.NightModeTestUtils;
import org.chromium.chrome.browser.toolbar.top.tab_switcher_action_menu.TabSwitcherActionMenuCoordinator;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
import org.chromium.chrome.test.util.RenderTestRule;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import java.io.IOException;
import java.util.List;
/**
* Render tests for tab switcher long-press menu popup.
*/
@RunWith(ParameterizedRunner.class)
@ParameterAnnotations.UseRunnerDelegate(ChromeJUnit4RunnerDelegate.class)
public class TabSwitcherActionMenuRenderTest extends DummyUiActivityTestCase {
@ParameterAnnotations.ClassParameter
private static List<ParameterSet> sClassParams =
new NightModeTestUtils.NightModeParams().getParameters();
@Rule
public RenderTestRule mRenderTestRule =
new RenderTestRule("chrome/test/data/android/render_tests");
private View mView;
public TabSwitcherActionMenuRenderTest(boolean nightModeEnabled) {
NightModeTestUtils.setUpNightModeForDummyUiActivity(nightModeEnabled);
mRenderTestRule.setNightModeEnabled(nightModeEnabled);
}
@Override
public void setUpTest() throws Exception {
super.setUpTest();
TestThreadUtils.runOnUiThreadBlocking(() -> {
Activity activity = getActivity();
FrameLayout anchorView = new FrameLayout(activity);
TabSwitcherActionMenuCoordinator coordinator = new TabSwitcherActionMenuCoordinator();
coordinator.displayMenu(
activity, anchorView, coordinator.buildMenuItems(activity), null);
mView = coordinator.getContentView();
((ViewGroup) mView.getParent()).removeView(mView);
int popupWidth = activity.getResources().getDimensionPixelSize(R.dimen.menu_width);
mView.setBackground(ApiCompatibilityUtils.getDrawable(
activity.getResources(), R.drawable.popup_bg_tinted));
activity.setContentView(mView, new LayoutParams(popupWidth, WRAP_CONTENT));
});
}
@Override
public void tearDownTest() throws Exception {
NightModeTestUtils.tearDownNightModeForDummyUiActivity();
super.tearDownTest();
}
@Test
@MediumTest
@Feature({"RenderTest"})
public void testRender_TabSwitcherActionMenu() throws IOException {
mRenderTestRule.render(mView, "tab_switcher_action_menu");
}
}
// Copyright 2019 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.toolbar.top;
import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.longClick;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;
import android.support.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.ui.DummyUiActivityTestCase;
import org.chromium.chrome.test.util.browser.Features;
/**
* Instrumentation tests for tab switcher long-press menu popup
*/
@RunWith(ChromeJUnit4ClassRunner.class)
// clang-format off
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
@Features.EnableFeatures(ChromeFeatureList.TAB_SWITCHER_LONGPRESS_MENU)
public class TabSwitcherActionMenuTest extends DummyUiActivityTestCase {
// clang-format on
@Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule();
@Before
public void setUp() throws Exception {
mActivityTestRule.startMainActivityOnBlankPage();
}
@Test
@SmallTest
public void testCloseTab() {
int tabCount = mActivityTestRule.getActivity().getCurrentTabModel().getCount();
onView(withId(R.id.tab_switcher_button)).perform(longClick());
// withId does not work, cause android:id is not set on the view
onView(withText(R.string.close_tab)).check(matches(isDisplayed()));
onView(withText(R.string.close_tab)).perform(click());
Assert.assertEquals(
tabCount - 1, mActivityTestRule.getActivity().getCurrentTabModel().getCount());
}
@Test
@SmallTest
public void testOpenNewTab() {
int tabCount = mActivityTestRule.getActivity().getCurrentTabModel().getCount();
onView(withId(R.id.tab_switcher_button)).perform(longClick());
onView(withText(R.string.menu_new_tab)).check(matches(isDisplayed()));
onView(withText(R.string.menu_new_tab)).perform(click());
Assert.assertEquals(
tabCount + 1, mActivityTestRule.getActivity().getCurrentTabModel().getCount());
}
@Test
@SmallTest
public void testOpenNewIncognitoTab() {
onView(withId(R.id.tab_switcher_button)).perform(longClick());
onView(withText(R.string.menu_new_incognito_tab)).check(matches(isDisplayed()));
onView(withText(R.string.menu_new_incognito_tab)).perform(click());
// only one incognito tab opened
Assert.assertEquals(1, mActivityTestRule.getActivity().getCurrentTabModel().getCount());
Assert.assertTrue(
mActivityTestRule.getActivity().getTabModelSelector().isIncognitoSelected());
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment