[K/JS] Do not run generate-file-tests task if the source was not changed

This commit is contained in:
Artem Kobzar
2022-09-21 13:53:43 +00:00
committed by Space
parent 5580e4f06c
commit 443f7d1048
+61 -41
View File
@@ -156,55 +156,74 @@ val unzipJsShell by task<Copy> {
val testDataDir = project(":js:js.translator").projectDir.resolve("testData")
val typescriptTestsDir = testDataDir.resolve("typescript-export")
val generateJsExportOnFileTestFilesForTS by task<Copy> {
val exportFileDirPostfix = "-in-exported-file"
from(typescriptTestsDir) {
include("**/*.kt")
include("**/*.ts")
include("**/tsconfig.json")
exclude("selective-export/*")
exclude("implicit-export/*")
exclude("inheritance/*")
exclude("strict-implicit-export/*")
exclude("*$exportFileDirPostfix")
eachFile {
path = "${relativePath.parent}$exportFileDirPostfix/$name"
var isFirstLine = true
filter {
when {
isFirstLine && name.endsWith(".kt") -> "/** This file is generated by {@link :js:js.test:generateJsExportOnFileTestFilesForTS} task. DO NOT MODIFY MANUALLY */\n\n$it"
.also { isFirstLine = false }
it.contains("// FILE") -> "$it\n\n@file:JsExport"
else -> it.replace("@JsExport", "")
}
}
}
}
into(typescriptTestsDir)
}
val installTsDependencies = task<NpmTask>("installTsDependencies") {
workingDir.set(testDataDir)
args.set(listOf("install"))
}
fun sequential(first: Task, tasks: List<Task>): Task {
tasks.fold(first) { previousTask, currentTask ->
currentTask.dependsOn(previousTask)
fun sequential(first: Task? = null, tasks: List<Task>): Task {
val callback = { previousTask: Task, currentTask: Task -> currentTask.dependsOn(previousTask) }
if (first != null) {
tasks.fold(first, callback)
} else {
tasks.reduce(callback)
}
return tasks.last()
}
val exportFileDirPostfix = "-in-exported-file"
fun generateJsExportOnFileTestFor(dir: String): Task = task<Copy>("generate-js-export-on-file-for-$dir") {
val dirPostfix = exportFileDirPostfix
val inputDir = fileTree(typescriptTestsDir.resolve(dir))
val outputDir = typescriptTestsDir.resolve("$dir$dirPostfix")
inputs.files(inputDir.matching {
include("**/*.kt")
include("**/*.ts")
include("**/tsconfig.json")
})
outputs.dir(outputDir.toPath())
from(inputDir) {
include("**/*.kt")
include("**/*.ts")
include("**/tsconfig.json")
}
eachFile {
var isFirstLine = true
filter {
when {
isFirstLine && name.endsWith(".kt") -> "/** This file is generated by {@link :js:js.test:generateJsExportOnFileTestFilesForTS} task. DO NOT MODIFY MANUALLY */\n\n$it"
.also { isFirstLine = false }
it.contains("// FILE") -> "$it\n\n@file:JsExport"
else -> it.replace("@JsExport", "")
}
}
}
into(outputDir)
}
val generateTypeScriptJsExportOnFileTests = sequential(
tasks = typescriptTestsDir
.listFiles { it: File ->
it.isDirectory &&
!it.path.endsWith("/selective-export") &&
!it.path.endsWith("/implicit-export") &&
!it.path.endsWith("/inheritance") &&
!it.path.endsWith("/strict-implicit-export") &&
!it.path.endsWith(exportFileDirPostfix)
}
.map { generateJsExportOnFileTestFor(it.name) }
)
fun generateTypeScriptTestFor(dir: String): Task = task<NpmTask>("generate-ts-for-$dir") {
val baseDir = fileTree(testDataDir.resolve("./typescript-export/$dir"))
val baseDir = fileTree(typescriptTestsDir.resolve(dir))
workingDir.set(testDataDir)
inputs.files(baseDir.include("*.ts"))
@@ -214,8 +233,7 @@ fun generateTypeScriptTestFor(dir: String): Task = task<NpmTask>("generate-ts-fo
val generateTypeScriptTests = sequential(
installTsDependencies,
typescriptTestsDir.listFiles()
.filter { it.isDirectory }
typescriptTestsDir.listFiles { it: File -> it.isDirectory }
.map { generateTypeScriptTestFor(it.name) }
)
@@ -349,7 +367,9 @@ testsJar {}
val generateTests by generator("org.jetbrains.kotlin.generators.tests.GenerateJsTestsKt") {
dependsOn(":compiler:generateTestData")
dependsOn(generateJsExportOnFileTestFilesForTS)
if (!project.hasProperty("teamcity")) {
dependsOn(generateTypeScriptJsExportOnFileTests)
}
}
val prepareMochaTestData by tasks.registering(Copy::class) {