Fix race condition for LoaderTest.
Bug 63450334
LoaderTest.startWhenReused() requires that the activity be resumed
prior to testing the value. This waits for the resume call.
Test: ran fragment tests
Change-Id: I463450c16bd04ac624ec2766abdfe83bea1e448c
diff --git a/tests/fragment/src/android/fragment/cts/LoaderTest.java b/tests/fragment/src/android/fragment/cts/LoaderTest.java
index 2eb897e..be6e032 100755
--- a/tests/fragment/src/android/fragment/cts/LoaderTest.java
+++ b/tests/fragment/src/android/fragment/cts/LoaderTest.java
@@ -96,6 +96,7 @@
@Test
public void startWhenReused() throws Throwable {
LoaderActivity activity = mActivityRule.getActivity();
+ activity.waitForResume(mActivityRule);
assertEquals("Loaded!", activity.textView.getText().toString());
diff --git a/tests/fragment/src/android/fragment/cts/RecreatedActivity.java b/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
index 82b32a9..57011bd 100644
--- a/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
+++ b/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
@@ -15,16 +15,21 @@
*/
package android.fragment.cts;
+import static org.junit.Assert.assertTrue;
+
import android.app.Activity;
import android.os.Bundle;
+import android.support.test.rule.ActivityTestRule;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
public class RecreatedActivity extends Activity {
// These must be cleared after each test using clearState()
public static RecreatedActivity sActivity;
public static CountDownLatch sResumed;
public static CountDownLatch sDestroyed;
+ private boolean mIsResumed;
public static void clearState() {
sActivity = null;
@@ -41,15 +46,42 @@
@Override
protected void onResume() {
super.onResume();
+ mIsResumed = true;
if (sResumed != null) {
sResumed.countDown();
}
}
@Override
+ protected void onPause() {
+ super.onPause();
+ mIsResumed = false;
+ }
+
+ @Override
protected void onDestroy() {
super.onDestroy();
if (sDestroyed != null) {
sDestroyed.countDown();
}
- }}
+ }
+
+ public void waitForResume(ActivityTestRule<? extends Activity> rule) throws Throwable {
+ if (mIsResumed) {
+ return;
+ }
+ if (sResumed != null) {
+ assertTrue(sResumed.await(1, TimeUnit.SECONDS));
+ } else {
+ rule.runOnUiThread(() -> {
+ if (!mIsResumed) {
+ sResumed = new CountDownLatch(1);
+ }
+ });
+ if (sResumed != null) {
+ assertTrue(sResumed.await(1, TimeUnit.SECONDS));
+ sResumed = null;
+ }
+ }
+ }
+}