[JS IR] Add test with exception diagnostic of boolean in externals

This commit is contained in:
Ilya Goncharov
2021-06-15 20:18:30 +03:00
committed by Space
parent 82f979b11f
commit b03af384af
5 changed files with 90 additions and 1 deletions
@@ -14,10 +14,12 @@ import com.intellij.psi.PsiManager
import junit.framework.TestCase
import org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettings
import org.jetbrains.kotlin.checkers.parseLanguageVersionSettings
import org.jetbrains.kotlin.cli.common.arguments.K2JsArgumentConstants
import org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
import org.jetbrains.kotlin.cli.common.output.writeAllTo
import org.jetbrains.kotlin.cli.js.resolve
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.config.*
@@ -151,6 +153,12 @@ abstract class BasicBoxTest(
val propertyLazyInitialization = PROPERTY_LAZY_INITIALIZATION.matcher(fileContent).find()
val safeExternalBoolean = SAFE_EXTERNAL_BOOLEAN.matcher(fileContent).find()
val safeExternalBooleanDiagnosticMatcher = SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC.matcher(fileContent)
val safeExternalBooleanDiagnostic =
if (safeExternalBooleanDiagnosticMatcher.find())
RuntimeDiagnostic.resolve(safeExternalBooleanDiagnosticMatcher.group(1))
else null
TestFileFactoryImpl().use { testFactory ->
val inputFiles = TestFiles.createTestFiles(
@@ -216,7 +224,8 @@ abstract class BasicBoxTest(
splitPerModule,
errorPolicy,
propertyLazyInitialization,
safeExternalBoolean
safeExternalBoolean,
safeExternalBooleanDiagnostic,
)
when {
@@ -471,6 +480,7 @@ abstract class BasicBoxTest(
errorIgnorancePolicy: ErrorTolerancePolicy,
propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
) {
val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") }
val testFiles = kotlinFiles.map { it.fileName }
@@ -522,6 +532,7 @@ abstract class BasicBoxTest(
splitPerModule,
propertyLazyInitialization,
safeExternalBoolean,
safeExternalBooleanDiagnostic,
)
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
@@ -617,6 +628,7 @@ abstract class BasicBoxTest(
splitPerModule = false,
propertyLazyInitialization = false,
safeExternalBoolean = false,
safeExternalBooleanDiagnostic = null,
)
val originalOutput = FileUtil.loadFile(outputFile)
@@ -697,6 +709,7 @@ abstract class BasicBoxTest(
splitPerModule: Boolean,
propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
) {
val translator = K2JSTranslator(config, false)
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
@@ -1101,6 +1114,7 @@ abstract class BasicBoxTest(
private val PROPERTY_LAZY_INITIALIZATION = Pattern.compile("^// *PROPERTY_LAZY_INITIALIZATION *$", Pattern.MULTILINE)
private val SAFE_EXTERNAL_BOOLEAN = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN *$", Pattern.MULTILINE)
private val SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC = Pattern.compile("^// *SAFE_EXTERNAL_BOOLEAN_DIAGNOSTIC: *(.+)$", Pattern.MULTILINE)
@JvmStatic
protected val runTestInNashorn = getBoolean("kotlin.js.useNashorn")
@@ -1137,3 +1151,14 @@ class KotlinJsTestLogger {
}
}
}
fun RuntimeDiagnostic.Companion.resolve(
value: String?,
): RuntimeDiagnostic? = when (value?.lowercase()) {
K2JsArgumentConstants.RUNTIME_DIAGNOSTIC_LOG -> RuntimeDiagnostic.LOG
K2JsArgumentConstants.RUNTIME_DIAGNOSTIC_EXCEPTION -> RuntimeDiagnostic.EXCEPTION
null -> null
else -> {
null
}
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.declarations.persistent.PersistentIrFactory
import org.jetbrains.kotlin.js.config.JSConfigurationKeys
import org.jetbrains.kotlin.js.config.JsConfig
import org.jetbrains.kotlin.js.config.RuntimeDiagnostic
import org.jetbrains.kotlin.js.facade.MainCallParameters
import org.jetbrains.kotlin.js.facade.TranslationUnit
import org.jetbrains.kotlin.name.FqName
@@ -96,6 +97,7 @@ abstract class BasicIrBoxTest(
splitPerModule: Boolean,
propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
) {
val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file }
@@ -153,6 +155,7 @@ abstract class BasicIrBoxTest(
propertyLazyInitialization = propertyLazyInitialization,
lowerPerModule = lowerPerModule,
safeExternalBoolean = safeExternalBoolean,
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
)
compiledModule.jsCode!!.writeTo(outputFile, config)
@@ -183,6 +186,7 @@ abstract class BasicIrBoxTest(
multiModule = splitPerModule || perModule,
propertyLazyInitialization = propertyLazyInitialization,
safeExternalBoolean = safeExternalBoolean,
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
).jsCode!!.writeTo(pirOutputFile, config)
}
} else {