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