Skip to content

Commit 805e1d5

Browse files
committed
Update instrumentation to JUnit 6.0.0, raising its minimum API level to 35
1 parent 48cd4ef commit 805e1d5

File tree

31 files changed

+124
-103
lines changed

31 files changed

+124
-103
lines changed

build-logic/src/main/kotlin/Dependencies.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ object libs {
5555
const val junitVintageEngine = "org.junit.vintage:junit-vintage-engine:${versions.junitFramework}"
5656
const val junitPlatformCommons = "org.junit.platform:junit-platform-commons:${versions.junitFramework}"
5757
const val junitPlatformLauncher = "org.junit.platform:junit-platform-launcher:${versions.junitFramework}"
58-
const val junitPlatformRunner = "org.junit.platform:junit-platform-runner:${versions.junitFramework}"
58+
const val junitPlatformSuiteApi = "org.junit.platform:junit-platform-suite-api:${versions.junitFramework}"
5959
const val apiguardianApi = "org.apiguardian:apiguardian-api:${versions.apiGuardian}"
6060

6161
const val composeBom = "androidx.compose:compose-bom:${versions.composeBom}"

instrumentation/CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ Change Log
33

44
## Unreleased
55

6+
- Update to Kotlin 2.2
7+
- Raise minimum supported API level to 35, acknowledging the baseline shift to Java 17 in JUnit 6
8+
69
## 1.8.0 (2025-06-11)
710

811
- Compile with SDK 35

instrumentation/compose/build.gradle.kts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
22
import org.gradle.api.tasks.testing.logging.TestLogEvent
3+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
34

45
plugins {
56
id("com.android.library")
@@ -9,7 +10,13 @@ plugins {
910
id("org.jetbrains.kotlin.plugin.compose")
1011
}
1112

12-
val javaVersion = JavaVersion.VERSION_11
13+
val javaVersion = JavaVersion.VERSION_17
14+
15+
kotlin {
16+
compilerOptions {
17+
jvmTarget = JvmTarget.fromTarget(javaVersion.toString())
18+
}
19+
}
1320

1421
android {
1522
namespace = "de.mannodermaus.junit5.compose"
@@ -33,10 +40,6 @@ android {
3340
targetCompatibility = javaVersion
3441
}
3542

36-
kotlinOptions {
37-
jvmTarget = javaVersion.toString()
38-
}
39-
4043
testOptions {
4144
unitTests.isReturnDefaultValues = true
4245
targetSdk = Android.targetSdkVersion

instrumentation/core/build.gradle.kts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ plugins {
1010
id("de.mannodermaus.android-junit5").version(Artifacts.Plugin.latestStableVersion)
1111
}
1212

13-
val javaVersion = JavaVersion.VERSION_11
13+
val javaVersion = JavaVersion.VERSION_17
1414

1515
android {
1616
namespace = "de.mannodermaus.junit5"
@@ -94,7 +94,8 @@ dependencies {
9494
// This is required by the "instrumentation-runner" companion library,
9595
// since it can't provide any JUnit 5 runtime libraries itself
9696
// due to fear of prematurely incrementing the minSdkVersion requirement.
97-
runtimeOnly(libs.junitPlatformRunner)
97+
runtimeOnly(libs.junitPlatformLauncher)
98+
runtimeOnly(libs.junitPlatformSuiteApi)
9899
runtimeOnly(libs.junitJupiterEngine)
99100

100101
// This transitive dependency of JUnit 5 is required to be on the runtime classpath,

instrumentation/core/src/main/java/de/mannodermaus/junit5/ActivityScenarioExtension.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.app.Activity
55
import android.content.Intent
66
import android.os.Build
77
import android.util.Log
8+
import androidx.annotation.RequiresApi
89
import androidx.test.core.app.ActivityScenario
910
import de.mannodermaus.junit5.ActivityScenarioExtension.Companion.launch
1011
import de.mannodermaus.junit5.internal.LOG_TAG
@@ -110,7 +111,7 @@ import java.util.concurrent.locks.ReentrantLock
110111
* ```
111112
*
112113
*/
113-
@TargetApi(Build.VERSION_CODES.O)
114+
@RequiresApi(Build.VERSION_CODES.O)
114115
public class ActivityScenarioExtension<A : Activity>
115116
private constructor(private val scenarioSupplier: () -> ActivityScenario<A>) : BeforeEachCallback,
116117
AfterEachCallback, ParameterResolver {
@@ -194,7 +195,6 @@ private constructor(private val scenarioSupplier: () -> ActivityScenario<A>) : B
194195

195196
/* Private */
196197

197-
@Suppress("InconsistentCommentForJavaParameter")
198198
private fun ExtensionContext.acquireLock(state: Boolean) {
199199
// No need to do anything unless parallelism is enabled
200200
if (executionMode != ExecutionMode.CONCURRENT) {
@@ -209,7 +209,7 @@ private constructor(private val scenarioSupplier: () -> ActivityScenario<A>) : B
209209
// Create a global lock for restricting test execution to one-by-one;
210210
// this is necessary to ensure that only one ActivityScenario is ever active at a time,
211211
// preventing violations of Android's instrumentation and Espresso
212-
val lock = store.getOrComputeIfAbsent(
212+
val lock = store.computeIfAbsent(
213213
/* key = */ LOCK_KEY,
214214
/* defaultCreator = */ { ReentrantLock() },
215215
/* requiredType = */ ReentrantLock::class.java,
@@ -223,7 +223,7 @@ private constructor(private val scenarioSupplier: () -> ActivityScenario<A>) : B
223223
}
224224

225225
private fun logConcurrentExecutionWarningOnce(store: ExtensionContext.Store) {
226-
store.getOrComputeIfAbsent(WARNING_KEY) {
226+
store.computeIfAbsent(WARNING_KEY) {
227227
setOf(
228228
" [WARNING!] UI tests using ActivityScenarioExtension should not be executed in CONCURRENT mode.",
229229
" We will try to disable parallelism for Espresso tests, but this may be error-prone",
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package de.mannodermaus.junit5
22

33
/**
4-
* The minimum Android API level on which JUnit 5 tests may be executed.
4+
* The minimum Android API level on which JUnit Framework tests may be executed.
55
* Trying to launch a test on an older device will simply mark it as 'skipped'.
66
*/
7-
public const val JUNIT5_MINIMUM_SDK_VERSION: Int = 26
7+
public const val JUNIT5_MINIMUM_SDK_VERSION: Int = 35

instrumentation/core/src/main/java/de/mannodermaus/junit5/internal/DisabledOnSdkVersionCondition.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package de.mannodermaus.junit5.internal
22

33
import android.annotation.TargetApi
44
import android.os.Build
5+
import androidx.annotation.RequiresApi
56
import de.mannodermaus.junit5.condition.DisabledOnSdkVersion
67
import de.mannodermaus.junit5.internal.EnabledOnSdkVersionCondition.Companion.disabled
78
import de.mannodermaus.junit5.internal.EnabledOnSdkVersionCondition.Companion.enabled
@@ -18,7 +19,7 @@ internal class DisabledOnSdkVersionCondition : ExecutionCondition {
1819
ConditionEvaluationResult.enabled("@DisabledOnSdkVersion is not present")
1920
}
2021

21-
@TargetApi(24)
22+
@RequiresApi(24)
2223
override fun evaluateExecutionCondition(context: ExtensionContext): ConditionEvaluationResult {
2324
val optional = findAnnotation(context.element, DisabledOnSdkVersion::class.java)
2425

instrumentation/core/src/main/java/de/mannodermaus/junit5/internal/EnabledOnSdkVersionCondition.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package de.mannodermaus.junit5.internal
22

33
import android.annotation.TargetApi
44
import android.os.Build
5+
import androidx.annotation.RequiresApi
56
import de.mannodermaus.junit5.condition.EnabledOnSdkVersion
67
import org.junit.jupiter.api.extension.ConditionEvaluationResult
78
import org.junit.jupiter.api.extension.ExecutionCondition
@@ -24,7 +25,7 @@ internal class EnabledOnSdkVersionCondition : ExecutionCondition {
2425
}
2526
}
2627

27-
@TargetApi(24)
28+
@RequiresApi(24)
2829
override fun evaluateExecutionCondition(context: ExtensionContext): ConditionEvaluationResult {
2930
val optional = findAnnotation(context.element, EnabledOnSdkVersion::class.java)
3031

instrumentation/core/src/test/java/de/mannodermaus/junit5/condition/DisabledOnSdkVersionConditionTests.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ class DisabledOnSdkVersionConditionTests : AbstractExecutionConditionTests() {
3838
*/
3939
@Test
4040
fun disabledBecauseMinApiIsMatched() {
41-
withApiLevel(26) {
41+
withApiLevel(35) {
4242
evaluateCondition()
4343
assertDisabled()
44-
assertReasonEquals("Disabled on API 26")
44+
assertReasonEquals("Disabled on API 35")
4545
}
4646
}
4747

@@ -62,10 +62,10 @@ class DisabledOnSdkVersionConditionTests : AbstractExecutionConditionTests() {
6262
*/
6363
@Test
6464
fun disabledBecauseApiIsInValidRange() {
65-
withApiLevel(26) {
65+
withApiLevel(35) {
6666
evaluateCondition()
6767
assertDisabled()
68-
assertReasonEquals("Disabled on API 26")
68+
assertReasonEquals("Disabled on API 35")
6969
}
7070
}
7171

@@ -74,10 +74,10 @@ class DisabledOnSdkVersionConditionTests : AbstractExecutionConditionTests() {
7474
*/
7575
@Test
7676
fun enabledBecauseMinApiLowEnough() {
77-
withApiLevel(26) {
77+
withApiLevel(35) {
7878
evaluateCondition()
7979
assertEnabled()
80-
assertReasonEquals("Enabled on API 26")
80+
assertReasonEquals("Enabled on API 35")
8181
}
8282
}
8383

instrumentation/core/src/test/java/de/mannodermaus/junit5/condition/DisabledOnSdkVersionIntegrationTests.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class DisabledOnSdkVersionIntegrationTests {
2323
}
2424

2525
@Disabled("Used by DisabledOnSdkVersionConditionTests only")
26-
@DisabledOnSdkVersion(until = 26)
26+
@DisabledOnSdkVersion(until = 35)
2727
@Test
2828
fun disabledBecauseMaxApiIsMatched() {
2929
}

0 commit comments

Comments
 (0)