[K/JS] Do not run generate-file-tests task if the source was not changed
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user