From 0fab0887bbe15696522dd42239dca8e666b0ef16 Mon Sep 17 00:00:00 2001 From: oradkovsky Date: Sat, 25 Sep 2021 19:43:52 +0300 Subject: [PATCH] impl: 244: sample for https://github.com/Shopify/android-testify/issues/244 --- Sample/build.gradle | 5 ++ .../sample/ActivityScenarioExampleTest.kt | 51 +++++++++++++++++++ .../clients/details/ClientDetailsActivity.kt | 10 ++-- build.gradle | 6 ++- 4 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 Sample/src/androidTest/java/com/shopify/testify/sample/ActivityScenarioExampleTest.kt diff --git a/Sample/build.gradle b/Sample/build.gradle index 79104320..704293a4 100644 --- a/Sample/build.gradle +++ b/Sample/build.gradle @@ -43,6 +43,10 @@ android { buildFeatures { viewBinding true } + + kotlinOptions { + jvmTarget = "1.8" + } } dependencies { @@ -63,4 +67,5 @@ dependencies { androidTestImplementation "androidx.test:runner:${versions.androidx.test.runner}" androidTestImplementation "org.mockito:mockito-android:${versions.mockitoAndroid}" androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:${versions.mockitokotlin}" + androidTestImplementation "androidx.test:core-ktx:${versions.androidx.test.coreKtx}" } diff --git a/Sample/src/androidTest/java/com/shopify/testify/sample/ActivityScenarioExampleTest.kt b/Sample/src/androidTest/java/com/shopify/testify/sample/ActivityScenarioExampleTest.kt new file mode 100644 index 00000000..58929e77 --- /dev/null +++ b/Sample/src/androidTest/java/com/shopify/testify/sample/ActivityScenarioExampleTest.kt @@ -0,0 +1,51 @@ +package com.shopify.testify.sample + +import androidx.recyclerview.widget.RecyclerView +import androidx.test.core.app.ActivityScenario.launch +import androidx.test.core.app.launchActivity +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.scrollTo +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.hasDescendant +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.platform.app.InstrumentationRegistry +import com.shopify.testify.sample.clients.MockClientData +import com.shopify.testify.sample.clients.details.ClientDetailsActivity +import com.shopify.testify.sample.clients.index.ClientListActivity +import org.hamcrest.CoreMatchers.endsWith +import org.junit.Test + +/** + * Intention behind this setup is to share typical use cases utilizing ActivityScenario: + * https://developer.android.com/reference/androidx/test/core/app/ActivityScenario + */ +class ActivityScenarioExampleTest { + @Test + fun activityScenarioNoIntentUseCase() { + launchActivity().use { + onView(ViewMatchers.withClassName(endsWith("RecyclerView"))) + .perform(actionOnItemAtPosition(THE_CLIENT_POSITION, scrollTo())) + .check(matches(hasDescendant(withText(THE_CLIENT.name)))) + } + } + + @Test + fun activityScenarioIntentUseCase() { + launch( + ClientDetailsActivity.createClientDetailsActivityIntent( + InstrumentationRegistry.getInstrumentation().targetContext, + THE_CLIENT + ) + ).use { + onView(withId(R.id.address)).check(matches(withText(R.string.mock_address))) + } + } + + companion object { + const val THE_CLIENT_POSITION = 13 + val THE_CLIENT = MockClientData.CLIENTS[THE_CLIENT_POSITION] + } +} diff --git a/Sample/src/main/java/com/shopify/testify/sample/clients/details/ClientDetailsActivity.kt b/Sample/src/main/java/com/shopify/testify/sample/clients/details/ClientDetailsActivity.kt index a4a97875..1bf9ed1c 100644 --- a/Sample/src/main/java/com/shopify/testify/sample/clients/details/ClientDetailsActivity.kt +++ b/Sample/src/main/java/com/shopify/testify/sample/clients/details/ClientDetailsActivity.kt @@ -24,6 +24,7 @@ package com.shopify.testify.sample.clients.details import android.app.Activity +import android.content.Context import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity @@ -60,10 +61,13 @@ class ClientDetailsActivity : AppCompatActivity() { private const val EXTRA_CLIENT_ITEM = "client_item" fun Activity.startClientDetailsActivity(item: MockClientData.Client) { - val intent = Intent(this, ClientDetailsActivity::class.java) - intent.putExtra(EXTRA_CLIENT_ITEM, item) - this.startActivity(intent) + startActivity(createClientDetailsActivityIntent(this, item)) } + fun createClientDetailsActivityIntent(context: Context, item: MockClientData.Client): Intent { + return Intent(context, ClientDetailsActivity::class.java).apply { + putExtra(EXTRA_CLIENT_ITEM, item) + } + } } } diff --git a/build.gradle b/build.gradle index b9125818..ffe99961 100644 --- a/build.gradle +++ b/build.gradle @@ -8,17 +8,19 @@ buildscript { ext { versions = [ 'androidGradlePlugin': '4.2.0', // https://developer.android.com/studio/releases/gradle-plugin.html - 'androidx' : [ + 'androidx': [ 'constraintLayout': '2.0.0-beta4', // https://developer.android.com/jetpack/androidx/releases 'appCompat' : '1.2.0', // https://developer.android.com/jetpack/androidx/releases 'coreKtx' : '1.1.0', // https://developer.android.com/jetpack/androidx/releases 'test' : [ 'core' : '2.1.0', // https://developer.android.com/jetpack/androidx/releases + 'coreKtx' : '1.4.0', // https://mvnrepository.com/artifact/androidx.test/core-ktx 'espresso': '3.3.0', // https://developer.android.com/jetpack/androidx/releases 'junit' : '1.1.2', // https://developer.android.com/jetpack/androidx/releases 'rules' : '1.3.0', // https://developer.android.com/jetpack/androidx/releases 'runner' : '1.3.0', // https://developer.android.com/jetpack/androidx/releases - ] + ], + 'fragment' : '1.3.6', // https://developer.android.com/jetpack/androidx/releases/fragment ], 'colormath' : '1.4.1', // https://github.com/ajalt/colormath/releases 'dokka' : '1.4.32', // https://github.com/Kotlin/dokka/releases