commit 66bd08023f3cef50fecc779d1e131f33e438369e parent 3cb60476cbc6e4c3db8973b6d43f964d7b0964f6 Author: triesap <tyson@radroots.org> Date: Sat, 1 Aug 2026 18:51:07 +0000 test: fail closed on an empty test inventory - verify Kotlin test sources before every Gradle test task - reject a completely absent suite before NO-SOURCE success - retain Gradle configuration-cache compatibility - prove both populated and empty inventory behavior Diffstat:
| M | app/desktop/build.gradle.kts | | | 36 | ++++++++++++++++++++++++++++++++++++ |
1 file changed, 36 insertions(+), 0 deletions(-)
diff --git a/app/desktop/build.gradle.kts b/app/desktop/build.gradle.kts @@ -1,4 +1,13 @@ import org.jetbrains.compose.desktop.application.dsl.TargetFormat +import org.gradle.api.DefaultTask +import org.gradle.api.GradleException +import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.testing.Test import org.jetbrains.kotlin.gradle.dsl.JvmTarget @@ -18,7 +27,34 @@ dependencies { testImplementation(libs.compose.ui.test.junit4) } +val testInventoryRoot = providers + .gradleProperty("testInventoryRoot") + .orElse("src/test/kotlin") +val expectedTests = fileTree(testInventoryRoot.get()) { + include("**/*Test.kt") +} +abstract class VerifyTestInventory : DefaultTask() { + @get:InputFiles + @get:PathSensitive(PathSensitivity.RELATIVE) + abstract val testFiles: ConfigurableFileCollection + + @get:Input + abstract val sourceRoot: Property<String> + + @TaskAction + fun verify() { + if (testFiles.isEmpty) { + throw GradleException("No Kotlin tests found under ${sourceRoot.get()}") + } + } +} +val verifyTestInventory by tasks.registering(VerifyTestInventory::class) { + testFiles.from(expectedTests) + sourceRoot.set(testInventoryRoot) +} + tasks.withType<Test>().configureEach { + dependsOn(verifyTestInventory) failOnNoDiscoveredTests.set(true) }