Fix flaky FIR tests

failing with 'Jar with annotations does not exist. Please run
:plugins:fir-plugin-prototype:plugin-annotations:jar'
This commit is contained in:
Vyacheslav Gerasimov
2022-04-19 13:02:38 +03:00
parent 333440dfc6
commit c8f2872a07
5 changed files with 32 additions and 20 deletions
+1 -5
View File
@@ -38,7 +38,6 @@ dependencies {
testApi(toolsJar())
testApiJUnit5()
testApi(project(":analysis:symbol-light-classes"))
}
sourceSets {
@@ -53,10 +52,7 @@ projectTest(jUnitMode = JUnitMode.JUnit5) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform()
// PluginAnnotationsProvider needs this jar during tests
dependsOn(":plugins:fir-plugin-prototype:plugin-annotations:jar")
}
}.also { confugureFirPluginAnnotationsDependency(it) }
testsJar()
@@ -43,7 +43,7 @@ projectTest(jUnitMode = JUnitMode.JUnit5) {
dependsOn(":dist")
workingDir = rootDir
useJUnitPlatform()
}
}.also { confugureFirPluginAnnotationsDependency(it) }
testsJar()
+17 -2
View File
@@ -10,13 +10,13 @@
import com.sun.management.OperatingSystemMXBean
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Configuration
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.file.FileSystemOperations
import org.gradle.api.internal.tasks.testing.filter.DefaultTestFilter
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.project
import org.gradle.kotlin.dsl.*
import org.gradle.kotlin.dsl.support.serviceOf
import java.io.File
import java.lang.Character.isLowerCase
@@ -314,3 +314,18 @@ fun Task.useAndroidSdk() {
fun Task.useAndroidJar() {
TaskUtils.useAndroidJar(this)
}
fun Project.confugureFirPluginAnnotationsDependency(testTask: TaskProvider<Test>) {
val firPluginAnnotations: Configuration by configurations.creating
dependencies {
firPluginAnnotations(project(":plugins:fir-plugin-prototype:plugin-annotations")) { isTransitive = false }
}
testTask.configure {
dependsOn(firPluginAnnotations)
doFirst {
systemProperty("firPluginAnnotations.path", firPluginAnnotations.singleFile.canonicalPath)
}
}
}
@@ -59,10 +59,8 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) {
projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5) {
dependsOn(":dist")
dependsOn(":plugins:fir-plugin-prototype:plugin-annotations:jar")
workingDir = rootDir
useJUnitPlatform()
}
}.also { confugureFirPluginAnnotationsDependency(it) }
testsJar()
@@ -15,17 +15,20 @@ import java.io.File
import java.io.FilenameFilter
class PluginAnnotationsProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) {
companion object {
private const val ANNOTATIONS_JAR_DIR = "plugins/fir-plugin-prototype/plugin-annotations/build/libs/"
private val ANNOTATIONS_JAR_FILTER = FilenameFilter { _, name -> name.startsWith("plugin-annotations") && name.endsWith(".jar") }
private val firPluginAnnotationsJar: File by lazy {
val firPluginAnnotationsPath = System.getProperty("firPluginAnnotations.path") ?: error("firPluginAnnotations.path system property is not set")
val firPluginAnnotationsFile = File(firPluginAnnotationsPath)
if (!firPluginAnnotationsFile.isFile &&
firPluginAnnotationsFile.name.startsWith("plugin-annotations") &&
firPluginAnnotationsFile.name.endsWith(".jar")
) {
error("Can't find fir plugin annotations jar file in firPluginAnnotations.path system property")
}
firPluginAnnotationsFile
}
override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {
val libDir = File(ANNOTATIONS_JAR_DIR)
testServices.assertions.assertTrue(libDir.exists() && libDir.isDirectory, failMessage)
val jar = libDir.listFiles(ANNOTATIONS_JAR_FILTER)?.firstOrNull() ?: testServices.assertions.fail(failMessage)
configuration.addJvmClasspathRoot(jar)
configuration.addJvmClasspathRoot(firPluginAnnotationsJar)
}
private val failMessage = { "Jar with annotations does not exist. Please run :plugins:fir-plugin-prototype:plugin-annotations:jar" }
}