diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.kt index 6f9945e8319..3111a0f3fbb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/checker/MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.kt @@ -55,8 +55,8 @@ internal object MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChe data class V1StyleSourceDirUsageDiagnostic( private val layout: KotlinAndroidSourceSetLayout, - private val v1StyleSourceDirInUse: File, - private val v2StyleSourceDirToUse: File + val v1StyleSourceDirInUse: File, + val v2StyleSourceDirToUse: File ) : KotlinAndroidSourceSetLayoutChecker.Diagnostic { override val message: String get() = """ diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/sources/android/MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/sources/android/MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest.kt index 9426dc55437..ba4e8233ae5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/sources/android/MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/sources/android/MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest.kt @@ -13,10 +13,12 @@ import org.gradle.api.internal.project.ProjectInternal import org.jetbrains.kotlin.gradle.* import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.MultiplatformLayoutV2AndroidStyleSourceDirUsageChecker.AndroidStyleSourceDirUsageDiagnostic +import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.MultiplatformLayoutV2MultiplatformLayoutV1StyleSourceDirUsageChecker.V1StyleSourceDirUsageDiagnostic import org.jetbrains.kotlin.gradle.plugin.sources.android.findAndroidSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.android.multiplatformAndroidSourceSetLayoutV2 import org.junit.Test import kotlin.test.assertEquals +import kotlin.test.fail class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest { @@ -51,7 +53,6 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest { @Test fun `test - KT-53709 - androidTest_kotlin in use`() { - val project = buildMinimalAndroidMultiplatformProject() /* Ensure that the problematic androidTest/kotlin source dir is 'in use' */ @@ -66,4 +67,55 @@ class MultiplatformAndroidSourceSetLayoutV2DiagnosticsTest { assertEquals(androidTestKotlinSourceDir, diagnostic.androidStyleSourceDirInUse) assertEquals(project.file("src/androidInstrumentedTest/kotlin"), diagnostic.kotlinStyleSourceDirToUse) } + + @Test + fun `test - android style source dir usage checker`() { + val project = buildMinimalAndroidMultiplatformProject() + val androidStyleMain = project.file("src/main/kotlin") + val androidStyleUnitTest = project.file("src/test/kotlin") + + androidStyleMain.mkdirs() + androidStyleUnitTest.mkdirs() + project.evaluate() + + project.checkCreatedSourceSets() + + val warnings = diagnosticsReporter.warnings + if (warnings.size != 2) fail("Expected exactly two warnings emitted. Found $warnings") + + val androidMainWarning = warnings.filterIsInstance() + .find { warning -> warning.androidStyleSourceDirInUse == androidStyleMain } + ?: fail("Missing warning for '$androidStyleMain'. Found $warnings") + + assertEquals( + project.file("src/androidMain/kotlin"), androidMainWarning.kotlinStyleSourceDirToUse + ) + + val androidUnitTestWarning = warnings.filterIsInstance() + .find { warning -> warning.androidStyleSourceDirInUse == androidStyleUnitTest } + ?: fail("Missing warning for '$androidStyleUnitTest'. Found $warnings") + + assertEquals( + project.file("src/androidUnitTest/kotlin"), androidUnitTestWarning.kotlinStyleSourceDirToUse + ) + } + + @Test + fun `test - v1 style source dir usage checker`() { + val project = buildMinimalAndroidMultiplatformProject() + val v1StyleInstrumentedTest = project.file("src/androidAndroidTest/kotlin") + v1StyleInstrumentedTest.mkdirs() + project.evaluate() + project.checkCreatedSourceSets() + + val warning = assertIsInstance(diagnosticsReporter.assertSingleWarning()) + + assertEquals( + v1StyleInstrumentedTest, warning.v1StyleSourceDirInUse, + ) + + assertEquals( + project.file("src/androidInstrumentedTest/kotlin"), warning.v2StyleSourceDirToUse + ) + } } \ No newline at end of file