|
|
|
plugins {
|
|
|
|
id("org.jetbrains.kotlin.multiplatform")
|
|
|
|
id("org.jetbrains.compose")
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
kotlin {
|
|
|
|
js(IR) {
|
|
|
|
browser {
|
|
|
|
testTask {
|
|
|
|
useKarma {
|
|
|
|
useChromeHeadless()
|
|
|
|
// useFirefox()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
binaries.executable()
|
|
|
|
}
|
|
|
|
|
|
|
|
sourceSets {
|
|
|
|
val commonMain by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(compose.runtime)
|
|
|
|
implementation(project(":html-core"))
|
|
|
|
implementation(kotlin("stdlib-common"))
|
|
|
|
implementation(libs.kotlinx.coroutines.core)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
val jsMain by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(kotlin("stdlib-js"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
val jsTest by getting {
|
|
|
|
dependencies {
|
|
|
|
implementation(project(":html-test-utils"))
|
|
|
|
implementation(kotlin("test-js"))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
val BENCHMARKS_PATH = "reports/tests/jsTest/classes/org.jetbrains.compose.web.tests.benchmarks.BenchmarkTests.html"
|
|
|
|
|
|
|
|
val printBenchmarkResults by tasks.registering {
|
|
|
|
doLast {
|
|
|
|
val report = buildDir.resolve(BENCHMARKS_PATH).readText()
|
|
|
|
val stdout = "#.*;".toRegex().findAll(report).map { it.value }.firstOrNull()
|
|
|
|
|
|
|
|
val benchmarks = stdout?.split(";")?.mapNotNull {
|
|
|
|
if (it.isEmpty()) {
|
|
|
|
null
|
|
|
|
} else {
|
|
|
|
val b = it.split(":")
|
|
|
|
val testName = b[0].replace("#", "")
|
|
|
|
val benchmarkMs = b[1].toInt()
|
|
|
|
|
|
|
|
testName to benchmarkMs
|
|
|
|
}
|
|
|
|
}?.toMap()
|
|
|
|
|
|
|
|
benchmarks?.forEach {
|
|
|
|
// TeamCity messages need to escape '[' and ']' using '|'
|
|
|
|
val testName = it.key
|
|
|
|
.replace("[", "|[")
|
|
|
|
.replace("]", "|]")
|
|
|
|
println("##teamcity[buildStatisticValue key='benchmark_$testName' value='${it.value}']")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
tasks.named("jsTest") { finalizedBy(printBenchmarkResults) }
|