Commit 300060f5 authored by Yue Zhang's avatar Yue Zhang Committed by Commit Bot

Add tests for swipe-to-dismiss in tab grid layouts

Bug: 983170, 1060349
Change-Id: I196ee6700893a69f816e31b7b14a7f9285854f32
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2097127
Commit-Queue: Yue Zhang <yuezhanggg@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749470}
parent be36800c
......@@ -26,8 +26,10 @@ import static org.junit.Assert.assertTrue;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.areAnimatorsEnabled;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.closeFirstTabInTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.createTabGroup;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.createTabs;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabModelTabCount;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
......@@ -113,6 +115,8 @@ import org.chromium.ui.widget.ViewLookupCachingFrameLayout;
import java.io.FileOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
......@@ -1401,6 +1405,39 @@ public class StartSurfaceLayoutTest {
.perform(click());
}
@Test
@MediumTest
// clang-format off
@CommandLineFlags.Add({BASE_PARAMS})
@Features.EnableFeatures({ChromeFeatureList.TAB_GROUPS_ANDROID})
public void testSwipeToDismiss_GTS() throws Exception {
// clang-format on
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
// Create 3 tabs and merge the first two tabs into one group.
createTabs(cta, false, 3);
enterTabSwitcher(cta);
TabModel normalTabModel = cta.getTabModelSelector().getModel(false);
List<Tab> tabGroup = new ArrayList<>(
Arrays.asList(normalTabModel.getTabAt(0), normalTabModel.getTabAt(1)));
createTabGroup(cta, false, tabGroup);
verifyTabSwitcherCardCount(cta, 2);
verifyTabModelTabCount(cta, 3, 0);
// Swipe to dismiss a single tab card.
onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view)))
.perform(RecyclerViewActions.actionOnItemAtPosition(
1, getSwipeToDismissAction(false)));
verifyTabSwitcherCardCount(cta, 1);
verifyTabModelTabCount(cta, 2, 0);
// Swipe to dismiss a tab group card.
onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view)))
.perform(RecyclerViewActions.actionOnItemAtPosition(
0, getSwipeToDismissAction(true)));
verifyTabSwitcherCardCount(cta, 0);
verifyTabModelTabCount(cta, 0, 0);
}
private static class TabCountAssertion implements ViewAssertion {
private int mExpectedCount;
......
......@@ -32,6 +32,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.c
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.closeFirstTabInDialog;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.createTabs;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.isShowingPopupTabList;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.mergeAllNormalTabsToAGroup;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyShowingPopupTabList;
......@@ -41,6 +42,7 @@ import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.v
import android.content.Intent;
import android.graphics.Rect;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.contrib.RecyclerViewActions;
import android.support.test.espresso.intent.Intents;
import android.support.test.espresso.intent.rule.IntentsTestRule;
import android.support.test.filters.MediumTest;
......@@ -425,6 +427,31 @@ public class TabGridDialogTest {
assertEquals(3, filter.getCount());
}
@Test
@MediumTest
public void testSwipeToDismiss_Dialog() throws InterruptedException {
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
// Create 2 tabs and merge them into one group.
createTabs(cta, false, 2);
enterTabSwitcher(cta);
mergeAllNormalTabsToAGroup(cta);
verifyTabSwitcherCardCount(cta, 1);
openDialogFromTabSwitcherAndVerify(cta, 2);
// Swipe to dismiss two tabs in dialog.
onView((withId(R.id.tab_list_view)))
.inRoot(withDecorView(not(cta.getWindow().getDecorView())))
.perform(RecyclerViewActions.actionOnItemAtPosition(
1, getSwipeToDismissAction(true)));
verifyShowingDialog(cta, 1);
onView((withId(R.id.tab_list_view)))
.inRoot(withDecorView(not(cta.getWindow().getDecorView())))
.perform(RecyclerViewActions.actionOnItemAtPosition(
0, getSwipeToDismissAction(false)));
waitForDialogHidingAnimation(cta);
verifyTabSwitcherCardCount(cta, 0);
}
private void openDialogFromTabSwitcherAndVerify(ChromeTabbedActivity cta, int tabCount) {
clickFirstCardFromTabSwitcher(cta);
CriteriaHelper.pollInstrumentationThread(() -> isDialogShowing(cta));
......
......@@ -22,13 +22,16 @@ import static org.junit.Assert.assertTrue;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.clickScrimToExitDialog;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.closeFirstTabInTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.enterTabSwitcher;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.getSwipeToDismissAction;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.rotateDeviceToOrientation;
import static org.chromium.chrome.browser.tasks.tab_management.TabUiTestHelper.verifyTabSwitcherCardCount;
import android.content.res.Configuration;
import android.support.test.InstrumentationRegistry;
import android.support.test.espresso.NoMatchingRootException;
import android.support.test.espresso.contrib.RecyclerViewActions;
import android.support.test.filters.MediumTest;
import android.support.v7.widget.RecyclerView;
import android.widget.TextView;
import org.junit.After;
......@@ -221,6 +224,23 @@ public class TabGridIphTest {
onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed()));
}
@Test
@MediumTest
public void testSwipeToDismiss_IPH() throws InterruptedException {
ChromeTabbedActivity cta = mActivityTestRule.getActivity();
enterTabSwitcher(cta);
onView(withId(R.id.tab_grid_message_item)).check(matches(isDisplayed()));
RecyclerView.ViewHolder viewHolder = ((RecyclerView) cta.findViewById(R.id.tab_list_view))
.findViewHolderForAdapterPosition(1);
assertEquals(TabProperties.UiType.MESSAGE, viewHolder.getItemViewType());
onView(allOf(withParent(withId(R.id.compositor_view_holder)), withId(R.id.tab_list_view)))
.perform(RecyclerViewActions.actionOnItemAtPosition(
1, getSwipeToDismissAction(true)));
onView(withId(R.id.tab_grid_message_item)).check(doesNotExist());
}
private void verifyIphDialogShowing(ChromeTabbedActivity cta) {
onView(withId(R.id.iph_dialog))
.inRoot(withDecorView(not(cta.getWindow().getDecorView())))
......
......@@ -36,6 +36,10 @@ import android.support.test.espresso.Root;
import android.support.test.espresso.UiController;
import android.support.test.espresso.ViewAction;
import android.support.test.espresso.ViewAssertion;
import android.support.test.espresso.action.GeneralLocation;
import android.support.test.espresso.action.GeneralSwipeAction;
import android.support.test.espresso.action.Press;
import android.support.test.espresso.action.Swipe;
import android.support.test.espresso.contrib.RecyclerViewActions;
import android.view.View;
......@@ -308,7 +312,8 @@ public class TabUiTestHelper {
* @param isIncognito Whether the group is in normal model or incognito model.
* @param tabs A list of {@link Tab} to create group.
*/
static void createTabGroup(ChromeTabbedActivity cta, boolean isIncognito, List<Tab> tabs) {
public static void createTabGroup(
ChromeTabbedActivity cta, boolean isIncognito, List<Tab> tabs) {
if (tabs.size() == 0) return;
assert cta.getTabModelSelector().getTabModelFilterProvider().getCurrentTabModelFilter()
instanceof TabGroupModelFilter;
......@@ -558,6 +563,22 @@ public class TabUiTestHelper {
return hasClicked;
}
/**
* Get the {@link GeneralSwipeAction} used to perform a swipe-to-dismiss action in tab grid
* layout.
* @param isLeftToRight decides whether the swipe is from left to right or from right to left.
* @return {@link GeneralSwipeAction} to perform swipe-to-dismiss.
*/
public static GeneralSwipeAction getSwipeToDismissAction(boolean isLeftToRight) {
if (isLeftToRight) {
return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_LEFT,
GeneralLocation.CENTER_RIGHT, Press.FINGER);
} else {
return new GeneralSwipeAction(Swipe.FAST, GeneralLocation.CENTER_RIGHT,
GeneralLocation.CENTER_LEFT, Press.FINGER);
}
}
/**
* Implementation of {@link ViewAssertion} to verify the {@link RecyclerView} has correct number
* of children.
......
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