Skip to content

Commit f774d4a

Browse files
committed
Add Android target to test-mokkery
1 parent 3ae7e60 commit f774d4a

File tree

9 files changed

+88
-2
lines changed

9 files changed

+88
-2
lines changed

.github/workflows/tests.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,7 @@ jobs:
1313
uses: actions/checkout@v4
1414
- name: Setup Gradle
1515
uses: gradle/actions/setup-gradle@v3
16+
- name: Setup Android SDK
17+
uses: android-actions/setup-android@v3
1618
- name: Gradle build
1719
run: ./gradlew build --no-daemon --stacktrace

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ buildscript {
1919
dependencies {
2020
classpath(":build-mokkery")
2121
classpath(libs.dokka.base)
22+
classpath(libs.agp)
2223
}
2324
}
2425

gradle/libs.versions.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,16 @@ dokka = "2.1.0"
99
poko = "0.21.1"
1010
vanniktech-publish-plugin = "0.36.0"
1111
gradle-portal-publish = "2.0.0"
12+
agp = "9.0.1"
13+
androidx-runner = "1.7.0"
1214

1315
[plugins]
1416
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
1517
poko = { id = "dev.drewhamilton.poko", version.ref = "poko" }
1618
kotlinx-atomicfu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "atomicfu" }
1719
kotlin-allopen = { id = "org.jetbrains.kotlin.plugin.allopen", version.ref = "kotlin" }
1820
gradle-portal-publish = { id = "com.gradle.plugin-publish", version.ref = "gradle-portal-publish" }
21+
agp-multiplatform = { id = "com.android.kotlin.multiplatform.library" }
1922

2023
[libraries]
2124
kotlin-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
@@ -27,6 +30,7 @@ kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref =
2730
kotlin-script-runtime = { module = "org.jetbrains.kotlin:kotlin-script-runtime", version.ref = "kotlin" }
2831
kotlin-test-junit5 = { module = "org.jetbrains.kotlin:kotlin-test-junit5", version.ref = "kotlin" }
2932
kotlin-compiler-test-framework = { module = "org.jetbrains.kotlin:kotlin-compiler-internal-test-framework", version.ref = "kotlin" }
33+
agp = { module = "com.android.tools.build:gradle", version.ref = "agp" }
3034

3135
vanniktech-publish-plugin = { module = "com.vanniktech:gradle-maven-publish-plugin", version.ref = "vanniktech-publish-plugin" }
3236

@@ -39,3 +43,5 @@ dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka"
3943

4044
google-autoservice = { module = "com.google.auto.service:auto-service", version.ref = "google-autoservice"}
4145
google-autoservice-annotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "google-autoservice"}
46+
47+
androidx-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-runner" }

mokkery-gradle/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
@file:Suppress("UnstableApiUsage")
22

3+
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
34
import org.jetbrains.kotlin.konan.target.HostManager
45
import org.jetbrains.kotlin.konan.target.KonanTarget
5-
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
66

77
plugins {
88
kotlin("jvm")
@@ -54,6 +54,7 @@ buildConfig {
5454
.find { it.name == "testing" }
5555
.let { it as MavenArtifactRepository }
5656
buildConfigField("TESTING_REPO_URL", testingRepository.url)
57+
buildConfigField("AGP_VERSION", libs.versions.agp.get())
5758
}
5859
}
5960

