[Gradle] Implement AndroidSourceSetLayoutV1SourceSetsNotFoundErrorTest
... to cover KT-58488
This commit is contained in:
committed by
Space Team
parent
484863d8c6
commit
42109725ed
+1
-1
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.gradle.plugin.diagnostics
|
||||
import org.jetbrains.kotlin.gradle.InternalKotlinGradlePluginApi
|
||||
|
||||
@InternalKotlinGradlePluginApi // used in integration tests
|
||||
class ToolingDiagnostic(val id: String, val message: String, val severity: Severity) {
|
||||
data class ToolingDiagnostic(val id: String, val message: String, val severity: Severity) {
|
||||
enum class Severity {
|
||||
WARNING,
|
||||
|
||||
|
||||
+73
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
|
||||
package org.jetbrains.kotlin.gradle.unitTests.diagnosticsTests
|
||||
|
||||
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.KotlinToolingDiagnostics.AndroidSourceSetLayoutV1SourceSetsNotFoundError
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.gradle.plugin.launchInStage
|
||||
import org.jetbrains.kotlin.gradle.util.androidApplication
|
||||
import org.jetbrains.kotlin.gradle.util.assertContainsDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.util.assertNoDiagnostics
|
||||
import org.jetbrains.kotlin.gradle.util.buildProjectWithMPP
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertFails
|
||||
|
||||
class AndroidSourceSetLayoutV1SourceSetsNotFoundErrorTest {
|
||||
|
||||
@Test
|
||||
fun `androidTest SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidTest")
|
||||
.assertContainsDiagnostic(AndroidSourceSetLayoutV1SourceSetsNotFoundError("androidTest"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ` androidAndroidTest SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidAndroidTest")
|
||||
.assertContainsDiagnostic(AndroidSourceSetLayoutV1SourceSetsNotFoundError("androidAndroidTest"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun ` androidTestDebug SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidTestDebug")
|
||||
.assertContainsDiagnostic(AndroidSourceSetLayoutV1SourceSetsNotFoundError("androidTestDebug"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `androidAndroidTestDebug SourceSet`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidAndroidTestDebug")
|
||||
.assertContainsDiagnostic(AndroidSourceSetLayoutV1SourceSetsNotFoundError("androidAndroidTestDebug"))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `androidDummy SourceSet - is not reported`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidDummy")
|
||||
.assertNoDiagnostics(AndroidSourceSetLayoutV1SourceSetsNotFoundError)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `androidUnitTestX SourceSet - is not reported`() {
|
||||
diagnosticsForTestProjectRequestingMissingSourceSet("androidUnitTestX")
|
||||
.assertNoDiagnostics(AndroidSourceSetLayoutV1SourceSetsNotFoundError)
|
||||
}
|
||||
|
||||
private fun diagnosticsForTestProjectRequestingMissingSourceSet(sourceSetName: String): List<ToolingDiagnostic> {
|
||||
val project = buildProjectWithMPP()
|
||||
project.androidApplication { compileSdk = 32 }
|
||||
val kotlin = project.multiplatformExtension
|
||||
|
||||
project.launchInStage(KotlinPluginLifecycle.Stage.AfterEvaluateBuildscript) {
|
||||
kotlin.sourceSets.getByName(sourceSetName)
|
||||
}
|
||||
|
||||
assertFails { project.evaluate() }
|
||||
return project.kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(project).toList()
|
||||
}
|
||||
}
|
||||
+30
-1
@@ -6,12 +6,14 @@
|
||||
package org.jetbrains.kotlin.gradle.util
|
||||
|
||||
import org.gradle.api.Project
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnosticFactory
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.kotlinToolingDiagnosticsCollector
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.gradle.plugin.diagnostics.ToolingDiagnostic
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import kotlin.test.assertTrue
|
||||
import kotlin.test.fail
|
||||
|
||||
internal fun checkDiagnosticsWithMppProject(projectName: String, projectConfiguration: Project.() -> Unit) {
|
||||
val project = buildProjectWithMPP(projectBuilder = { withName(projectName) })
|
||||
@@ -66,9 +68,36 @@ internal fun Project.assertNoDiagnostics() {
|
||||
)
|
||||
}
|
||||
|
||||
internal fun Project.assertContainsDiagnostic(diagnostic: ToolingDiagnostic) {
|
||||
kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this).assertContainsDiagnostic(diagnostic)
|
||||
}
|
||||
|
||||
internal fun Collection<ToolingDiagnostic>.assertContainsDiagnostic(diagnostic: ToolingDiagnostic) {
|
||||
fun Any.withIndent() = this.toString().prependIndent(" ")
|
||||
if (diagnostic !in this) {
|
||||
fail("Missing diagnostic\n${diagnostic.withIndent()} \nin:\n${this.render().withIndent()}")
|
||||
}
|
||||
}
|
||||
|
||||
internal fun Project.assertNoDiagnostics(id: String) {
|
||||
kotlinToolingDiagnosticsCollector.getDiagnosticsForProject(this).assertNoDiagnostics(id)
|
||||
}
|
||||
|
||||
internal fun Collection<ToolingDiagnostic>.assertNoDiagnostics(id: String) {
|
||||
val unexpectedDiagnostics = filter { it.id == id }
|
||||
if (unexpectedDiagnostics.isNotEmpty()) {
|
||||
fail("Expected to have no diagnostics with id '$id', but some were reported:\n${unexpectedDiagnostics.render()}")
|
||||
}
|
||||
}
|
||||
|
||||
internal fun Collection<ToolingDiagnostic>.assertNoDiagnostics(factory: ToolingDiagnosticFactory) {
|
||||
assertNoDiagnostics(factory.id)
|
||||
}
|
||||
|
||||
private fun Collection<ToolingDiagnostic>.render(): String = joinToString(separator = "\n----\n")
|
||||
|
||||
private val expectedDiagnosticsRoot: Path
|
||||
get() = resourcesRoot.resolve("expectedDiagnostics")
|
||||
|
||||
private fun expectedDiagnosticsFile(projectName: String): File = expectedDiagnosticsRoot.resolve("$projectName.txt").toFile()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user