Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(569)

Unified Diff: chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java

Issue 2815453003: Create ChromeActivityTestRule for converting JUnit4 tests (Closed)
Patch Set: nits and rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java
index 725048b20a738a0c80dc3698b1d1cc99e172b3ea..21259b86eeaa3c1771af69ad19f81e3a7d6e54e9 100644
--- a/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java
+++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCaseBase.java
@@ -4,84 +4,32 @@
package org.chromium.chrome.test;
-import android.app.Activity;
import android.app.Instrumentation;
-import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Bundle;
-import android.provider.Browser;
-import android.test.InstrumentationTestRunner;
-import android.text.TextUtils;
import android.view.View;
-import android.widget.ListView;
-
-import org.chromium.base.ActivityState;
-import org.chromium.base.ApplicationStatus;
-import org.chromium.base.ApplicationStatus.ActivityStateListener;
-import org.chromium.base.Log;
-import org.chromium.base.PerfTraceEvent;
-import org.chromium.base.ThreadUtils;
-import org.chromium.base.annotations.SuppressFBWarnings;
+
import org.chromium.base.test.BaseActivityInstrumentationTestCase;
-import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
-import org.chromium.base.test.util.PerfTest;
import org.chromium.base.test.util.parameter.BaseParameter;
-import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeSwitches;
-import org.chromium.chrome.browser.ChromeTabbedActivity;
-import org.chromium.chrome.browser.DeferredStartupHandler;
-import org.chromium.chrome.browser.document.ChromeLauncherActivity;
import org.chromium.chrome.browser.infobar.InfoBar;
-import org.chromium.chrome.browser.ntp.NewTabPage;
-import org.chromium.chrome.browser.omnibox.AutocompleteController;
-import org.chromium.chrome.browser.omnibox.LocationBarLayout;
-import org.chromium.chrome.browser.omnibox.OmniboxResultsAdapter.OmniboxResultItem;
import org.chromium.chrome.browser.omnibox.OmniboxSuggestion;
-import org.chromium.chrome.browser.omnibox.UrlBar;
-import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.preferences.Preferences;
-import org.chromium.chrome.browser.preferences.PreferencesLauncher;
import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
-import org.chromium.chrome.browser.tabmodel.TabModel;
-import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
-import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
-import org.chromium.chrome.browser.tabmodel.TabModelObserver;
+import org.chromium.chrome.test.ChromeActivityTestCommon.ChromeTestCommonCallback;
import org.chromium.chrome.test.util.ApplicationTestUtils;
-import org.chromium.chrome.test.util.ChromeTabUtils;
-import org.chromium.chrome.test.util.MenuUtils;
-import org.chromium.chrome.test.util.NewTabPageTestUtils;
import org.chromium.chrome.test.util.parameters.AddFakeAccountToAppParameter;
import org.chromium.chrome.test.util.parameters.AddFakeAccountToOsParameter;
import org.chromium.chrome.test.util.parameters.AddGoogleAccountToOsParameter;
-import org.chromium.content.browser.test.util.Criteria;
-import org.chromium.content.browser.test.util.CriteriaHelper;
-import org.chromium.content.browser.test.util.JavaScriptUtils;
-import org.chromium.content.browser.test.util.RenderProcessLimit;
import org.chromium.content.browser.test.util.TestTouchUtils;
import org.chromium.content.browser.test.util.TouchCommon;
-import org.chromium.content_public.browser.LoadUrlParams;
-import org.chromium.ui.base.PageTransition;
-
-import java.io.File;
-import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Method;
-import java.util.Calendar;
-import java.util.LinkedList;
+
import java.util.List;
import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Base class for all Chrome instrumentation tests.
@@ -89,72 +37,28 @@ import java.util.concurrent.atomic.AtomicReference;
* See ChromeTabbedActivityTestBase.java for example.
* @param <T> A {@link ChromeActivity} class
*/
-@CommandLineFlags.Add({
- ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
+@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
// Preconnect causes issues with the single-threaded Java test server.
"--disable-features=NetworkPrediction"})
public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
- extends BaseActivityInstrumentationTestCase<T> {
-
- private static final String TAG = "cr_CATestCaseBase";
-
- // The number of ms to wait for the rendering activity to be started.
- protected static final int ACTIVITY_START_TIMEOUT_MS = 1000;
-
- private static final String PERF_ANNOTATION_FORMAT = "**PERFANNOTATION(%s):";
-
- private static final String MEMORY_TRACE_GRAPH_SUFFIX = " - browser PSS";
-
- private static final String PERF_OUTPUT_FILE = "PerfTestData.txt";
-
- private static final long OMNIBOX_FIND_SUGGESTION_TIMEOUT_MS = 10 * 1000;
-
- protected boolean mSkipClearAppData;
- private Thread.UncaughtExceptionHandler mDefaultUncaughtExceptionHandler;
- private Class<T> mChromeActivityClass;
+ extends BaseActivityInstrumentationTestCase<T> implements ChromeTestCommonCallback<T> {
+ private final ChromeActivityTestCommon<T> mTestCommon;
public ChromeActivityTestCaseBase(Class<T> activityClass) {
super(activityClass);
- mChromeActivityClass = activityClass;
- }
-
- private class ChromeUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
- @Override
- public void uncaughtException(Thread t, Throwable e) {
- String stackTrace = android.util.Log.getStackTraceString(e);
- if (e.getClass().getName().endsWith("StrictModeViolation")) {
- stackTrace += "\nSearch logcat for \"StrictMode policy violation\" for full stack.";
- }
- Bundle resultsBundle = new Bundle();
- resultsBundle.putString(InstrumentationTestRunner.REPORT_KEY_NAME_CLASS,
- getClass().getName());
- resultsBundle.putString(InstrumentationTestRunner.REPORT_KEY_NAME_TEST, getName());
- resultsBundle.putString(InstrumentationTestRunner.REPORT_KEY_STACK, stackTrace);
- getInstrumentation().sendStatus(-1, resultsBundle);
- mDefaultUncaughtExceptionHandler.uncaughtException(t, e);
- }
+ mTestCommon = new ChromeActivityTestCommon<>(activityClass, this);
}
@Override
protected void setUp() throws Exception {
super.setUp();
- mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
- Thread.setDefaultUncaughtExceptionHandler(new ChromeUncaughtExceptionHandler());
- ApplicationTestUtils.setUp(getInstrumentation().getTargetContext(), !mSkipClearAppData);
- setActivityInitialTouchMode(false);
-
- // Preload Calendar so that it does not trigger ReadFromDisk Strict mode violations if
- // called on the UI Thread. See https://crbug.com/705477 and https://crbug.com/577185
- Calendar.getInstance();
-
+ mTestCommon.setUp();
startMainActivity();
}
@Override
protected void tearDown() throws Exception {
- ApplicationTestUtils.tearDown(getInstrumentation().getTargetContext());
- Thread.setDefaultUncaughtExceptionHandler(mDefaultUncaughtExceptionHandler);
- super.tearDown();
+ mTestCommon.tearDown();
}
/**
@@ -165,17 +69,18 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
public abstract void startMainActivity() throws InterruptedException;
/**
+ * Return the timeout limit for Chrome activty start in tests
+ */
+ protected static int getActivityStartTimeoutMs() {
+ return ChromeActivityTestCommon.ACTIVITY_START_TIMEOUT_MS;
+ }
+
+ /**
* Matches testString against baseString.
* Returns 0 if there is no match, 1 if an exact match and 2 if a fuzzy match.
*/
protected static int matchUrl(String baseString, String testString) {
- if (baseString.equals(testString)) {
- return 1;
- }
- if (baseString.contains(testString)) {
- return 2;
- }
- return 0;
+ return ChromeActivityTestCommon.matchUrl(baseString, testString);
}
/**
@@ -186,42 +91,12 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* and the activity's main looper has become idle.
*/
protected void startActivityCompletely(Intent intent) {
- final CallbackHelper activityCallback = new CallbackHelper();
- final AtomicReference<T> activityRef = new AtomicReference<>();
- ActivityStateListener stateListener = new ActivityStateListener() {
- @SuppressWarnings("unchecked")
- @Override
- public void onActivityStateChange(Activity activity, int newState) {
- if (newState == ActivityState.RESUMED) {
- if (!mChromeActivityClass.isAssignableFrom(activity.getClass())) {
- return;
- }
-
- activityRef.set((T) activity);
- activityCallback.notifyCalled();
- ApplicationStatus.unregisterActivityStateListener(this);
- }
- }
- };
- ApplicationStatus.registerStateListenerForAllActivities(stateListener);
-
- try {
- getInstrumentation().startActivitySync(intent);
- activityCallback.waitForCallback("Activity did not start as expected", 0);
- T activity = activityRef.get();
- assertNotNull("Activity reference is null.", activity);
- setActivity(activity);
- Log.d(TAG, "startActivityCompletely <<");
- } catch (InterruptedException | TimeoutException e) {
- throw new RuntimeException(e);
- } finally {
- ApplicationStatus.unregisterActivityStateListener(stateListener);
- }
+ mTestCommon.startActivityCompletely(intent);
}
/** Convenience function for {@link ApplicationTestUtils#clearAppData(Context)}. */
protected void clearAppData() {
- ApplicationTestUtils.clearAppData(getInstrumentation().getTargetContext());
+ mTestCommon.clearAppData();
}
/**
@@ -229,12 +104,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* etc. Network predictions are enabled by default.
*/
protected void setNetworkPredictionEnabled(final boolean enabled) {
- getInstrumentation().runOnMainSync(new Runnable() {
- @Override
- public void run() {
- PrefServiceBridge.getInstance().setNetworkPredictionEnabled(enabled);
- }
- });
+ mTestCommon.setNetworkPredictionEnabled(enabled);
}
/**
@@ -245,7 +115,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @param downTime (in ms)
* @see TestTouchUtils
*/
- protected void dragStart(float x, float y, long downTime) {
+ public void dragStart(float x, float y, long downTime) {
TouchCommon.dragStart(getActivity(), x, y, downTime);
}
@@ -261,8 +131,8 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @param downTime (in ms)
* @see TestTouchUtils
*/
- protected void dragTo(float fromX, float toX, float fromY,
- float toY, int stepCount, long downTime) {
+ public void dragTo(
+ float fromX, float toX, float fromY, float toY, int stepCount, long downTime) {
TouchCommon.dragTo(getActivity(), fromX, toX, fromY, toY, stepCount, downTime);
}
@@ -275,7 +145,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @param downTime (in ms)
* @see TestTouchUtils
*/
- protected void dragEnd(float x, float y, long downTime) {
+ public void dragEnd(float x, float y, long downTime) {
TouchCommon.dragEnd(getActivity(), x, y, downTime);
}
@@ -302,15 +172,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @param timeout how long to wait for tasks to complete
*/
public void waitForAsyncTasks(long timeout) throws InterruptedException {
- final Semaphore s = new Semaphore(0);
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... arg0) {
- s.release();
- return null;
- }
- }.execute();
- assertTrue(s.tryAcquire(timeout, TimeUnit.MILLISECONDS));
+ mTestCommon.waitForAsyncTasks(timeout);
}
/**
@@ -321,10 +183,9 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if the page has been
* prerendered. DEFAULT_PAGE_LOAD if it had not.
*/
- public int loadUrl(final String url, long secondsToWait)
+ public int loadUrl(String url, long secondsToWait)
throws IllegalArgumentException, InterruptedException {
- return loadUrlInTab(url, PageTransition.TYPED | PageTransition.FROM_ADDRESS_BAR,
- getActivity().getActivityTab(), secondsToWait);
+ return mTestCommon.loadUrl(url, secondsToWait);
}
/**
@@ -334,9 +195,8 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if the page has been
* prerendered. DEFAULT_PAGE_LOAD if it had not.
*/
- public int loadUrl(final String url) throws IllegalArgumentException, InterruptedException {
- return loadUrlInTab(url, PageTransition.TYPED | PageTransition.FROM_ADDRESS_BAR,
- getActivity().getActivityTab());
+ public int loadUrl(String url) throws IllegalArgumentException, InterruptedException {
+ return mTestCommon.loadUrl(url);
}
/**
@@ -349,25 +209,9 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if the
* page has been prerendered. DEFAULT_PAGE_LOAD if it had not.
*/
- public int loadUrlInTab(final String url, final int pageTransition, final Tab tab,
- long secondsToWait) throws InterruptedException {
- assertNotNull("Cannot load the url in a null tab", tab);
- final AtomicInteger result = new AtomicInteger();
-
- ChromeTabUtils.waitForTabPageLoaded(tab, new Runnable() {
- @Override
- public void run() {
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
- @Override
- public void run() {
- result.set(tab.loadUrl(
- new LoadUrlParams(url, pageTransition)));
- }
- });
- }
- }, secondsToWait);
- getInstrumentation().waitForIdleSync();
- return result.get();
+ public int loadUrlInTab(String url, int pageTransition, Tab tab, long secondsToWait)
+ throws InterruptedException {
+ return mTestCommon.loadUrlInTab(url, pageTransition, tab, secondsToWait);
}
/**
@@ -379,17 +223,16 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @return FULL_PRERENDERED_PAGE_LOAD or PARTIAL_PRERENDERED_PAGE_LOAD if the
* page has been prerendered. DEFAULT_PAGE_LOAD if it had not.
*/
- public int loadUrlInTab(final String url, final int pageTransition, final Tab tab)
- throws InterruptedException {
- return loadUrlInTab(url, pageTransition, tab, CallbackHelper.WAIT_TIMEOUT_SECONDS);
+ public int loadUrlInTab(String url, int pageTransition, Tab tab) throws InterruptedException {
+ return mTestCommon.loadUrlInTab(url, pageTransition, tab);
}
/**
* Load a url in a new tab. The {@link Tab} will pretend to be created from a link.
* @param url The url of the page to load.
*/
- public Tab loadUrlInNewTab(final String url) throws InterruptedException {
- return loadUrlInNewTab(url, false);
+ public Tab loadUrlInNewTab(String url) throws InterruptedException {
+ return mTestCommon.loadUrlInNewTab(url);
}
/**
@@ -399,21 +242,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
public Tab loadUrlInNewTab(final String url, final boolean incognito)
throws InterruptedException {
- Tab tab = null;
- try {
- tab = ThreadUtils.runOnUiThreadBlocking(new Callable<Tab>() {
- @Override
- public Tab call() throws Exception {
- return getActivity().getTabCreator(incognito)
- .launchUrl(url, TabLaunchType.FROM_LINK);
- }
- });
- } catch (ExecutionException e) {
- fail("Failed to create new tab");
- }
- ChromeTabUtils.waitForTabPageLoaded(tab, url);
- getInstrumentation().waitForIdleSync();
- return tab;
+ return mTestCommon.loadUrlInNewTab(url, incognito);
}
/**
@@ -429,10 +258,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected void startMainActivityWithURL(String url) throws InterruptedException {
// Only launch Chrome.
- Intent intent = new Intent(
- TextUtils.isEmpty(url) ? Intent.ACTION_MAIN : Intent.ACTION_VIEW);
- intent.addCategory(Intent.CATEGORY_LAUNCHER);
- startMainActivityFromIntent(intent, url);
+ mTestCommon.startMainActivityWithURL(url);
}
/**
@@ -440,7 +266,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* This is faster and less flakyness-prone than starting on the NTP.
*/
protected void startMainActivityOnBlankPage() throws InterruptedException {
- startMainActivityWithURL("about:blank");
+ mTestCommon.startMainActivityOnBlankPage();
}
/**
@@ -449,11 +275,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected void startMainActivityFromExternalApp(String url, String appId)
throws InterruptedException {
- Intent intent = new Intent(Intent.ACTION_VIEW);
- if (appId != null) {
- intent.putExtra(Browser.EXTRA_APPLICATION_ID, appId);
- }
- startMainActivityFromIntent(intent, url);
+ mTestCommon.startMainActivityFromExternalApp(url, appId);
}
/**
@@ -464,34 +286,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected void startMainActivityFromIntent(Intent intent, String url)
throws InterruptedException {
- prepareUrlIntent(intent, url);
-
- startActivityCompletely(intent);
-
- CriteriaHelper.pollUiThread(new Criteria("Tab never selected/initialized.") {
- @Override
- public boolean isSatisfied() {
- return getActivity().getActivityTab() != null;
- }
- });
- Tab tab = getActivity().getActivityTab();
-
- ChromeTabUtils.waitForTabPageLoaded(tab, (String) null);
-
- if (tab != null && NewTabPage.isNTPUrl(tab.getUrl())) {
- NewTabPageTestUtils.waitForNtpLoaded(tab);
- }
-
- CriteriaHelper.pollUiThread(new Criteria("Deferred startup never completed") {
- @Override
- public boolean isSatisfied() {
- return DeferredStartupHandler.getInstance().isDeferredStartupCompleteForApp();
- }
- });
-
- assertNotNull(tab);
- assertNotNull(tab.getView());
- getInstrumentation().waitForIdleSync();
+ mTestCommon.startMainActivityFromIntent(intent, url);
}
/**
@@ -500,25 +295,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* @param url the URL to be used (may be null)
*/
protected Intent prepareUrlIntent(Intent intent, String url) {
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.setComponent(new ComponentName(getInstrumentation().getTargetContext(),
- ChromeLauncherActivity.class));
-
- if (url != null) {
- intent.setData(Uri.parse(url));
- }
-
- try {
- Method method = getClass().getMethod(getName(), (Class[]) null);
- if (((AnnotatedElement) method).isAnnotationPresent(RenderProcessLimit.class)) {
- RenderProcessLimit limit = method.getAnnotation(RenderProcessLimit.class);
- intent.putExtra(ChromeTabbedActivity.INTENT_EXTRA_TEST_RENDER_PROCESS_LIMIT,
- limit.value());
- }
- } catch (NoSuchMethodException ex) {
- // Ignore exception.
- }
- return intent;
+ return mTestCommon.prepareUrlIntent(intent, url);
}
/**
@@ -526,46 +303,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* Returns when receiving the 'PAGE_LOAD_FINISHED' notification.
*/
protected void newIncognitoTabFromMenu() throws InterruptedException {
- Tab tab = null;
-
- final CallbackHelper createdCallback = new CallbackHelper();
- final CallbackHelper selectedCallback = new CallbackHelper();
-
- TabModel incognitoTabModel = getActivity().getTabModelSelector().getModel(true);
- TabModelObserver observer = new EmptyTabModelObserver() {
- @Override
- public void didAddTab(Tab tab, TabLaunchType type) {
- createdCallback.notifyCalled();
- }
-
- @Override
- public void didSelectTab(Tab tab, TabSelectionType type, int lastId) {
- selectedCallback.notifyCalled();
- }
- };
- incognitoTabModel.addObserver(observer);
-
- MenuUtils.invokeCustomMenuActionSync(getInstrumentation(), getActivity(),
- R.id.new_incognito_tab_menu_id);
-
- try {
- createdCallback.waitForCallback(0);
- } catch (TimeoutException ex) {
- fail("Never received tab created event");
- }
- try {
- selectedCallback.waitForCallback(0);
- } catch (TimeoutException ex) {
- fail("Never received tab selected event");
- }
- incognitoTabModel.removeObserver(observer);
-
- tab = getActivity().getActivityTab();
-
- ChromeTabUtils.waitForTabPageLoaded(tab, (String) null);
- NewTabPageTestUtils.waitForNtpLoaded(tab);
- getInstrumentation().waitForIdleSync();
- Log.d(TAG, "newIncognitoTabFromMenu <<");
+ mTestCommon.newIncognitoTabFromMenu();
}
/**
@@ -574,22 +312,14 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected void newIncognitoTabsFromMenu(int n)
throws InterruptedException {
- while (n > 0) {
- newIncognitoTabFromMenu();
- --n;
- }
+ mTestCommon.newIncognitoTabsFromMenu(n);
}
/**
* @return The number of incognito tabs currently open.
*/
protected int incognitoTabsCount() {
- return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Integer>() {
- @Override
- public Integer call() {
- return getActivity().getTabModelSelector().getModel(true).getCount();
- }
- });
+ return mTestCommon.incognitoTabsCount();
}
/**
@@ -601,29 +331,8 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*
* @throws InterruptedException
*/
- public void typeInOmnibox(final String text, final boolean oneCharAtATime)
- throws InterruptedException {
- final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
- assertNotNull(urlBar);
-
- ThreadUtils.runOnUiThreadBlocking(new Runnable() {
- @Override
- public void run() {
- urlBar.requestFocus();
- if (!oneCharAtATime) {
- urlBar.setText(text);
- }
- }
- });
-
- if (oneCharAtATime) {
- final Instrumentation instrumentation = getInstrumentation();
- for (int i = 0; i < text.length(); ++i) {
- instrumentation.sendStringSync(text.substring(i, i + 1));
- // Let's put some delay between key strokes to simulate a user pressing the keys.
- Thread.sleep(20);
- }
- }
+ public void typeInOmnibox(String text, boolean oneCharAtATime) throws InterruptedException {
+ mTestCommon.typeInOmnibox(text, oneCharAtATime);
}
/**
@@ -638,95 +347,14 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected OmniboxSuggestion findOmniboxSuggestion(String inputText, String displayText,
String url, int type) throws InterruptedException {
- long endTime = System.currentTimeMillis() + OMNIBOX_FIND_SUGGESTION_TIMEOUT_MS;
-
- // Multiple suggestion events may occur before the one we're interested in is received.
- final CallbackHelper onSuggestionsReceivedHelper = new CallbackHelper();
- final LocationBarLayout locationBar =
- (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
- locationBar.setAutocompleteController(new AutocompleteController(locationBar) {
- @Override
- public void onSuggestionsReceived(
- List<OmniboxSuggestion> suggestions,
- String inlineAutocompleteText,
- long currentNativeAutocompleteResult) {
- super.onSuggestionsReceived(
- suggestions, inlineAutocompleteText, currentNativeAutocompleteResult);
- onSuggestionsReceivedHelper.notifyCalled();
- }
- });
-
- try {
- typeInOmnibox(inputText, false);
-
- while (true) {
- try {
- int callbackCount = onSuggestionsReceivedHelper.getCallCount();
- onSuggestionsReceivedHelper.waitForCallback(
- callbackCount, 1,
- endTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
- } catch (TimeoutException exception) {
- return null;
- }
-
- // Wait for suggestions to show up.
- CriteriaHelper.pollInstrumentationThread(new Criteria() {
- @Override
- public boolean isSatisfied() {
- return ((LocationBarLayout) getActivity().findViewById(
- R.id.location_bar)).getSuggestionList() != null;
- }
- }, 3000, 10);
- final ListView suggestionListView = locationBar.getSuggestionList();
- OmniboxResultItem popupItem = (OmniboxResultItem) suggestionListView
- .getItemAtPosition(0);
- OmniboxSuggestion suggestion = popupItem.getSuggestion();
- if (suggestionListView.getCount() == 1
- && suggestion.getDisplayText().equals(inputText)
- && !suggestion.getDisplayText().equals(displayText)) {
- // If there is only one suggestion and it's the same as inputText,
- // wait for other suggestions before looking for the one we want.
- CriteriaHelper.pollInstrumentationThread(new Criteria() {
- @Override
- public boolean isSatisfied() {
- return suggestionListView.getCount() > 1;
- }
- }, 3000, 10);
- }
- int count = suggestionListView.getCount();
- for (int i = 0; i < count; i++) {
- popupItem = (OmniboxResultItem) suggestionListView.getItemAtPosition(i);
- suggestion = popupItem.getSuggestion();
- if (suggestion.getType() != type) {
- continue;
- }
- if (displayText != null && !suggestion.getDisplayText().equals(displayText)) {
- continue;
- }
- if (url != null && !suggestion.getUrl().equals(url)) {
- continue;
- }
- return suggestion;
- }
- }
- } finally {
- locationBar.setAutocompleteController(new AutocompleteController(locationBar));
- }
+ return mTestCommon.findOmniboxSuggestion(inputText, displayText, url, type);
}
/**
* Returns the infobars being displayed by the current tab, or null if they don't exist.
*/
protected List<InfoBar> getInfoBars() {
- return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<List<InfoBar>>() {
- @Override
- public List<InfoBar> call() throws Exception {
- Tab currentTab = getActivity().getActivityTab();
- assertNotNull(currentTab);
- assertNotNull(currentTab.getInfoBarContainer());
- return currentTab.getInfoBarContainer().getInfoBarsForTesting();
- }
- });
+ return mTestCommon.getInfoBars();
}
/**
@@ -734,11 +362,7 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* Returns the activity that was started.
*/
protected Preferences startPreferences(String fragmentName) {
- Context context = getInstrumentation().getTargetContext();
- Intent intent = PreferencesLauncher.createIntentForSettingsPage(context, fragmentName);
- Activity activity = getInstrumentation().startActivitySync(intent);
- assertTrue(activity instanceof Preferences);
- return (Preferences) activity;
+ return mTestCommon.startPreferences(fragmentName);
}
/**
@@ -748,15 +372,14 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
*/
protected String runJavaScriptCodeInCurrentTab(String code) throws InterruptedException,
TimeoutException {
- return JavaScriptUtils.executeJavaScriptAndWaitForResult(
- getActivity().getCurrentContentViewCore().getWebContents(), code);
+ return mTestCommon.runJavaScriptCodeInCurrentTab(code);
}
@Override
protected void runTest() throws Throwable {
- String perfTagAnalysisString = setupPotentialPerfTest();
+ String perfTagAnalysisString = mTestCommon.setupPotentialPerfTest();
super.runTest();
- endPerfTest(perfTagAnalysisString);
+ mTestCommon.endPerfTest(perfTagAnalysisString);
}
@Override
@@ -775,121 +398,17 @@ public abstract class ChromeActivityTestCaseBase<T extends ChromeActivity>
* Waits till the ContentViewCore receives the expected page scale factor
* from the compositor and asserts that this happens.
*/
- protected void assertWaitForPageScaleFactorMatch(final float expectedScale)
- throws InterruptedException {
- ApplicationTestUtils.assertWaitForPageScaleFactorMatch(getActivity(), expectedScale);
+ protected void assertWaitForPageScaleFactorMatch(float expectedScale) {
+ mTestCommon.assertWaitForPageScaleFactorMatch(expectedScale);
}
- /**
- * This method creates a special string that tells the python test harness what
- * trace calls to track for this particular test run. It can support multiple trace calls for
- * each test and will make a new graph entry for all of them. It should be noted that this
- * method eats all exceptions. This is so that it can never be the cause of a test failure.
- * We still need to call this method even if we know the test will not run (ie: willTestRun is
- * false). This is because this method lets the python test harness know not to expect any
- * perf output in this case. In the case that the autoTrace parameter is set for the current
- * test method, this will also start the PerfTrace facility automatically.
- *
- * @param willTestRun Whether or not this test will actually be run.
- * @return A specially formatted string that contains which JSON perf markers to look at. This
- * will be analyzed by the perf test harness.
- */
- @SuppressFBWarnings({
- "REC_CATCH_EXCEPTION",
- "RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",
- })
- private String setupPotentialPerfTest() {
- File perfFile = getInstrumentation().getTargetContext().getFileStreamPath(
- PERF_OUTPUT_FILE);
- perfFile.delete();
- PerfTraceEvent.setOutputFile(perfFile);
-
- String perfAnnotationString = "";
-
- try {
- Method method = getClass().getMethod(getName(), (Class[]) null);
- PerfTest annotation = method.getAnnotation(PerfTest.class);
- if (annotation != null) {
- StringBuilder annotationData = new StringBuilder();
- annotationData.append(String.format(PERF_ANNOTATION_FORMAT, method.getName()));
-
- // Grab the minimum number of trace calls we will track (if names(),
- // graphNames(), and graphValues() do not have the same number of elements, we
- // will track as many as we can given the data available.
- final int maxIndex = Math.min(annotation.traceNames().length, Math.min(
- annotation.graphNames().length, annotation.seriesNames().length));
-
- List<String> allNames = new LinkedList<>();
- for (int i = 0; i < maxIndex; ++i) {
- // Prune out all of ',' and ';' from the strings. Replace them with '-'.
- String name = annotation.traceNames()[i].replaceAll("[,;]", "-");
- allNames.add(name);
- String graphName = annotation.graphNames()[i].replaceAll("[,;]", "-");
- String seriesName = annotation.seriesNames()[i].replaceAll("[,;]", "-");
- if (annotation.traceTiming()) {
- annotationData.append(name).append(",")
- .append(graphName).append(",")
- .append(seriesName).append(';');
- }
-
- // If memory tracing is enabled, add an additional graph for each one
- // defined to track timing perf that will track the corresponding memory
- // usage.
- // Keep the series name the same, but just append a memory identifying
- // prefix to the graph.
- if (annotation.traceMemory()) {
- String memName = PerfTraceEvent.makeMemoryTraceNameFromTimingName(name);
- String memGraphName = PerfTraceEvent.makeSafeTraceName(
- graphName, MEMORY_TRACE_GRAPH_SUFFIX);
- annotationData.append(memName).append(",")
- .append(memGraphName).append(",")
- .append(seriesName).append(';');
- allNames.add(memName);
- }
- }
- // We only record perf trace events for the names explicitly listed.
- PerfTraceEvent.setFilter(allNames);
-
- // Figure out if we should automatically start or stop the trace.
- if (annotation.autoTrace()) {
- PerfTraceEvent.setEnabled(true);
- }
- PerfTraceEvent.setTimingTrackingEnabled(annotation.traceTiming());
- PerfTraceEvent.setMemoryTrackingEnabled(annotation.traceMemory());
-
- perfAnnotationString = annotationData.toString();
- }
- } catch (Exception ex) {
- // Eat exception here.
- }
-
- return perfAnnotationString;
+ @Override
+ public String getTestName() {
+ return getName();
}
- /**
- * This handles cleaning up the performance component of this test if it was a UI Perf test.
- * This includes potentially shutting down PerfTraceEvent. This method eats all exceptions so
- * that it can never be the cause of a test failure. The test harness will wait for
- * {@code perfTagAnalysisString} to show up in the logcat before processing the JSON perf file,
- * giving this method the chance to flush and dump the performance data before the harness reads
- * it.
- *
- * @param perfTagAnalysisString A specially formatted string that tells the perf test harness
- * which perf tags to analyze.
- */
- private void endPerfTest(String perfTagAnalysisString) {
- try {
- Method method = getClass().getMethod(getName(), (Class[]) null);
- PerfTest annotation = method.getAnnotation(PerfTest.class);
- if (annotation != null) {
- if (PerfTraceEvent.enabled()) {
- PerfTraceEvent.setEnabled(false);
- }
-
- System.out.println(perfTagAnalysisString);
- }
- } catch (NoSuchMethodException ex) {
- // Eat exception here.
- }
+ @Override
+ public void setActivity(T t) {
+ super.setActivity(t);
}
}
« no previous file with comments | « chrome/test/android/BUILD.gn ('k') | chrome/test/android/javatests/src/org/chromium/chrome/test/ChromeActivityTestCommon.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698