Commit 4e9fbb31 authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

Move SyncAndServicesPreferencesTest#waitForActivityState() to ApplicationTestUtils

This CL moves SyncAndServicesPreferencesTest#waitForActivityState() to
ApplicationTestUtils where it can be shared with WebApkActivityTest,
BookmarkTest and ApplicationTestUtils#finishActivity()

BUG=1015449

Change-Id: I929b308722e8c575ca8dcf5e82a33ace4afa6200
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1977742Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#726981}
parent 6638504f
......@@ -25,10 +25,8 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.ActivityState;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.test.params.ParameterAnnotations;
import org.chromium.base.test.params.ParameterizedRunner;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisableIf;
import org.chromium.base.test.util.Feature;
......@@ -48,6 +46,7 @@ import org.chromium.chrome.browser.widget.selection.SelectableListToolbar;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4RunnerDelegate;
import org.chromium.chrome.test.util.ActivityUtils;
import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.BookmarkTestUtil;
import org.chromium.chrome.test.util.ChromeRenderTestRule;
import org.chromium.chrome.test.util.ChromeTabUtils;
......@@ -483,17 +482,12 @@ public class BookmarkTest {
openBookmarkManager();
CallbackHelper activityDestroyedCallback = new CallbackHelper();
ApplicationStatus.registerStateListenerForActivity((activity, newState) -> {
if (newState == ActivityState.DESTROYED) activityDestroyedCallback.notifyCalled();
}, mBookmarkActivity);
final BookmarkActionBar toolbar = mManager.getToolbarForTests();
TestThreadUtils.runOnUiThreadBlocking(
() -> toolbar.onMenuItemClick(toolbar.getMenu().findItem(R.id.close_menu_id)));
activityDestroyedCallback.waitForCallback(0);
ApplicationTestUtils.waitForActivityState(mBookmarkActivity, ActivityState.DESTROYED);
BookmarkManager.preventLoadingForTesting(false);
}
......
......@@ -21,9 +21,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.ActivityState;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.DisabledTest;
import org.chromium.base.test.util.Feature;
......@@ -299,37 +296,10 @@ public class SyncAndServicesPreferencesTest {
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
}
// TODO(https://crbug.com/1015449): Move this function to ApplicationTestUtils.
private void waitForActivityState(Activity activity, @ActivityState int state)
throws Exception {
final CallbackHelper callbackHelper = new CallbackHelper();
final ApplicationStatus.ActivityStateListener activityStateListener =
(activity1, newState) -> {
if (newState == state) {
callbackHelper.notifyCalled();
}
};
try {
boolean correctState = TestThreadUtils.runOnUiThreadBlocking(() -> {
if (ApplicationStatus.getStateForActivity(activity) == state) {
return true;
}
ApplicationStatus.registerStateListenerForActivity(activityStateListener, activity);
activity.finish();
return false;
});
if (!correctState) {
callbackHelper.waitForCallback(0);
}
} finally {
ApplicationStatus.unregisterActivityStateListener(activityStateListener);
}
}
private void pressBackAndDismissActivity(Activity activity) throws Exception {
UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
device.pressBack();
waitForActivityState(activity, ActivityState.DESTROYED);
ApplicationTestUtils.finishActivity(activity);
}
private ChromeSwitchPreference getSyncSwitch(SyncAndServicesPreferences fragment) {
......
......@@ -4,7 +4,6 @@
package org.chromium.chrome.browser.webapps;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
......@@ -19,10 +18,8 @@ import org.junit.runner.RunWith;
import org.chromium.base.ActivityState;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus;
import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.ChromeActivity;
......@@ -36,6 +33,7 @@ import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.browser.webapps.WebApkInfoBuilder;
import org.chromium.content_public.browser.test.NativeLibraryTestRule;
......@@ -150,7 +148,6 @@ public final class WebApkActivityTest {
@LargeTest
@Feature({"WebApk"})
public void testLaunchIntervalHistogramNotRecordedOnFirstLaunch() {
android.util.Log.e("ABCD", "Start");
final String histogramName = "WebApk.LaunchInterval";
WebApkActivity webApkActivity = mActivityTestRule.startWebApkActivity(createWebApkInfo(
getTestServerUrl("manifest_test_page.html"), getTestServerUrl("/")));
......@@ -167,7 +164,6 @@ public final class WebApkActivityTest {
WebappDataStorage storage =
WebappRegistry.getInstance().getWebappDataStorage(TEST_WEBAPK_ID);
Assert.assertNotEquals(WebappDataStorage.TIMESTAMP_INVALID, storage.getLastUsedTimeMs());
android.util.Log.e("ABCD", "Start2");
}
/** Test that the "WebApk.LaunchInterval" histogram is recorded on susbequent launches. */
......@@ -220,7 +216,7 @@ public final class WebApkActivityTest {
InstrumentationRegistry.getTargetContext().startActivity(intent);
ChromeActivityTestRule.waitFor(mainClass);
waitForActivityState(webApkActivity, ActivityState.STOPPED);
ApplicationTestUtils.waitForActivityState(webApkActivity, ActivityState.STOPPED);
TestThreadUtils.runOnUiThreadBlocking(() -> {
TabWebContentsDelegateAndroid tabDelegate =
......@@ -251,29 +247,4 @@ public final class WebApkActivityTest {
callback.waitForCallback(0);
return WebappRegistry.getInstance().getWebappDataStorage(webappId);
}
private void waitForActivityState(Activity activity, @ActivityState int state)
throws Exception {
final CallbackHelper callbackHelper = new CallbackHelper();
final ApplicationStatus.ActivityStateListener activityStateListener =
(activity1, newState) -> {
if (newState == state) {
callbackHelper.notifyCalled();
}
};
try {
boolean correctState = TestThreadUtils.runOnUiThreadBlocking(() -> {
if (ApplicationStatus.getStateForActivity(activity) == state) {
return true;
}
ApplicationStatus.registerStateListenerForActivity(activityStateListener, activity);
return false;
});
if (!correctState) {
callbackHelper.waitForCallback(0);
}
} finally {
ApplicationStatus.unregisterActivityStateListener(activityStateListener);
}
}
}
......@@ -149,34 +149,25 @@ public class ApplicationTestUtils {
}));
}
/** Finishes the given activity and waits for its onDestroy() to be called. */
public static void finishActivity(final Activity activity) throws Exception {
/** Waits until the given activity transitions to the given state. */
public static void waitForActivityState(Activity activity, @ActivityState int state)
throws Exception {
final CallbackHelper callbackHelper = new CallbackHelper();
final ApplicationStatus.ActivityStateListener activityStateListener =
new ApplicationStatus.ActivityStateListener() {
@Override
public void onActivityStateChange(Activity activity, int newState) {
if (newState == ActivityState.DESTROYED) {
callbackHelper.notifyCalled();
}
}
};
(activity1, newState) -> {
if (newState == state) {
callbackHelper.notifyCalled();
}
};
try {
boolean alreadyDestroyed =
TestThreadUtils.runOnUiThreadBlocking(new Callable<Boolean>() {
@Override
public Boolean call() {
if (ApplicationStatus.getStateForActivity(activity)
== ActivityState.DESTROYED) {
return true;
}
ApplicationStatus.registerStateListenerForActivity(
activityStateListener, activity);
activity.finish();
return false;
}
});
if (!alreadyDestroyed) {
boolean correctState = TestThreadUtils.runOnUiThreadBlocking(() -> {
if (ApplicationStatus.getStateForActivity(activity) == state) {
return true;
}
ApplicationStatus.registerStateListenerForActivity(activityStateListener, activity);
return false;
});
if (!correctState) {
callbackHelper.waitForCallback(0);
}
} finally {
......@@ -184,6 +175,16 @@ public class ApplicationTestUtils {
}
}
/** Finishes the given activity and waits for its onDestroy() to be called. */
public static void finishActivity(final Activity activity) throws Exception {
TestThreadUtils.runOnUiThreadBlocking(() -> {
if (ApplicationStatus.getStateForActivity(activity) != ActivityState.DESTROYED) {
activity.finish();
}
});
waitForActivityState(activity, ActivityState.DESTROYED);
}
/** Finishes all tasks Chrome has listed in Android's Overview. */
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void finishAllChromeTasks(final Context context) {
......
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