From 384572aeb4577efc40a31c33052e394548a94e72 Mon Sep 17 00:00:00 2001 From: zqzhang Date: Mon, 21 Mar 2016 07:32:46 -0700 Subject: [MediaRouter, Android] Marking MediaRouterIntegrationTest as non-manual The MediaRouterIntegrationTests (instrumentation tests) fail on internal bots. The fake devices do not show up in the dialog. This CL suppresses the device not found failure, and re-enable the tests. More logging is added to see what is going on when the tests fail. BUG=587870 Review URL: https://codereview.chromium.org/1800653002 Cr-Commit-Position: refs/heads/master@{#382280} --- .../chrome/browser/media/RouterTestUtils.java | 67 +++++++--- .../media/router/MediaRouterIntegrationTest.java | 141 ++++++++++++++------- 2 files changed, 146 insertions(+), 62 deletions(-) (limited to 'chrome/android/javatests') diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/RouterTestUtils.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/RouterTestUtils.java index 13d5242..88db644 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/RouterTestUtils.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/RouterTestUtils.java @@ -4,6 +4,7 @@ package org.chromium.chrome.browser.media; +import android.app.Dialog; import android.app.Instrumentation; import android.os.SystemClock; import android.support.v4.app.DialogFragment; @@ -11,6 +12,7 @@ import android.support.v4.app.FragmentManager; import android.view.MotionEvent; import android.view.View; +import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.chrome.R; import org.chromium.chrome.browser.ChromeActivity; @@ -25,34 +27,63 @@ import java.util.concurrent.Callable; * Test utils shared by MediaRouter and MediaRemote. */ public class RouterTestUtils { + private static final String TAG = "RouterTestUtils"; + public static View waitForRouteButton( final ChromeActivity activity, final String chromecastName, int maxTimeoutMs, int intervalMs) { return waitForView(new Callable() { - @Override - public View call() { - DialogFragment mediaRouteListFragment = getDialogFragment(activity); - if (mediaRouteListFragment == null || mediaRouteListFragment.getDialog() == null) { - return null; - } - View mediaRouteList = - mediaRouteListFragment.getDialog().findViewById(R.id.mr_chooser_list); - if (mediaRouteList == null) return null; - ArrayList routesWanted = new ArrayList(); - mediaRouteList.findViewsWithText(routesWanted, chromecastName, - View.FIND_VIEWS_WITH_TEXT); - if (routesWanted.size() == 0) return null; + @Override + public View call() { + Dialog mediaRouteListDialog = getDialog(activity); + if (mediaRouteListDialog == null) { + Log.w(TAG, "Cannot find choose device dialog"); + return null; + } + View mediaRouteList = + mediaRouteListDialog.findViewById(R.id.mr_chooser_list); + if (mediaRouteList == null) { + Log.w(TAG, "Cannot find device list"); + return null; + } + ArrayList routesWanted = new ArrayList(); + mediaRouteList.findViewsWithText(routesWanted, chromecastName, + View.FIND_VIEWS_WITH_TEXT); + if (routesWanted.size() == 0) { + Log.w(TAG, "Cannot find wanted device"); + return null; + } - return routesWanted.get(0); - } + return routesWanted.get(0); + } }, maxTimeoutMs, intervalMs); } - public static DialogFragment getDialogFragment(ChromeActivity activity) { + public static Dialog waitForDialog( + final ChromeActivity activity, + int maxTimeoutMs, int intervalMs) { + try { + CriteriaHelper.pollUiThread(new Criteria() { + @Override + public boolean isSatisfied() { + try { + return getDialog(activity) != null; + } catch (Exception e) { + return false; + } + } + }, maxTimeoutMs, intervalMs); + return getDialog(activity); + } catch (Exception e) { + return null; + } + } + + public static Dialog getDialog(ChromeActivity activity) { FragmentManager fm = activity.getSupportFragmentManager(); if (fm == null) return null; - return (DialogFragment) fm.findFragmentByTag( - "android.support.v7.mediarouter:MediaRouteChooserDialogFragment"); + return ((DialogFragment) fm.findFragmentByTag( + "android.support.v7.mediarouter:MediaRouteChooserDialogFragment")).getDialog(); } public static View waitForView( diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java index ecefb69..43789fd 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/router/MediaRouterIntegrationTest.java @@ -4,14 +4,16 @@ package org.chromium.chrome.browser.media.router; +import android.app.Dialog; import android.os.Environment; import android.os.StrictMode; +import android.test.suitebuilder.annotation.LargeTest; import android.view.View; +import org.chromium.base.Log; import org.chromium.base.ThreadUtils; import org.chromium.base.test.util.CommandLineFlags; -import org.chromium.base.test.util.EnormousTest; -import org.chromium.base.test.util.Manual; +import org.chromium.base.test.util.Feature; import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.media.RouterTestUtils; import org.chromium.chrome.test.ChromeActivityTestCaseBase; @@ -35,6 +37,8 @@ import java.util.concurrent.TimeoutException; @CommandLineFlags.Add(ContentSwitches.DISABLE_GESTURE_REQUIREMENT_FOR_PRESENTATION) public class MediaRouterIntegrationTest extends ChromeActivityTestCaseBase { + private static final String TAG = "MediaRouterTest"; + private static final String TEST_PAGE = "/chrome/test/media_router/resources/basic_test.html?__is_android__=true"; private static final String TEST_PAGE_RECONNECT_FAIL = @@ -55,7 +59,7 @@ public class MediaRouterIntegrationTest extends ChromeActivityTestCaseBase