Small chore under #373. Compose BOM 2026.06.00 deprecates the v1 test-rule factories in favour of the androidx.compose.ui.test.junit4.v2 package (v2 uses StandardTestDispatcher instead of UnconfinedTestDispatcher). The new JVM PoC already uses v2; migrate the remaining existing usages so the deprecation warnings clear.
Scope: replace androidx.compose.ui.test.junit4.createComposeRule / createAndroidComposeRule with the ...junit4.v2. equivalents across the test/androidTest source sets. Known v1 usages flagged by the compiler include (androidTest) AccountSettingsScreenTest, ContactAutocompleteRowTest, SettingsScreenTest, SignatureEditScreenTest, SignaturesScreenTest — sweep for all of them (createAndroidComposeRule is used widely in androidTest).
Watch for: the dispatcher change — v2 queues effects rather than running them eagerly, so a few tests may need an explicit waitForIdle() / mainClock advance or runOnIdle after setContent/actions. Fix any that surface.
Acceptance: no createComposeRule/createAndroidComposeRule deprecation warnings remain; compileDebugAndroidTestKotlin + testDebugUnitTest green; the changed instrumented classes pass on a local emulator (preflight local_instrumented.py).
Part of the Robolectric Compose umbrella #373. Infra + PoC landed in PR #375 (Robolectric 4.16.1, testOptions.unitTests.isIncludeAndroidResources=true, src/test/resources/robolectric.properties pins sdk=36, v2 androidx.compose.ui.test.junit4.v2.createComposeRule).
Pattern to follow:app/src/test/kotlin/org/libremail/ui/onboarding/AddAnotherAccountScreenJvmTest.kt — @RunWith(RobolectricTestRunner) + @GraphicsMode(GraphicsMode.Mode.NATIVE) + @Config(sdk = [36]), v2 createComposeRule(), in the test (JVM) source set — NOT androidTest.
Acceptance criteria
Robolectric JVM Compose tests for each file below, covering its render + interaction/branch logic.
Remove the matching **/<File>* glob(s) from jacocoNonJvmTestableSurface in app/build.gradle.kts as each file gains genuine JVM coverage.
Keep the existing instrumented androidTest test(s) — the instrumented E2E stays.
Do NOT raise the JaCoCo floor (jacocoLineCoverageFloor, currently 0.79) — the re-ratchet is the final #373 step.
Small chore under #373. Compose BOM 2026.06.00 deprecates the v1 test-rule factories in favour of the `androidx.compose.ui.test.junit4.v2` package (v2 uses `StandardTestDispatcher` instead of `UnconfinedTestDispatcher`). The new JVM PoC already uses v2; migrate the remaining **existing** usages so the deprecation warnings clear.
**Scope:** replace `androidx.compose.ui.test.junit4.createComposeRule` / `createAndroidComposeRule` with the `...junit4.v2.` equivalents across the test/androidTest source sets. Known v1 usages flagged by the compiler include (androidTest) AccountSettingsScreenTest, ContactAutocompleteRowTest, SettingsScreenTest, SignatureEditScreenTest, SignaturesScreenTest — sweep for all of them (`createAndroidComposeRule` is used widely in `androidTest`).
**Watch for:** the dispatcher change — v2 queues effects rather than running them eagerly, so a few tests may need an explicit `waitForIdle()` / `mainClock` advance or `runOnIdle` after `setContent`/actions. Fix any that surface.
**Acceptance:** no `createComposeRule`/`createAndroidComposeRule` deprecation warnings remain; `compileDebugAndroidTestKotlin` + `testDebugUnitTest` green; the changed instrumented classes pass on a local emulator (preflight `local_instrumented.py`).
---
Part of the Robolectric Compose umbrella #373. Infra + PoC landed in PR #375 (Robolectric 4.16.1, `testOptions.unitTests.isIncludeAndroidResources=true`, `src/test/resources/robolectric.properties` pins `sdk=36`, v2 `androidx.compose.ui.test.junit4.v2.createComposeRule`).
**Pattern to follow:** `app/src/test/kotlin/org/libremail/ui/onboarding/AddAnotherAccountScreenJvmTest.kt` — `@RunWith(RobolectricTestRunner)` + `@GraphicsMode(GraphicsMode.Mode.NATIVE)` + `@Config(sdk = [36])`, v2 `createComposeRule()`, in the **`test`** (JVM) source set — NOT `androidTest`.
**Acceptance criteria**
- Robolectric JVM Compose tests for each file below, covering its render + interaction/branch logic.
- Remove the matching `**/<File>*` glob(s) from `jacocoNonJvmTestableSurface` in `app/build.gradle.kts` as each file gains genuine JVM coverage.
- Keep the existing instrumented `androidTest` test(s) — the instrumented E2E stays.
- **Do NOT raise the JaCoCo floor** (`jacocoLineCoverageFloor`, currently 0.79) — the re-ratchet is the final #373 step.
- Fast gate green: `assembleDebug` + `testDebugUnitTest` + `jacocoTestCoverageVerification` + `compileDebugAndroidTestKotlin` + `lintDebug` + `ktlintCheck` + `detekt`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Small chore under #373. Compose BOM 2026.06.00 deprecates the v1 test-rule factories in favour of the
androidx.compose.ui.test.junit4.v2package (v2 usesStandardTestDispatcherinstead ofUnconfinedTestDispatcher). The new JVM PoC already uses v2; migrate the remaining existing usages so the deprecation warnings clear.Scope: replace
androidx.compose.ui.test.junit4.createComposeRule/createAndroidComposeRulewith the...junit4.v2.equivalents across the test/androidTest source sets. Known v1 usages flagged by the compiler include (androidTest) AccountSettingsScreenTest, ContactAutocompleteRowTest, SettingsScreenTest, SignatureEditScreenTest, SignaturesScreenTest — sweep for all of them (createAndroidComposeRuleis used widely inandroidTest).Watch for: the dispatcher change — v2 queues effects rather than running them eagerly, so a few tests may need an explicit
waitForIdle()/mainClockadvance orrunOnIdleaftersetContent/actions. Fix any that surface.Acceptance: no
createComposeRule/createAndroidComposeRuledeprecation warnings remain;compileDebugAndroidTestKotlin+testDebugUnitTestgreen; the changed instrumented classes pass on a local emulator (preflightlocal_instrumented.py).Part of the Robolectric Compose umbrella #373. Infra + PoC landed in PR #375 (Robolectric 4.16.1,
testOptions.unitTests.isIncludeAndroidResources=true,src/test/resources/robolectric.propertiespinssdk=36, v2androidx.compose.ui.test.junit4.v2.createComposeRule).Pattern to follow:
app/src/test/kotlin/org/libremail/ui/onboarding/AddAnotherAccountScreenJvmTest.kt—@RunWith(RobolectricTestRunner)+@GraphicsMode(GraphicsMode.Mode.NATIVE)+@Config(sdk = [36]), v2createComposeRule(), in thetest(JVM) source set — NOTandroidTest.Acceptance criteria
**/<File>*glob(s) fromjacocoNonJvmTestableSurfaceinapp/build.gradle.ktsas each file gains genuine JVM coverage.androidTesttest(s) — the instrumented E2E stays.jacocoLineCoverageFloor, currently 0.79) — the re-ratchet is the final #373 step.assembleDebug+testDebugUnitTest+jacocoTestCoverageVerification+compileDebugAndroidTestKotlin+lintDebug+ktlintCheck+detekt.