From 56c16f64cf9bb09530e9fdfb9195db188c322d0b Mon Sep 17 00:00:00 2001 From: Philip Porto Schiffer Date: Sat, 10 Oct 2026 21:53:23 +0200 Subject: [PATCH] Build with Java 21 and run Robolectric on Android 16 Robolectric needs Java 21 for current Android SDKs, so every test was pinned to SDK 33 to suit the Java 17 toolchain. The toolchain, bytecode target and CI now use Java 21, and robolectric.properties runs all tests on SDK 36 (Android 17, the app's target, still breaks Compose input injection in androidx.test). The test JVM gets the java.io/jdk.internal.access access Robolectric needs on Java 17+, and a guard test checks the SDK. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/android.yml | 4 ++-- CLAUDE.md | 2 +- app/build.gradle | 10 +++++++--- .../devdrawer/DialogStringResourcesTest.kt | 3 +-- .../de/psdev/devdrawer/GermanTranslationTest.kt | 3 +-- .../de/psdev/devdrawer/RobolectricSdkTest.kt | 17 +++++++++++++++++ .../de/psdev/devdrawer/about/AboutScreenTest.kt | 3 --- .../analytics/AnalyticsOptInCardTest.kt | 3 --- .../de/psdev/devdrawer/apps/AppMatchingTest.kt | 3 --- .../psdev/devdrawer/appwidget/AppScreensTest.kt | 3 --- .../appwidget/WidgetContentLoaderTest.kt | 3 --- .../devdrawer/appwidget/WidgetDeletionTest.kt | 3 --- .../devdrawer/appwidget/WidgetTapHandlerTest.kt | 3 --- .../glance/DevDrawerWidgetContentTest.kt | 3 --- .../devdrawer/database/MigrationFrom3To4Test.kt | 3 --- .../profiles/WidgetProfilesViewModelTest.kt | 3 --- .../ui/editor/AddAppSignatureFilterSheetTest.kt | 3 --- .../profiles/ui/editor/DialogButtonLabelTest.kt | 3 --- .../profiles/ui/editor/FilterTypeLabelTest.kt | 3 --- .../ui/editor/PackagePatternSheetTest.kt | 3 --- .../ui/editor/WidgetProfileEditorScreenTest.kt | 3 --- .../editor/WidgetProfileEditorViewModelTest.kt | 3 --- .../ui/list/WidgetProfileListScreenTest.kt | 3 --- .../receivers/PinWidgetSuccessReceiverTest.kt | 3 --- .../devdrawer/settings/SettingsScreenTest.kt | 3 --- .../devdrawer/settings/SortOrderLabelTest.kt | 3 --- .../de/psdev/devdrawer/ui/theme/ShapeTest.kt | 3 --- .../ui/theme/WidgetHeaderPaletteTest.kt | 3 --- .../de/psdev/devdrawer/utils/ColorsKtTest.kt | 3 +-- .../widgets/ui/editor/WidgetEditorScreenTest.kt | 3 --- .../ui/editor/WidgetEditorViewModelTest.kt | 3 --- .../widgets/ui/list/WidgetListScreenTest.kt | 3 --- .../ui/list/WidgetListScreenViewModelTest.kt | 3 --- .../ui/setup/WidgetSetupViewModelTest.kt | 3 --- app/src/test/resources/robolectric.properties | 3 +++ 35 files changed, 33 insertions(+), 93 deletions(-) create mode 100644 app/src/test/java/de/psdev/devdrawer/RobolectricSdkTest.kt create mode 100644 app/src/test/resources/robolectric.properties diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index bb1b1f17..37ea4d2e 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -17,10 +17,10 @@ jobs: steps: - uses: actions/checkout@v7 - - name: set up JDK 17 + - name: set up JDK 21 uses: actions/setup-java@v6 with: - java-version: '17' + java-version: '21' distribution: 'temurin' - name: Set up Gradle uses: gradle/actions/setup-gradle@v6 diff --git a/CLAUDE.md b/CLAUDE.md index 2bed59ed..068b79d9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,7 @@ app filtering by package name/signature/regex, and dark mode. - **Package**: `de.psdev.devdrawer` - **Min SDK**: 26 | **Target/Compile SDK**: 37 -- **Language**: Kotlin | **JVM target**: 17 +- **Language**: Kotlin | **JVM target**: 21 (JDK 21 toolchain; CI uses Temurin 21) - **Debug build suffix**: `.debug` (so debug and release can coexist on device) ## Common Commands diff --git a/app/build.gradle b/app/build.gradle index 4cd92090..39f1e498 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -37,16 +37,20 @@ android { buildConfig true } compileOptions { - targetCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_21 } kotlin { compilerOptions { - jvmTarget = JvmTarget.JVM_17 + jvmTarget = JvmTarget.JVM_21 } } testOptions { unitTests { includeAndroidResources = true + all { + // Robolectric reaches into FileDescriptor internals, which Java 17+ only allows when opened explicitly. + jvmArgs '--add-opens=java.base/java.io=ALL-UNNAMED', '--add-exports=java.base/jdk.internal.access=ALL-UNNAMED' + } } } sourceSets { @@ -106,7 +110,7 @@ android { java { toolchain { - languageVersion = JavaLanguageVersion.of(17) + languageVersion = JavaLanguageVersion.of(21) } } diff --git a/app/src/test/java/de/psdev/devdrawer/DialogStringResourcesTest.kt b/app/src/test/java/de/psdev/devdrawer/DialogStringResourcesTest.kt index 1ad131fc..e15f443b 100644 --- a/app/src/test/java/de/psdev/devdrawer/DialogStringResourcesTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/DialogStringResourcesTest.kt @@ -26,8 +26,7 @@ import org.robolectric.annotation.Config * Dialog text comes from string resources, so it is translated: under a German locale every dialog reads German. */ @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33], qualifiers = "de") +@Config(qualifiers = "de") class DialogStringResourcesTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/GermanTranslationTest.kt b/app/src/test/java/de/psdev/devdrawer/GermanTranslationTest.kt index 8ac4a1b7..c42f160c 100644 --- a/app/src/test/java/de/psdev/devdrawer/GermanTranslationTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/GermanTranslationTest.kt @@ -9,8 +9,7 @@ import org.robolectric.RuntimeEnvironment import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33], qualifiers = "de") +@Config(qualifiers = "de") class GermanTranslationTest { private val context: Context = RuntimeEnvironment.getApplication() diff --git a/app/src/test/java/de/psdev/devdrawer/RobolectricSdkTest.kt b/app/src/test/java/de/psdev/devdrawer/RobolectricSdkTest.kt new file mode 100644 index 00000000..74986e75 --- /dev/null +++ b/app/src/test/java/de/psdev/devdrawer/RobolectricSdkTest.kt @@ -0,0 +1,17 @@ +package de.psdev.devdrawer + +import android.os.Build +import org.junit.Assert.assertEquals +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner + +/** Guards robolectric.properties: the tests should run on a current Android, not an old fallback. */ +@RunWith(RobolectricTestRunner::class) +class RobolectricSdkTest { + + @Test + fun `given the test setup, when a Robolectric test runs, then it runs on Android 16`() { + assertEquals(36, Build.VERSION.SDK_INT) + } +} diff --git a/app/src/test/java/de/psdev/devdrawer/about/AboutScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/about/AboutScreenTest.kt index 719b7803..8c38c59f 100644 --- a/app/src/test/java/de/psdev/devdrawer/about/AboutScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/about/AboutScreenTest.kt @@ -12,12 +12,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf -import org.robolectric.annotation.Config import org.robolectric.shadows.ShadowToast @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class AboutScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/analytics/AnalyticsOptInCardTest.kt b/app/src/test/java/de/psdev/devdrawer/analytics/AnalyticsOptInCardTest.kt index b8543580..3a236e48 100644 --- a/app/src/test/java/de/psdev/devdrawer/analytics/AnalyticsOptInCardTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/analytics/AnalyticsOptInCardTest.kt @@ -15,11 +15,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class AnalyticsOptInCardTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/apps/AppMatchingTest.kt b/app/src/test/java/de/psdev/devdrawer/apps/AppMatchingTest.kt index 816bd671..30b0f1c9 100644 --- a/app/src/test/java/de/psdev/devdrawer/apps/AppMatchingTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/apps/AppMatchingTest.kt @@ -10,11 +10,8 @@ import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class AppMatchingTest { private val devDrawer = PackageHashInfo("de.psdev.devdrawer", firstInstallTime = 1, lastUpdateTime = 30, signatureHashSha256 = "key-a") diff --git a/app/src/test/java/de/psdev/devdrawer/appwidget/AppScreensTest.kt b/app/src/test/java/de/psdev/devdrawer/appwidget/AppScreensTest.kt index 64729338..8dcdde91 100644 --- a/app/src/test/java/de/psdev/devdrawer/appwidget/AppScreensTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/appwidget/AppScreensTest.kt @@ -11,11 +11,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class AppScreensTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetContentLoaderTest.kt b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetContentLoaderTest.kt index eb7c52dc..c70009f9 100644 --- a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetContentLoaderTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetContentLoaderTest.kt @@ -12,11 +12,8 @@ import org.junit.Assert.assertNull import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetContentLoaderTest { private val zeta = PackageHashInfo("com.example.zeta", firstInstallTime = 1, lastUpdateTime = 30, signatureHashSha256 = "key") diff --git a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetDeletionTest.kt b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetDeletionTest.kt index 4b1c0c80..da4e9adf 100644 --- a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetDeletionTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetDeletionTest.kt @@ -20,11 +20,8 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetDeletionTest { private val application: Application = ApplicationProvider.getApplicationContext() diff --git a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetTapHandlerTest.kt b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetTapHandlerTest.kt index 98b01892..05e56563 100644 --- a/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetTapHandlerTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/appwidget/WidgetTapHandlerTest.kt @@ -14,12 +14,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows.shadowOf -import org.robolectric.annotation.Config import org.robolectric.shadows.ShadowToast @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetTapHandlerTest { private val application: Application = ApplicationProvider.getApplicationContext() diff --git a/app/src/test/java/de/psdev/devdrawer/appwidget/glance/DevDrawerWidgetContentTest.kt b/app/src/test/java/de/psdev/devdrawer/appwidget/glance/DevDrawerWidgetContentTest.kt index 8401fcae..d08e7f55 100644 --- a/app/src/test/java/de/psdev/devdrawer/appwidget/glance/DevDrawerWidgetContentTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/appwidget/glance/DevDrawerWidgetContentTest.kt @@ -10,11 +10,8 @@ import de.psdev.devdrawer.database.WidgetHeaderColor import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class DevDrawerWidgetContentTest { private fun state(apps: List, hiddenAppCount: Int = 0) = WidgetUiState( diff --git a/app/src/test/java/de/psdev/devdrawer/database/MigrationFrom3To4Test.kt b/app/src/test/java/de/psdev/devdrawer/database/MigrationFrom3To4Test.kt index e3210406..03f8f846 100644 --- a/app/src/test/java/de/psdev/devdrawer/database/MigrationFrom3To4Test.kt +++ b/app/src/test/java/de/psdev/devdrawer/database/MigrationFrom3To4Test.kt @@ -9,11 +9,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class MigrationFrom3To4Test { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/WidgetProfilesViewModelTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/WidgetProfilesViewModelTest.kt index 762b3551..163f7a21 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/WidgetProfilesViewModelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/WidgetProfilesViewModelTest.kt @@ -28,12 +28,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment -import org.robolectric.annotation.Config @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetProfilesViewModelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/AddAppSignatureFilterSheetTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/AddAppSignatureFilterSheetTest.kt index 1e58be07..cbbfa2c6 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/AddAppSignatureFilterSheetTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/AddAppSignatureFilterSheetTest.kt @@ -12,11 +12,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class AddAppSignatureFilterSheetTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/DialogButtonLabelTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/DialogButtonLabelTest.kt index 81950cce..b2765b8a 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/DialogButtonLabelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/DialogButtonLabelTest.kt @@ -9,14 +9,11 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config /** * Dialog buttons use the string resources' sentence case ("Cancel"), not upper-cased labels ("CANCEL"). */ @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class DialogButtonLabelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/FilterTypeLabelTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/FilterTypeLabelTest.kt index 49bd9265..84b8a610 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/FilterTypeLabelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/FilterTypeLabelTest.kt @@ -10,15 +10,12 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config /** * The filter type labels ("Package name", "App signature") are shown in sentence case, * neither upper-cased ("PACKAGE NAME") nor lower-cased ("package name"). */ @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class FilterTypeLabelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/PackagePatternSheetTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/PackagePatternSheetTest.kt index 52ea5ec9..ae3095b1 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/PackagePatternSheetTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/PackagePatternSheetTest.kt @@ -14,11 +14,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class PackagePatternSheetTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorScreenTest.kt index bae51506..159f639f 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorScreenTest.kt @@ -9,11 +9,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetProfileEditorScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorViewModelTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorViewModelTest.kt index 1b4d64d4..8ff23e46 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorViewModelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/editor/WidgetProfileEditorViewModelTest.kt @@ -27,12 +27,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment -import org.robolectric.annotation.Config @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetProfileEditorViewModelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/profiles/ui/list/WidgetProfileListScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/profiles/ui/list/WidgetProfileListScreenTest.kt index 9558d9ac..1d209be8 100644 --- a/app/src/test/java/de/psdev/devdrawer/profiles/ui/list/WidgetProfileListScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/profiles/ui/list/WidgetProfileListScreenTest.kt @@ -8,11 +8,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetProfileListScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/receivers/PinWidgetSuccessReceiverTest.kt b/app/src/test/java/de/psdev/devdrawer/receivers/PinWidgetSuccessReceiverTest.kt index f97d7dc6..b607bc61 100644 --- a/app/src/test/java/de/psdev/devdrawer/receivers/PinWidgetSuccessReceiverTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/receivers/PinWidgetSuccessReceiverTest.kt @@ -9,11 +9,8 @@ import org.junit.Assert.assertNull import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class PinWidgetSuccessReceiverTest { @After diff --git a/app/src/test/java/de/psdev/devdrawer/settings/SettingsScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/settings/SettingsScreenTest.kt index c86b143a..cb95e258 100644 --- a/app/src/test/java/de/psdev/devdrawer/settings/SettingsScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/settings/SettingsScreenTest.kt @@ -8,11 +8,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class SettingsScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/settings/SortOrderLabelTest.kt b/app/src/test/java/de/psdev/devdrawer/settings/SortOrderLabelTest.kt index e9acbb1f..d5d843a2 100644 --- a/app/src/test/java/de/psdev/devdrawer/settings/SortOrderLabelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/settings/SortOrderLabelTest.kt @@ -7,11 +7,8 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class SortOrderLabelTest { @Test diff --git a/app/src/test/java/de/psdev/devdrawer/ui/theme/ShapeTest.kt b/app/src/test/java/de/psdev/devdrawer/ui/theme/ShapeTest.kt index 126689a7..5a7eb115 100644 --- a/app/src/test/java/de/psdev/devdrawer/ui/theme/ShapeTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/ui/theme/ShapeTest.kt @@ -8,11 +8,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class ShapeTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/ui/theme/WidgetHeaderPaletteTest.kt b/app/src/test/java/de/psdev/devdrawer/ui/theme/WidgetHeaderPaletteTest.kt index ca4f976a..0c661c3c 100644 --- a/app/src/test/java/de/psdev/devdrawer/ui/theme/WidgetHeaderPaletteTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/ui/theme/WidgetHeaderPaletteTest.kt @@ -8,11 +8,8 @@ import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetHeaderPaletteTest { private val fixedColors = WidgetHeaderColor.entries - WidgetHeaderColor.DYNAMIC diff --git a/app/src/test/java/de/psdev/devdrawer/utils/ColorsKtTest.kt b/app/src/test/java/de/psdev/devdrawer/utils/ColorsKtTest.kt index fb07d24d..1c5f83c9 100644 --- a/app/src/test/java/de/psdev/devdrawer/utils/ColorsKtTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/utils/ColorsKtTest.kt @@ -9,8 +9,7 @@ import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(manifest = Config.NONE, sdk = [33]) +@Config(manifest = Config.NONE) class ColorsKtTest { @Test diff --git a/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorScreenTest.kt index 57798aaf..516c7512 100644 --- a/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorScreenTest.kt @@ -9,11 +9,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetEditorScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorViewModelTest.kt b/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorViewModelTest.kt index dffd89d2..71a3cbb4 100644 --- a/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorViewModelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/widgets/ui/editor/WidgetEditorViewModelTest.kt @@ -24,12 +24,9 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetEditorViewModelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenTest.kt b/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenTest.kt index f5f0bea1..b2671ebe 100644 --- a/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenTest.kt @@ -9,11 +9,8 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner -import org.robolectric.annotation.Config @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetListScreenTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenViewModelTest.kt b/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenViewModelTest.kt index 0f01bee5..764dc410 100644 --- a/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenViewModelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/widgets/ui/list/WidgetListScreenViewModelTest.kt @@ -20,12 +20,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment -import org.robolectric.annotation.Config @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetListScreenViewModelTest { @get:Rule diff --git a/app/src/test/java/de/psdev/devdrawer/widgets/ui/setup/WidgetSetupViewModelTest.kt b/app/src/test/java/de/psdev/devdrawer/widgets/ui/setup/WidgetSetupViewModelTest.kt index 739af6c0..03ca8374 100644 --- a/app/src/test/java/de/psdev/devdrawer/widgets/ui/setup/WidgetSetupViewModelTest.kt +++ b/app/src/test/java/de/psdev/devdrawer/widgets/ui/setup/WidgetSetupViewModelTest.kt @@ -24,12 +24,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.RuntimeEnvironment -import org.robolectric.annotation.Config @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) -// SDK 36 requires Java 21; use SDK 33 which is compatible with the project's Java 17 toolchain. -@Config(sdk = [33]) class WidgetSetupViewModelTest { @get:Rule diff --git a/app/src/test/resources/robolectric.properties b/app/src/test/resources/robolectric.properties new file mode 100644 index 00000000..6acdc3b7 --- /dev/null +++ b/app/src/test/resources/robolectric.properties @@ -0,0 +1,3 @@ +# Robolectric runs the tests on Android 16 (SDK 36). The app targets SDK 37, but Compose UI tests can't inject input +# there yet: androidx.test calls InputManager.getInstance(), which Android 17 removed. +sdk=36