diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index dc63f0a..507f5b0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/setup-java@v4 with: distribution: 'zulu' - java-version: 17 + java-version: 21 - name: Run tests run: ./gradlew -p mockposable test diff --git a/build.gradle.kts b/build.gradle.kts index dfde62c..5637109 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.jetbrains.kotlin.gradle.dsl.JvmTarget buildscript { repositories { @@ -9,7 +10,6 @@ buildscript { } dependencies { - classpath(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) classpath(libs.android.gradle) classpath(libs.paparazzi) classpath("com.jeppeman.mockposable:mockposable-gradle") @@ -30,7 +30,7 @@ allprojects { tasks.withType().configureEach { kotlinOptions { - jvmTarget = "17" + jvmTarget = JvmTarget.JVM_21.target } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 14c3fa9..845c4aa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] -kotlin = '2.0.20' -compose-ui = '1.6.8' -google-ksp = '2.0.20-1.0.24' -activity = '1.9.0' -agp = '8.5.0' +kotlin = '2.1.0' +compose-ui = '1.7.5' +google-ksp = '2.1.0-1.0.29' # https://mvnrepository.com/artifact/com.google.devtools.ksp/com.google.devtools.ksp.gradle.plugin?repo=central +activity = '1.9.3' +agp = '8.5.2' espresso = '3.6.1' mockk = '1.13.12' mockito = '4.8.1' @@ -15,18 +15,18 @@ kotlin-compiler = { module = 'org.jetbrains.kotlin:kotlin-compiler-embeddable', androidx-activity = { module = 'androidx.activity:activity', version.ref = 'activity' } androidx-appcompat = { module = 'androidx.appcompat:appcompat', version = '1.7.0' } androidx-activity-compose = { module = 'androidx.activity:activity-compose', version.ref = 'activity' } -androidx-lifecycle-viewmodel-compose = { module = 'androidx.lifecycle:lifecycle-viewmodel-compose', version = '2.8.2' } -androidx-test-runner = { module = 'androidx.test:runner', version = '1.6.1'} +androidx-lifecycle-viewmodel-compose = { module = 'androidx.lifecycle:lifecycle-viewmodel-compose', version = '2.8.7' } +androidx-test-runner = { module = 'androidx.test:runner', version = '1.6.2'} androidx-test-espresso-core = { module = 'androidx.test.espresso:espresso-core', version.ref = 'espresso' } androidx-test-annotation = { module = 'androidx.test:annotation', version = '1.0.1' } -androidx-fragment-testing = { module = 'androidx.fragment:fragment-testing', version = '1.8.1' } +androidx-fragment-testing = { module = 'androidx.fragment:fragment-testing', version = '1.8.5' } compose-compiler = { module = 'org.jetbrains.kotlin:kotlin-compose-compiler-plugin-embeddable', version.ref = 'kotlin' } compose-compiler-gradle = { module = 'org.jetbrains.kotlin.plugin.compose:org.jetbrains.kotlin.plugin.compose.gradle.plugin', version.ref = 'kotlin' } compose-runtime = { module = 'org.jetbrains.compose.runtime:runtime', version = '1.6.11' } compose-ui = { module = 'androidx.compose.ui:ui', version.ref = 'compose-ui' } -compose-material = { module = 'androidx.compose.material:material', version = '1.6.8' } -compose-foundation = { module = 'androidx.compose.foundation:foundation', version = '1.6.8' } +compose-material = { module = 'androidx.compose.material:material', version = '1.7.5' } +compose-foundation = { module = 'androidx.compose.foundation:foundation', version = '1.7.5' } compose-ui-test-junit4 = { module = 'androidx.compose.ui:ui-test-junit4', version.ref = 'compose-ui' } compose-ui-test-manifest = { module = 'androidx.compose.ui:ui-test-manifest', version.ref = 'compose-ui' } @@ -38,7 +38,7 @@ autoservice-annotations = { module = 'com.google.auto.service:auto-service-annot google-ksp = { module = 'com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin', version.ref = 'google-ksp' } # compile-testing = { module = 'com.github.tschuchortdev:kotlin-compile-testing', version = '1.5.0' } -compile-testing = { module = 'dev.zacsweers.kctfork:core', version = '0.5.1' } +compile-testing = { module = 'dev.zacsweers.kctfork:core', version = '0.7.0' } junit = { module = 'androidx.test.ext:junit', version = '1.1.3' } @@ -51,7 +51,7 @@ hamcrest = { module = 'org.hamcrest:hamcrest', version = '2.2' } mockk-core = { module = 'io.mockk:mockk', version.ref = 'mockk' } mockk-android = { module = 'io.mockk:mockk-android', version.ref = 'mockk' } -mockito-kotlin = { module = 'org.mockito.kotlin:mockito-kotlin', version = '4.0.0' } +mockito-kotlin = { module = 'org.mockito.kotlin:mockito-kotlin', version = '5.4.0' } mockito-inline = { module = 'org.mockito:mockito-inline', version.ref = 'mockito' } mockito-android = { module = 'org.mockito:mockito-android', version.ref = 'mockito' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index b31bc20..6634e60 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Oct 18 11:21:10 CEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/integration-tests/android/build.gradle.kts b/integration-tests/android/build.gradle.kts index 42089a9..d575950 100644 --- a/integration-tests/android/build.gradle.kts +++ b/integration-tests/android/build.gradle.kts @@ -12,7 +12,6 @@ plugins { mockposable { plugins = listOf(MOCKK, MOCKITO, COMPOSE_UI) - composeCompilerPluginVersion = libs.versions.kotlin.get() } android { @@ -51,8 +50,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } } diff --git a/mockposable/build.gradle.kts b/mockposable/build.gradle.kts index 6763362..c688c56 100644 --- a/mockposable/build.gradle.kts +++ b/mockposable/build.gradle.kts @@ -1,5 +1,6 @@ import org.gradle.api.tasks.testing.logging.TestLogEvent import org.gradle.api.tasks.testing.logging.TestExceptionFormat +import org.jetbrains.kotlin.gradle.dsl.JvmTarget buildscript { repositories { @@ -10,7 +11,6 @@ buildscript { } dependencies { - classpath(files(libs.javaClass.superclass.protectionDomain.codeSource.location)) classpath(libs.android.gradle) classpath(libs.google.ksp) } @@ -30,7 +30,7 @@ allprojects { tasks.withType().configureEach { kotlinOptions { - jvmTarget = "17" + jvmTarget = JvmTarget.JVM_21.target } } diff --git a/mockposable/mockposable-compiler/build.gradle.kts b/mockposable/mockposable-compiler/build.gradle.kts index b2fd0b0..5679673 100644 --- a/mockposable/mockposable-compiler/build.gradle.kts +++ b/mockposable/mockposable-compiler/build.gradle.kts @@ -16,8 +16,8 @@ plugins { } java { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } dependencies { diff --git a/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockKIrGenerationExtension.kt b/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockKIrGenerationExtension.kt index eae5ad9..9058377 100644 --- a/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockKIrGenerationExtension.kt +++ b/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockKIrGenerationExtension.kt @@ -1,6 +1,7 @@ package com.jeppeman.mockposable.compiler import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext +import org.jetbrains.kotlin.backend.common.IrValidatorConfig import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.common.validateIr @@ -48,7 +49,8 @@ class MockKIrGenerationExtension( performBasicIrValidation( moduleFragment, moduleFragment.irBuiltins, - "MockK transformation" + "MockK transformation", + IrValidatorConfig(), ) } } diff --git a/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockitoIrGenerationExtension.kt b/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockitoIrGenerationExtension.kt index f5704da..e01d7ac 100644 --- a/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockitoIrGenerationExtension.kt +++ b/mockposable/mockposable-compiler/src/main/java/com/jeppeman/mockposable/compiler/MockitoIrGenerationExtension.kt @@ -1,6 +1,7 @@ package com.jeppeman.mockposable.compiler import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext +import org.jetbrains.kotlin.backend.common.IrValidatorConfig import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext import org.jetbrains.kotlin.backend.common.validateIr @@ -42,7 +43,8 @@ class MockitoIrGenerationExtension( performBasicIrValidation( moduleFragment, moduleFragment.irBuiltins, - "Mockito transformation" + "Mockito transformation", + IrValidatorConfig(), ) } } diff --git a/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt b/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt index 7d095bd..3975038 100644 --- a/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt +++ b/mockposable/mockposable-compiler/src/test/java/com/jeppeman/mockposable/compiler/MockposableCompilerTest.kt @@ -7,6 +7,7 @@ import com.tschuchort.compiletesting.KotlinCompilation import com.tschuchort.compiletesting.PluginOption import com.tschuchort.compiletesting.SourceFile import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi +import org.jetbrains.kotlin.config.JvmTarget import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test @@ -93,8 +94,10 @@ fun compile( return KotlinCompilation().apply { languageVersion = "2.0" sources = sourceFiles + jvmTarget = JvmTarget.JVM_21.description commandLineProcessors = listOf(mockposableCommandLineProcessor, composeCommandLineProcessor) - componentRegistrars = listOf(ComposePluginRegistrar(), MockposablePlugin()) + componentRegistrars = listOf(MockposablePlugin()) + compilerPluginRegistrars = listOf(ComposePluginRegistrar()) pluginOptions = listOf( PluginOption( pluginId = mockposableCommandLineProcessor.pluginId, diff --git a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt index 8e26be0..aeb469f 100644 --- a/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt +++ b/mockposable/mockposable-gradle/src/main/java/com/jeppeman/mockposable/gradle/MockposableSubPlugin.kt @@ -60,6 +60,9 @@ class MockposableSubPlugin : KotlinCompilerPluginSupportPlugin { .getByName("implementation") .dependencies .add(project.dependencies.create(COMPOSE_RUNTIME_COORDINATES)) + project.plugins.whenPluginAdded { plugin -> + println("yo ${plugin::class.java.name}") + } project.plugins.apply(ComposeCompilerGradleSubplugin::class.java) diff --git a/mockposable/mockposable-runtime/mockposable-runtime-composeui/build.gradle.kts b/mockposable/mockposable-runtime/mockposable-runtime-composeui/build.gradle.kts index 27da074..b45eb0b 100644 --- a/mockposable/mockposable-runtime/mockposable-runtime-composeui/build.gradle.kts +++ b/mockposable/mockposable-runtime/mockposable-runtime-composeui/build.gradle.kts @@ -24,8 +24,8 @@ android { } compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 } } diff --git a/mockposable/mockposable-runtime/mockposable-runtime-mockito/src/main/kotlin/com/jeppeman/mockposable/mockito/MockposableMockito.kt b/mockposable/mockposable-runtime/mockposable-runtime-mockito/src/main/kotlin/com/jeppeman/mockposable/mockito/MockposableMockito.kt index 802bae2..4eb80e3 100644 --- a/mockposable/mockposable-runtime/mockposable-runtime-mockito/src/main/kotlin/com/jeppeman/mockposable/mockito/MockposableMockito.kt +++ b/mockposable/mockposable-runtime/mockposable-runtime-mockito/src/main/kotlin/com/jeppeman/mockposable/mockito/MockposableMockito.kt @@ -15,7 +15,7 @@ import org.mockito.verification.VerificationMode /** * @see [KStubbing.on] */ -fun KStubbing.onComposable(stubBlock: @Composable T.() -> R): OngoingStubbing = try { +fun KStubbing.onComposable(stubBlock: @Composable T.() -> R): OngoingStubbing = try { runComposableOneShot { Mockito.`when`(mock.stubBlock()) } } catch (e: NullPointerException) { throw MockitoKotlinException(