diff --git a/buildSrc/src/main/kotlin/Artifacts.kt b/buildSrc/src/main/kotlin/Artifacts.kt index c26ee945..8eaeb4ff 100644 --- a/buildSrc/src/main/kotlin/Artifacts.kt +++ b/buildSrc/src/main/kotlin/Artifacts.kt @@ -72,7 +72,7 @@ object Artifacts { val Runner = Deployed( platform = Android(minSdk = 14), groupId = groupId, - artifactId = "android-instrumentation-test-runner", + artifactId = "android-test-runner", currentVersion = currentVersion, latestStableVersion = latestStableVersion, license = license, diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 1dfbd576..46cba4c8 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -15,10 +15,10 @@ object Versions { const val aapt2: String = "3.2.1-4818971" - const val com_android_tools_build_gradle: String = "3.4.0-rc02" + const val com_android_tools_build_gradle: String = "3.4.0-rc03" const val com_android_tools_build_gradle_32x: String = "3.2.1" const val com_android_tools_build_gradle_33x: String = "3.3.2" - const val com_android_tools_build_gradle_34x: String = "3.4.0-rc02" + const val com_android_tools_build_gradle_34x: String = "3.4.0-rc03" const val com_android_tools_build_gradle_35x: String = "3.5.0-alpha07" const val lint_gradle: String = "26.2.1" diff --git a/instrumentation/core/build.gradle.kts b/instrumentation/core/build.gradle.kts index 8d22bf87..688e2ee8 100644 --- a/instrumentation/core/build.gradle.kts +++ b/instrumentation/core/build.gradle.kts @@ -81,14 +81,15 @@ tasks.withType { } dependencies { - implementation(Libs.junit_jupiter_api) implementation(Libs.kotlin_stdlib) - implementation(Libs.androidx_test_core) + implementation(Libs.junit_jupiter_api) + api(Libs.androidx_test_core) // This is required by the "instrumentation-runner" companion library, // since it can't provide any JUnit 5 runtime libraries itself // due to fear of prematurely incrementing the minSdkVersion requirement. runtimeOnly(Libs.junit_platform_runner) + runtimeOnly(Libs.junit_jupiter_engine) androidTestImplementation(Libs.junit_jupiter_api) androidTestImplementation(Libs.espresso_core) diff --git a/instrumentation/sample/build.gradle.kts b/instrumentation/sample/build.gradle.kts index 139fe66d..2638b325 100644 --- a/instrumentation/sample/build.gradle.kts +++ b/instrumentation/sample/build.gradle.kts @@ -1,5 +1,6 @@ import de.mannodermaus.gradle.plugins.junit5.junitPlatform import org.gradle.api.tasks.testing.logging.TestLogEvent +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile buildscript { repositories { @@ -65,6 +66,12 @@ android { } } +tasks.withType { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_1_8.toString() + } +} + tasks.withType { testLogging.events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) } @@ -81,8 +88,8 @@ dependencies { // Android Instrumentation Tests wth JUnit 5 androidTestImplementation(Libs.junit_jupiter_api) - androidTestRuntimeOnly(Libs.junit_jupiter_engine) - androidTestRuntimeOnly(Libs.junit_platform_runner) - androidTestImplementation(project(":api")) + androidTestImplementation(Libs.junit_jupiter_params) + androidTestImplementation(Libs.espresso_core) + androidTestImplementation(project(":core")) androidTestRuntimeOnly(project(":runner")) } diff --git a/instrumentation/sample/src/androidTest/kotlin/de/mannodermaus/sample/ActivityOneTest.kt b/instrumentation/sample/src/androidTest/kotlin/de/mannodermaus/sample/ActivityOneTest.kt new file mode 100644 index 00000000..31c68804 --- /dev/null +++ b/instrumentation/sample/src/androidTest/kotlin/de/mannodermaus/sample/ActivityOneTest.kt @@ -0,0 +1,59 @@ +package de.mannodermaus.sample + +import androidx.test.core.app.ActivityScenario +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import de.mannodermaus.junit5.ActivityScenarioExtension +import de.mannodermaus.junit5.sample.ActivityOne +import de.mannodermaus.junit5.sample.R +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.RepeatedTest +import org.junit.jupiter.api.RepetitionInfo +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.RegisterExtension +import org.junit.jupiter.params.ParameterizedTest +import org.junit.jupiter.params.provider.ValueSource + +class ActivityOneTest { + + @JvmField + @RegisterExtension + val scenarioExtension = ActivityScenarioExtension.launch() + + @Test + fun testExample(scenario: ActivityScenario) { + onView(withId(R.id.textView)).check(matches(withText("0"))) + } + + @ValueSource(strings = ["value1", "value2"]) + @ParameterizedTest + fun parameterizedTestExample(value: String, scenario: ActivityScenario) { + scenario.onActivity { + assertEquals(0, it.getClickCount()) + it.setButtonLabel(value) + } + + onView(withId(R.id.button)).check(matches(withText(value))) + onView(withId(R.id.button)).perform(click()) + + scenario.onActivity { + assertEquals(1, it.getClickCount()) + } + } + + @RepeatedTest(3) + fun repeatedTestExample(repetitionInfo: RepetitionInfo, scenario: ActivityScenario) { + val count = repetitionInfo.currentRepetition + + for (i in 0 until count) { + onView(withId(R.id.button)).perform(click()) + } + + scenario.onActivity { + assertEquals(count, it.getClickCount()) + } + } +} diff --git a/instrumentation/sample/src/main/kotlin/de/mannodermaus/junit5/sample/ActivityOne.kt b/instrumentation/sample/src/main/kotlin/de/mannodermaus/junit5/sample/ActivityOne.kt index 4a6ca31d..c768a914 100644 --- a/instrumentation/sample/src/main/kotlin/de/mannodermaus/junit5/sample/ActivityOne.kt +++ b/instrumentation/sample/src/main/kotlin/de/mannodermaus/junit5/sample/ActivityOne.kt @@ -1,7 +1,31 @@ package de.mannodermaus.junit5.sample import android.app.Activity +import android.os.Bundle +import android.widget.Button +import android.widget.TextView class ActivityOne : Activity() { + private val textView by lazy { findViewById(R.id.textView) } + private val button by lazy { findViewById