Merge "Add test for multiple fragment startActivityForResult calls" into androidx-master-dev am: c170622191
Change-Id: I3a467595e40f80f06dbbe863482e6afadcf8ff06
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
index 47d17d4..c5bf781 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentReceiveResultTest.kt
@@ -64,40 +64,56 @@
fun testStartActivityForResultOk() {
startActivityForResult(10, Activity.RESULT_OK, "content 10")
- assertWithMessage("Fragment should receive result").that(fragment.hasResult).isTrue()
- assertThat(fragment.requestCode).isEqualTo(10)
- assertThat(fragment.resultCode).isEqualTo(Activity.RESULT_OK)
- assertThat(fragment.resultContent).isEqualTo("content 10")
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[0]).isTrue()
+ assertThat(fragment.requestCode[0]).isEqualTo(10)
+ assertThat(fragment.resultCode[0]).isEqualTo(Activity.RESULT_OK)
+ assertThat(fragment.resultContent[0]).isEqualTo("content 10")
+ }
+
+ @Test
+ fun testMultipleStartActivityForResultOk() {
+ startActivityForResult(10, Activity.RESULT_OK, "content 10")
+ startActivityForResult(20, Activity.RESULT_OK, "content 20")
+
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[0]).isTrue()
+ assertThat(fragment.requestCode[0]).isEqualTo(10)
+ assertThat(fragment.resultCode[0]).isEqualTo(Activity.RESULT_OK)
+ assertThat(fragment.resultContent[0]).isEqualTo("content 10")
+
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[1]).isTrue()
+ assertThat(fragment.requestCode[1]).isEqualTo(20)
+ assertThat(fragment.resultCode[1]).isEqualTo(Activity.RESULT_OK)
+ assertThat(fragment.resultContent[1]).isEqualTo("content 20")
}
@Test
fun testStartActivityForResultCanceled() {
startActivityForResult(20, Activity.RESULT_CANCELED, "content 20")
- assertWithMessage("Fragment should receive result").that(fragment.hasResult).isTrue()
- assertThat(fragment.requestCode).isEqualTo(20)
- assertThat(fragment.resultCode).isEqualTo(Activity.RESULT_CANCELED)
- assertThat(fragment.resultContent).isEqualTo("content 20")
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[0]).isTrue()
+ assertThat(fragment.requestCode[0]).isEqualTo(20)
+ assertThat(fragment.resultCode[0]).isEqualTo(Activity.RESULT_CANCELED)
+ assertThat(fragment.resultContent[0]).isEqualTo("content 20")
}
@Test
fun testStartIntentSenderForResultOk() {
startIntentSenderForResult(30, Activity.RESULT_OK, "content 30")
- assertWithMessage("Fragment should receive result").that(fragment.hasResult).isTrue()
- assertThat(fragment.requestCode).isEqualTo(30)
- assertThat(fragment.resultCode).isEqualTo(Activity.RESULT_OK)
- assertThat(fragment.resultContent).isEqualTo("content 30")
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[0]).isTrue()
+ assertThat(fragment.requestCode[0]).isEqualTo(30)
+ assertThat(fragment.resultCode[0]).isEqualTo(Activity.RESULT_OK)
+ assertThat(fragment.resultContent[0]).isEqualTo("content 30")
}
@Test
fun testStartIntentSenderForResultCanceled() {
startIntentSenderForResult(40, Activity.RESULT_CANCELED, "content 40")
- assertWithMessage("Fragment should receive result").that(fragment.hasResult).isTrue()
- assertThat(fragment.requestCode).isEqualTo(40)
- assertThat(fragment.resultCode).isEqualTo(Activity.RESULT_CANCELED)
- assertThat(fragment.resultContent).isEqualTo("content 40")
+ assertWithMessage("Fragment should receive result").that(fragment.hasResult[0]).isTrue()
+ assertThat(fragment.requestCode[0]).isEqualTo(40)
+ assertThat(fragment.resultCode[0]).isEqualTo(Activity.RESULT_CANCELED)
+ assertThat(fragment.resultContent[0]).isEqualTo("content 40")
}
@Test
@@ -145,7 +161,8 @@
fragment.startActivityForResult(intent, requestCode)
}
- assertThat(fragment.resultReceiveLatch.await(1, TimeUnit.SECONDS)).isTrue()
+ assertThat(fragment.resultReceiveLatch[fragment.onActivityResultCount]
+ .await(1, TimeUnit.SECONDS)).isTrue()
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
}
@@ -171,23 +188,25 @@
fail("IntentSender failed")
}
}
- assertThat(fragment.resultReceiveLatch.await(1, TimeUnit.SECONDS)).isTrue()
+ assertThat(fragment.resultReceiveLatch[0].await(1, TimeUnit.SECONDS)).isTrue()
InstrumentationRegistry.getInstrumentation().waitForIdleSync()
}
class TestFragment : Fragment() {
- internal var hasResult = false
- internal var requestCode = -1
- internal var resultCode = 100
- internal lateinit var resultContent: String
- internal val resultReceiveLatch = CountDownLatch(1)
+ internal val hasResult = ArrayList<Boolean>()
+ internal val requestCode = ArrayList<Int>()
+ internal val resultCode = ArrayList<Int>()
+ internal val resultContent = ArrayList<String>()
+ internal val resultReceiveLatch = arrayListOf(CountDownLatch(1), CountDownLatch(1))
+ internal var onActivityResultCount = 0
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- hasResult = true
- this.requestCode = requestCode
- this.resultCode = resultCode
- resultContent = data!!.getStringExtra(FragmentResultActivity.EXTRA_RESULT_CONTENT)!!
- resultReceiveLatch.countDown()
+ hasResult.add(true)
+ this.requestCode.add(requestCode)
+ this.resultCode.add(resultCode)
+ resultContent.add(data!!.getStringExtra(FragmentResultActivity.EXTRA_RESULT_CONTENT)!!)
+ resultReceiveLatch[onActivityResultCount].countDown()
+ onActivityResultCount++
}
}
}