mokkery-gradle/src/functionalTest/kotlin/dev/mokkery/gradle/MokkeryGradlePluginFunctionalTest.kt

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class MokkeryGradlePluginFunctionalTest {
1717

1818
private val buildFile by lazy { testProjectDir.resolve("build.gradle.kts") }
1919
private val settingsFile by lazy { testProjectDir.resolve("settings.gradle.kts") }
20+
private val localPropertiesFile by lazy { testProjectDir.resolve("local.properties") }
2021

2122
@Test
2223
fun `test minimum Kotlin version`() {
@@ -27,6 +28,10 @@ class MokkeryGradlePluginFunctionalTest {
2728
private fun test(kotlinVersion: String) {
2829
settingsFile.writeText(settingsFileContent)
2930
buildFile.writeText(buildFileContent)
31+
File("../local.properties")
32+
.takeIf { it.exists() }
33+
?.copyTo(localPropertiesFile)
34+
3035
File("../test-mokkery/src").toPath()
3136
.copyToRecursively(
3237
testProjectDir
@@ -40,6 +45,7 @@ class MokkeryGradlePluginFunctionalTest {
4045
.withArguments(
4146
"-PkotlinVersion=${kotlinVersion}",
4247
"-PmokkeryVersion=${MokkeryConfig.VERSION}",
48+
"-PagpVersion=${BuildConfig.AGP_VERSION}",
4349
"-Porg.gradle.jvmargs=-Xmx1g",
4450
"-Pkotlin.daemon.jvmargs=-Xmx1g",
4551
"clean",
@@ -57,17 +63,20 @@ private val settingsFileContent = """
5763
pluginManagement {
5864
val kotlinVersion: String by settings
5965
val mokkeryVersion: String by settings
66+
val agpVersion: String by settings
6067
plugins {
6168
kotlin("multiplatform") version kotlinVersion
6269
id("org.jetbrains.kotlin.plugin.allopen") version kotlinVersion
6370
id("dev.mokkery") version mokkeryVersion
71+
id("com.android.kotlin.multiplatform.library") version agpVersion
6472
}
6573
repositories {
6674
mavenCentral {
6775
content {
6876
excludeGroup("dev.mokkery")
6977
}
7078
}
79+
google()
7180
maven {
7281
name = "testing"
7382
url = uri("${BuildConfig.TESTING_REPO_URL}")
@@ -82,6 +91,7 @@ private val settingsFileContent = """
8291
excludeGroup("dev.mokkery")
8392
}
8493
}
94+
google()
8595
maven {
8696
name = "testing"
8797
url = uri("${BuildConfig.TESTING_REPO_URL}")
@@ -94,6 +104,7 @@ private val settingsFileContent = """
94104
private val buildFileContent = $$"""
95105
@file:OptIn(ExperimentalKotlinGradlePluginApi::class, ExperimentalWasmDsl::class)
96106
107+
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
97108
import dev.mokkery.gradle.ApplicationRule
98109
import dev.mokkery.gradle.mokkery
99110
import dev.mokkery.options.AnnotationSelector.Companion.all
@@ -107,6 +118,7 @@ private val buildFileContent = $$"""
107118
kotlin("multiplatform")
108119
id("dev.mokkery")
109120
id("org.jetbrains.kotlin.plugin.allopen")
121+
id("com.android.kotlin.multiplatform.library")
110122
}
111123
112124
allOpen {
@@ -127,9 +139,22 @@ private val buildFileContent = $$"""
127139
group("wasm") {
128140
withWasmJs()
129141
}
142+
group("jvmShared") {
143+
withJvm()
144+
withCompilations { it.target is KotlinMultiplatformAndroidLibraryTarget }
145+
}
130146
}
131147
}
132148
149+
android {
150+
namespace = "dev.mokkery.test"
151+
compileSdk = 36
152+
minSdk = 21
153+
withHostTest { }
154+
withDeviceTestBuilder {
155+
sourceSetTreeName = "test"
156+
}
157+
}
133158
jvm()
134159
js(IR) { nodejs() }
135160
wasmJs { nodejs() }

test-mokkery/build.gradle.kts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,32 @@
1-
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
1+
import com.android.build.api.dsl.KotlinMultiplatformAndroidLibraryTarget
22

33
plugins {
44
id("mokkery-multiplatform")
5+
alias(libs.plugins.agp.multiplatform)
56
alias(libs.plugins.kotlin.allopen)
67
}
78

9+
kotlin {
10+
android {
11+
namespace = "dev.mokkery.test"
12+
compileSdk = 36
13+
minSdk = 21
14+
withHostTest { }
15+
withDeviceTestBuilder {
16+
sourceSetTreeName = "test"
17+
}
18+
}
19+
@Suppress("OPT_IN_USAGE")
20+
applyDefaultHierarchyTemplate {
21+
common {
22+
group("jvmShared") {
23+
withJvm()
24+
withCompilations { it.target is KotlinMultiplatformAndroidLibraryTarget }
25+
}
26+
}
27+
}
28+
}
29+
830
allOpen {
931
annotation("dev.mokkery.test.OpenForMokkery")
1032
}
@@ -24,4 +46,6 @@ dependencies {
2446
commonMainImplementation(project(":mokkery-coroutines"))
2547
commonTestImplementation(kotlin("test"))
2648
commonTestImplementation(libs.kotlinx.coroutines.test)
49+
50+
"androidDeviceTestImplementation"(libs.androidx.runner)
2751
}

test-mokkery/src/jvmTest/kotlin/dev/mokkery/annotations/AnnotationsTest.kt renamed to test-mokkery/src/jvmSharedTest/kotlin/dev/mokkery/annotations/AnnotationsTest.kt

File renamed without changes.

test-mokkery/src/jvmTest/kotlin/dev/mokkery/test/Platform.jvm.kt renamed to test-mokkery/src/jvmSharedTest/kotlin/dev/mokkery/test/Platform.jvm.kt

File renamed without changes.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package dev.mokkery.types
2+
3+
import dev.mokkery.answering.SuperCall.Companion.original
4+
import dev.mokkery.answering.calls
5+
import dev.mokkery.answering.returns
6+
import dev.mokkery.every
7+
import dev.mokkery.mock
8+
import kotlin.test.Test
9+
import kotlin.test.assertContentEquals
10+
11+
class JavaSuperCallsTest {
12+
13+
private val list = mock<List<Int>>()
14+
15+
@Test
16+
fun test() {
17+
every(list::size::get) returns 3
18+
every { list.iterator() } returns iterator {
19+
yield(1)
20+
yield(2)
21+
yield(3)
22+
}
23+
every { list.spliterator() } calls original
24+
every { list.stream() } calls original
25+
assertContentEquals(arrayOf(1, 2, 3), list.stream().toArray())
26+
}
27+
}

0 commit comments

Comments
 (0)