diff options
3 files changed, 79 insertions, 0 deletions
diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt index 922adeae..5ca7d779 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/SourceSetConfigurationsTest.kt @@ -73,6 +73,47 @@ class SourceSetConfigurationsTest { } @Test + fun configurationsForMultiplatformApp() { + testRule.setupAppAsMultiplatformApp( + "jvm { }", + "android(name = \"foo\") { }", + "js { browser() }", + "androidNativeX86 { }", + "androidNativeX64(name = \"bar\") { }", + ) + testRule.appModule.addMultiplatformSource("commonMain", "Foo.kt", "class Foo") + val result = testRule.runner() + .withArguments(":app:dependencies") + .build() + + assertThat(result.output.lines()).containsAtLeast( + "ksp", + // jvm target: + "kspJvm", + "kspJvmTest", + // android target, named foo: + "kspFoo", + "kspFooAndroidTest", + "kspFooAndroidTestDebug", + "kspFooAndroidTestRelease", + "kspFooDebug", + "kspFooRelease", + "kspFooTest", + "kspFooTestDebug", + "kspFooTestRelease", + // js target: + "kspJs", + "kspJsTest", + // androidNativeX86 target: + "kspAndroidNativeX86", + "kspAndroidNativeX86Test", + // androidNative64 target, named bar: + "kspBar", + "kspBarTest" + ) + } + + @Test fun registerJavaSourcesToAndroid() { testRule.setupAppAsAndroidApp() testRule.appModule.dependencies.addAll( diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt index cfbcb778..c4bb35d5 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/KspIntegrationTestRule.kt @@ -102,6 +102,31 @@ class KspIntegrationTestRule( PluginDeclaration.id("com.google.devtools.ksp", testConfig.kspVersion) ) ) + addAndroidBoilerplate() + } + + /** + * Sets up the app module as a multiplatform app with the specified [targets], wrapped in a kotlin { } block. + */ + fun setupAppAsMultiplatformApp(vararg targets: String) { + testProject.appModule.plugins.addAll( + listOf( + PluginDeclaration.id("com.android.application", testConfig.androidBaseVersion), + PluginDeclaration.kotlin("multiplatform", testConfig.kotlinBaseVersion), + PluginDeclaration.id("com.google.devtools.ksp", testConfig.kspVersion) + ) + ) + testProject.appModule.buildFileAdditions.add( + """ + kotlin { + ${targets.joinToString(separator = "\n") { it.trimIndent()} } + } + """.trimIndent() + ) + addAndroidBoilerplate() + } + + private fun addAndroidBoilerplate() { testProject.appModule.buildFileAdditions.add( """ android { diff --git a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestModule.kt b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestModule.kt index 87b0907f..293d1485 100644 --- a/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestModule.kt +++ b/gradle-plugin/src/test/kotlin/com/google/devtools/ksp/gradle/testing/TestModule.kt @@ -77,6 +77,19 @@ class TestModule( srcDir.resolve(name).writeText(contents) } + /** + * Adds the given source file to the given KotlinSourceSet in a multiplatform project. + */ + fun addMultiplatformSource(sourceSet: String, name: String, contents: String) { + require(name.endsWith(".kt")) { "multiplatform source extension needs to be *.kt." } + val srcDir = multiplatformKotlinSourceDir(sourceSet) + srcDir.resolve(name).writeText(contents) + } + + private fun multiplatformKotlinSourceDir(sourceSet: String) = moduleRoot.resolve("src/$sourceSet/kotlin").also { + it.mkdirs() + } + private val kotlinSourceDir get() = moduleRoot.resolve("src/main/kotlin").also { it.mkdirs() |