Skip to content
This repository was archived by the owner on Aug 8, 2022. It is now read-only.

Commit 3228059

Browse files
authored
Add ActivityScenario samples (#246)
1 parent 8ad705e commit 3228059

4 files changed

Lines changed: 67 additions & 5 deletions

File tree

Sample/build.gradle

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ android {
4343
buildFeatures {
4444
viewBinding true
4545
}
46+
47+
kotlinOptions {
48+
jvmTarget = "1.8"
49+
}
4650
}
4751

4852
dependencies {
@@ -63,4 +67,5 @@ dependencies {
6367
androidTestImplementation "androidx.test:runner:${versions.androidx.test.runner}"
6468
androidTestImplementation "org.mockito:mockito-android:${versions.mockitoAndroid}"
6569
androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:${versions.mockitokotlin}"
70+
androidTestImplementation "androidx.test:core-ktx:${versions.androidx.test.coreKtx}"
6671
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.shopify.testify.sample
2+
3+
import androidx.recyclerview.widget.RecyclerView
4+
import androidx.test.core.app.ActivityScenario.launch
5+
import androidx.test.core.app.launchActivity
6+
import androidx.test.espresso.Espresso.onView
7+
import androidx.test.espresso.action.ViewActions.scrollTo
8+
import androidx.test.espresso.assertion.ViewAssertions.matches
9+
import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition
10+
import androidx.test.espresso.matcher.ViewMatchers
11+
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
12+
import androidx.test.espresso.matcher.ViewMatchers.withId
13+
import androidx.test.espresso.matcher.ViewMatchers.withText
14+
import androidx.test.platform.app.InstrumentationRegistry
15+
import com.shopify.testify.sample.clients.MockClientData
16+
import com.shopify.testify.sample.clients.details.ClientDetailsActivity
17+
import com.shopify.testify.sample.clients.index.ClientListActivity
18+
import org.hamcrest.CoreMatchers.endsWith
19+
import org.junit.Test
20+
21+
/**
22+
* Intention behind this setup is to share typical use cases utilizing ActivityScenario:
23+
* https://developer.android.com/reference/androidx/test/core/app/ActivityScenario
24+
*/
25+
class ActivityScenarioExampleTest {
26+
@Test
27+
fun activityScenarioNoIntentUseCase() {
28+
launchActivity<ClientListActivity>().use {
29+
onView(ViewMatchers.withClassName(endsWith("RecyclerView")))
30+
.perform(actionOnItemAtPosition<RecyclerView.ViewHolder>(THE_CLIENT_POSITION, scrollTo()))
31+
.check(matches(hasDescendant(withText(THE_CLIENT.name))))
32+
}
33+
}
34+
35+
@Test
36+
fun activityScenarioIntentUseCase() {
37+
launch<ClientDetailsActivity>(
38+
ClientDetailsActivity.createClientDetailsActivityIntent(
39+
InstrumentationRegistry.getInstrumentation().targetContext,
40+
THE_CLIENT
41+
)
42+
).use {
43+
onView(withId(R.id.address)).check(matches(withText(R.string.mock_address)))
44+
}
45+
}
46+
47+
companion object {
48+
const val THE_CLIENT_POSITION = 13
49+
val THE_CLIENT = MockClientData.CLIENTS[THE_CLIENT_POSITION]
50+
}
51+
}

Sample/src/main/java/com/shopify/testify/sample/clients/details/ClientDetailsActivity.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
package com.shopify.testify.sample.clients.details
2525

2626
import android.app.Activity
27+
import android.content.Context
2728
import android.content.Intent
2829
import android.os.Bundle
2930
import androidx.appcompat.app.AppCompatActivity
@@ -60,10 +61,13 @@ class ClientDetailsActivity : AppCompatActivity() {
6061
private const val EXTRA_CLIENT_ITEM = "client_item"
6162

6263
fun Activity.startClientDetailsActivity(item: MockClientData.Client) {
63-
val intent = Intent(this, ClientDetailsActivity::class.java)
64-
intent.putExtra(EXTRA_CLIENT_ITEM, item)
65-
this.startActivity(intent)
64+
startActivity(createClientDetailsActivityIntent(this, item))
6665
}
6766

67+
fun createClientDetailsActivityIntent(context: Context, item: MockClientData.Client): Intent {
68+
return Intent(context, ClientDetailsActivity::class.java).apply {
69+
putExtra(EXTRA_CLIENT_ITEM, item)
70+
}
71+
}
6872
}
6973
}

build.gradle

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,19 @@ buildscript {
88
ext {
99
versions = [
1010
'androidGradlePlugin': '4.2.0', // https://developer.android.com/studio/releases/gradle-plugin.html
11-
'androidx' : [
11+
'androidx': [
1212
'constraintLayout': '2.0.0-beta4', // https://developer.android.com/jetpack/androidx/releases
1313
'appCompat' : '1.2.0', // https://developer.android.com/jetpack/androidx/releases
1414
'coreKtx' : '1.1.0', // https://developer.android.com/jetpack/androidx/releases
1515
'test' : [
1616
'core' : '2.1.0', // https://developer.android.com/jetpack/androidx/releases
17+
'coreKtx' : '1.4.0', // https://mvnrepository.com/artifact/androidx.test/core-ktx
1718
'espresso': '3.3.0', // https://developer.android.com/jetpack/androidx/releases
1819
'junit' : '1.1.2', // https://developer.android.com/jetpack/androidx/releases
1920
'rules' : '1.3.0', // https://developer.android.com/jetpack/androidx/releases
2021
'runner' : '1.3.0', // https://developer.android.com/jetpack/androidx/releases
21-
]
22+
],
23+
'fragment' : '1.3.6', // https://developer.android.com/jetpack/androidx/releases/fragment
2224
],
2325
'colormath' : '1.4.1', // https://github.com/ajalt/colormath/releases
2426
'dokka' : '1.4.32', // https://github.com/Kotlin/dokka/releases

0 commit comments

Comments
 (0)