diff --git a/app/src/androidTest/java/no/agens/darjeeling/TestActivityExampleTest.kt b/app/src/androidTest/java/no/agens/darjeeling/TestActivityExampleTest.kt index 184faa6..682ded5 100644 --- a/app/src/androidTest/java/no/agens/darjeeling/TestActivityExampleTest.kt +++ b/app/src/androidTest/java/no/agens/darjeeling/TestActivityExampleTest.kt @@ -1,5 +1,7 @@ package no.agens.darjeeling +import android.content.Intent +import androidx.test.core.app.ApplicationProvider import no.agens.darjeeling.android.DarjeelingUtils.eventuallyActivityLaunched import no.agens.darjeeling.android.ext.button import no.agens.darjeeling.android.ext.textView @@ -30,4 +32,19 @@ class TestActivityExampleTest { } } } + + @Test + fun testActivityWithIntent() { + + val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java) + intent.putExtra("message", "Hello, Test!") + + testActivity(intent) { + + onActivity { + button(R.id.buttonHello).performClick() + assertEquals("Hello, Test!", textView(R.id.textDemo).text.toString()) + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/no/agens/darjeeling/MainActivity.kt b/app/src/main/java/no/agens/darjeeling/MainActivity.kt index 654bf19..9d64eab 100644 --- a/app/src/main/java/no/agens/darjeeling/MainActivity.kt +++ b/app/src/main/java/no/agens/darjeeling/MainActivity.kt @@ -15,8 +15,10 @@ class MainActivity : AppCompatActivity() { startActivity(intent) } + val message = intent?.getStringExtra("message") + buttonHello.setOnClickListener { - textDemo.text = "Activity says hello." + textDemo.text = if (message.isNullOrEmpty()) "Activity says hello." else message } } diff --git a/darjeeling-android-testing/build.gradle.kts b/darjeeling-android-testing/build.gradle.kts index d32ee8c..e1424c7 100644 --- a/darjeeling-android-testing/build.gradle.kts +++ b/darjeeling-android-testing/build.gradle.kts @@ -13,7 +13,7 @@ android { minSdkVersion(21) targetSdkVersion(30) versionCode = gitInfo.count - versionName = "0.90.b4" + versionName = "0.90" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") diff --git a/darjeeling-android-testing/src/main/java/no/agens/darjeeling/android/DarjeelingTestingScenarios.kt b/darjeeling-android-testing/src/main/java/no/agens/darjeeling/android/DarjeelingTestingScenarios.kt index 6721258..8eabe68 100644 --- a/darjeeling-android-testing/src/main/java/no/agens/darjeeling/android/DarjeelingTestingScenarios.kt +++ b/darjeeling-android-testing/src/main/java/no/agens/darjeeling/android/DarjeelingTestingScenarios.kt @@ -1,6 +1,7 @@ package no.agens.darjeeling.android import android.app.Activity +import android.content.Intent import android.os.Bundle import androidx.core.os.bundleOf import androidx.fragment.app.Fragment @@ -9,6 +10,15 @@ import androidx.test.core.app.ActivityScenario import androidx.test.espresso.intent.Intents import kotlin.reflect.KClass +fun testActivity(intent: Intent, perform: ActivityScenario.() -> Unit) { + Intents.init() + try { + ActivityScenario.launch(intent).use { it.perform() } + } finally { + Intents.release() + } +} + fun testActivity(activityClass: KClass, perform: ActivityScenario.() -> Unit) { Intents.init() diff --git a/docs/userguide.md b/docs/userguide.md index 4513745..9c7a7f8 100644 --- a/docs/userguide.md +++ b/docs/userguide.md @@ -24,6 +24,18 @@ testActivity(MainActivity::class) { } ``` +You can also test your activity using an `Intent`, for passing in extras etc: +``` +val intent = Intent(ApplicationProvider.getApplicationContext(), MainActivity::class.java) +intent.putExtra("message", "Hello, Test!") + +testActivity(intent) { + onActivity { activity -> + // TODO perform operations on the activity and assertions here + } +} +``` + Further documentation on what you can do with the ActivityScenario can be found [here](https://developer.android.com/reference/androidx/test/core/app/ActivityScenario). [This blog post on testing with ActivityScenario](https://medium.com/google-developer-experts/stepping-into-activity-tests-with-activityscenarios-5db98d5311e6) can also be helpful for getting into activity testing.