Commit 7eb8b268 authored by Mehran Mahmoudi's avatar Mehran Mahmoudi Committed by Chromium LUCI CQ

[Paint Preview] Fix flaky tests in StartupPaintPreviewTest

This attempts to fix a flake in two tests that use UiAutomator.
It replaces UiAutomator with manual MotionEvent simulations.

Bug: 1165456
Change-Id: I435415fd1a238d8e30e4071c9cb94c0cbaccf5a4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2638396
Commit-Queue: Mehran Mahmoudi <mahmoudi@chromium.org>
Reviewed-by: default avatarCalder Kitagawa <ckitagawa@chromium.org>
Auto-Submit: Mehran Mahmoudi <mahmoudi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845206}
parent d60f10e8
...@@ -7,9 +7,11 @@ package org.chromium.chrome.browser.paint_preview; ...@@ -7,9 +7,11 @@ package org.chromium.chrome.browser.paint_preview;
import static org.chromium.base.test.util.Batch.PER_CLASS; import static org.chromium.base.test.util.Batch.PER_CLASS;
import static org.chromium.chrome.browser.paint_preview.TabbedPaintPreviewTest.assertAttachedAndShown; import static org.chromium.chrome.browser.paint_preview.TabbedPaintPreviewTest.assertAttachedAndShown;
import android.support.test.InstrumentationRegistry; import android.os.SystemClock;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObjectNotFoundException; import android.support.test.uiautomator.UiObjectNotFoundException;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest;
...@@ -91,7 +93,7 @@ public class StartupPaintPreviewTest { ...@@ -91,7 +93,7 @@ public class StartupPaintPreviewTest {
@Test @Test
@MediumTest @MediumTest
public void testSnackbarShow() throws ExecutionException { public void testSnackbarShow() throws ExecutionException, InterruptedException {
Tab tab = sActivityTestRule.getActivity().getActivityTab(); Tab tab = sActivityTestRule.getActivity().getActivityTab();
StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking( StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking(
() -> new StartupPaintPreview(tab, null, null, null, null)); () -> new StartupPaintPreview(tab, null, null, null, null));
...@@ -103,24 +105,23 @@ public class StartupPaintPreviewTest { ...@@ -103,24 +105,23 @@ public class StartupPaintPreviewTest {
// or when users longpress. // or when users longpress.
SnackbarManager snackbarManager = sActivityTestRule.getActivity().getSnackbarManager(); SnackbarManager snackbarManager = sActivityTestRule.getActivity().getSnackbarManager();
assertSnackbarVisibility(snackbarManager, false); assertSnackbarVisibility(snackbarManager, false);
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); View view = tabbedPaintPreview.getViewForTesting();
int centerX = uiDevice.getDisplayWidth() / 2;
int centerY = uiDevice.getDisplayHeight() / 2;
// First tap. // First tap.
uiDevice.click(centerX, centerY); simulateTap(view, view.getWidth() / 2f, view.getHeight() / 2f);
assertSnackbarVisibility(snackbarManager, false); assertSnackbarVisibility(snackbarManager, false);
// Second tap. // Second tap.
uiDevice.click(centerX, centerY); simulateTap(view, view.getWidth() / 2f, view.getHeight() / 2f);
assertSnackbarVisibility(snackbarManager, false); assertSnackbarVisibility(snackbarManager, false);
// Third tap. // Third tap.
uiDevice.click(centerX, centerY); simulateTap(view, view.getWidth() / 2f, view.getHeight() / 2f);
assertSnackbarVisibility(snackbarManager, true); assertSnackbarVisibility(snackbarManager, true);
TestThreadUtils.runOnUiThreadBlocking(snackbarManager::dismissAllSnackbars); TestThreadUtils.runOnUiThreadBlocking(snackbarManager::dismissAllSnackbars);
assertSnackbarVisibility(snackbarManager, false); assertSnackbarVisibility(snackbarManager, false);
// Simulate long press. // Simulate long press.
uiDevice.swipe(centerX, centerY, centerX, centerY, 400); simulateLongPress(view, view.getWidth() / 2f, view.getHeight() / 2f);
assertSnackbarVisibility(snackbarManager, true); assertSnackbarVisibility(snackbarManager, true);
} }
...@@ -175,21 +176,19 @@ public class StartupPaintPreviewTest { ...@@ -175,21 +176,19 @@ public class StartupPaintPreviewTest {
*/ */
@Test @Test
@MediumTest @MediumTest
public void testRemoveOnActionbarClick() throws ExecutionException, UiObjectNotFoundException { public void testRemoveOnActionbarClick() throws ExecutionException, InterruptedException {
Tab tab = sActivityTestRule.getActivity().getActivityTab(); Tab tab = sActivityTestRule.getActivity().getActivityTab();
StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking( StartupPaintPreview startupPaintPreview = TestThreadUtils.runOnUiThreadBlocking(
() -> new StartupPaintPreview(tab, null, null, null, null)); () -> new StartupPaintPreview(tab, null, null, null, null));
TabbedPaintPreview tabbedPaintPreview = TabbedPaintPreview tabbedPaintPreview =
TestThreadUtils.runOnUiThreadBlocking(() -> TabbedPaintPreview.get(tab)); TestThreadUtils.runOnUiThreadBlocking(() -> TabbedPaintPreview.get(tab));
CallbackHelper dismissCallback = new CallbackHelper(); CallbackHelper dismissCallback = new CallbackHelper();
UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
// Should be removed on actionbar click. // Should be removed on SnackBar click.
showAndWaitForInflation(startupPaintPreview, tabbedPaintPreview, dismissCallback); showAndWaitForInflation(startupPaintPreview, tabbedPaintPreview, dismissCallback);
SnackbarManager snackbarManager = sActivityTestRule.getActivity().getSnackbarManager(); SnackbarManager snackbarManager = sActivityTestRule.getActivity().getSnackbarManager();
int centerX = uiDevice.getDisplayWidth() / 2; View view = tabbedPaintPreview.getViewForTesting();
int centerY = uiDevice.getDisplayHeight() / 2; simulateLongPress(view, view.getWidth() / 2f, view.getHeight() / 2f);
uiDevice.swipe(centerX, centerY, centerX, centerY, 400);
assertSnackbarVisibility(snackbarManager, true); assertSnackbarVisibility(snackbarManager, true);
TestThreadUtils.runOnUiThreadBlocking(()-> TestThreadUtils.runOnUiThreadBlocking(()->
snackbarManager.getCurrentSnackbarForTesting().getController().onAction(null)); snackbarManager.getCurrentSnackbarForTesting().getController().onAction(null));
...@@ -238,4 +237,26 @@ public class StartupPaintPreviewTest { ...@@ -238,4 +237,26 @@ public class StartupPaintPreviewTest {
&& ((ViewGroup) tabbedPaintPreview.getViewForTesting()).getChildCount() > 0, && ((ViewGroup) tabbedPaintPreview.getViewForTesting()).getChildCount() > 0,
"TabbedPaintPreview either doesn't have a view or a view with 0 children."); "TabbedPaintPreview either doesn't have a view or a view with 0 children.");
} }
private void simulateTap(View view, float x, float y)
throws ExecutionException, InterruptedException {
simulateTapWithDuration(view, x, y, 50);
}
private void simulateLongPress(View view, float x, float y)
throws ExecutionException, InterruptedException {
simulateTapWithDuration(view, x, y, ViewConfiguration.getLongPressTimeout() + 100);
}
private void simulateTapWithDuration(View view, float x, float y, long holdDurationMs)
throws ExecutionException, InterruptedException {
long downTime = SystemClock.uptimeMillis();
MotionEvent down = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
TestThreadUtils.runOnUiThreadBlocking(() -> view.dispatchTouchEvent(down));
Thread.sleep(holdDurationMs);
MotionEvent up = MotionEvent.obtain(
downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
TestThreadUtils.runOnUiThreadBlocking(() -> view.dispatchTouchEvent(up));
}
} }
...@@ -87,9 +87,5 @@ ...@@ -87,9 +87,5 @@
# crbug.com/1165449 # crbug.com/1165449
-org.chromium.chrome.browser.firstrun.TosAndUmaFirstRunFragmentWithEnterpriseSupportTest.testAcceptTosWithoutCrashUpload -org.chromium.chrome.browser.firstrun.TosAndUmaFirstRunFragmentWithEnterpriseSupportTest.testAcceptTosWithoutCrashUpload
# crbug.com/1165456
-org.chromium.chrome.browser.paint_preview.StartupPaintPreviewTest.testRemoveOnActionbarClick
-org.chromium.chrome.browser.paint_preview.StartupPaintPreviewTest.testSnackbarShow
# crbug.com/1165459 # crbug.com/1165459
-org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsEntryTest.testCaptured -org.chromium.chrome.browser.share.long_screenshots.LongScreenshotsEntryTest.testCaptured
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