[JS IR] Enable IR dump for IC invalidation tests

Support 'fd.kotlin.js.debugMode' property in IC invalidation tests.
This commit is contained in:
Alexander Korepanov
2023-01-23 13:12:49 +01:00
committed by Space Team
parent c58314fddf
commit 1ec88ff560
6 changed files with 47 additions and 18 deletions
+21 -15
View File
@@ -346,6 +346,23 @@ fun Test.setUpJsBoxTests(jsEnabled: Boolean, jsIrEnabled: Boolean, firEnabled: B
setUpBoxTests()
}
fun Test.forwardProperties() {
val rootLocalProperties = Properties().apply {
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
load(it)
}
}
val allProperties = properties + rootLocalProperties
val prefixForPropertiesToForward = "fd."
for ((key, value) in allProperties) {
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
}
}
}
fun Test.setUpBoxTests() {
workingDir = rootDir
dependsOn(antLauncherJar)
@@ -362,20 +379,7 @@ fun Test.setUpBoxTests() {
.forUseAtConfigurationTime().orNull ?: "false"
)
val rootLocalProperties = Properties().apply {
rootProject.file("local.properties").takeIf { it.isFile }?.inputStream()?.use {
load(it)
}
}
val allProperties = properties + rootLocalProperties
val prefixForPropertiesToForward = "fd."
for ((key, value) in allProperties) {
if (key is String && key.startsWith(prefixForPropertiesToForward)) {
systemProperty(key.substring(prefixForPropertiesToForward.length), value!!)
}
}
forwardProperties()
}
val test = projectTest(parallel = true, jUnitMode = JUnitMode.JUnit5, maxHeapSizeMb = 4096) {
@@ -507,8 +511,10 @@ projectTest("invalidationTest", jUnitMode = JUnitMode.JUnit4) {
systemProperty("kotlin.js.stdlib.klib.path", "libraries/stdlib/js-ir/build/libs/kotlin-stdlib-js-ir-js-$version.klib")
systemProperty("kotlin.js.test.root.out.dir", "$buildDir/")
forwardProperties()
}
tasks.named("check") {
dependsOn(runMocha)
}
}
@@ -10,6 +10,8 @@ import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.local.CoreLocalFileSystem
import com.intellij.psi.PsiManager
import com.intellij.psi.SingleRootFileViewProvider
import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
import org.jetbrains.kotlin.backend.common.phaser.toPhaseMap
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.js.klib.generateIrForKlibSerialization
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
@@ -36,6 +38,7 @@ import org.jetbrains.kotlin.js.testOld.V8IrJsTestChecker
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.serialization.js.ModuleKind
import org.jetbrains.kotlin.test.DebugMode
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
import org.jetbrains.kotlin.test.TargetBackend
@@ -285,6 +288,18 @@ abstract class AbstractInvalidationTest(
}
}
private fun getPhaseConfig(stepId: Int): PhaseConfig {
if (DebugMode.fromSystemProperty("kotlin.js.debugMode") < DebugMode.SUPER_DEBUG) {
return PhaseConfig(jsPhases)
}
return PhaseConfig(
jsPhases,
dumpToDirectory = buildDir.resolve("irdump").resolve("step-$stepId").path,
toDumpStateAfter = jsPhases.toPhaseMap().values.toSet()
)
}
fun execute() {
for (projStep in projectInfo.steps) {
val testInfo = projStep.order.map { setupTestStep(projStep, it, true) }
@@ -308,6 +323,7 @@ abstract class AbstractInvalidationTest(
mainModule,
cfg,
JsGenerationGranularity.PER_MODULE,
getPhaseConfig(projStep.id),
setOf(FqName(BOX_FUNCTION_NAME)),
targetBackend == TargetBackend.JS_IR_ES6
)
@@ -191,7 +191,7 @@ abstract class AbstractJsKLibABITestCase : KtUsefulTestCase() {
irFactory = { IrFactoryImplForJsIC(WholeWorldStageController()) },
mainArguments = null,
compilerInterfaceFactory = { mainModule, cfg ->
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, setOf(BOX_FUN_FQN))
JsIrCompilerWithIC(mainModule, cfg, JsGenerationGranularity.PER_MODULE, PhaseConfig(jsPhases), setOf(BOX_FUN_FQN))
}
)
val icCaches = cacheUpdater.actualizeCaches()