[JS TESTS] Extend test frame with some features
- Setting up specific ABI version for module - Disabling mangle verification
This commit is contained in:
committed by
TeamCityServer
parent
3403c464fe
commit
a8d0e60328
@@ -152,7 +152,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
|
||||
return TestFile(temporaryFile.absolutePath, text, currentModule, directives)
|
||||
}
|
||||
|
||||
override fun createModule(name: String, dependencies: List<String>, friends: List<String>) = TestModule(name, dependencies, friends)
|
||||
override fun createModule(name: String, dependencies: List<String>, friends: List<String>, abiVersion: List<Int>) = TestModule(name, dependencies, friends)
|
||||
|
||||
override fun close() {
|
||||
FileUtil.delete(tmpDir)
|
||||
|
||||
@@ -86,6 +86,7 @@ class ApiTest : KotlinTestWithEnvironment() {
|
||||
resolvedLibraries,
|
||||
listOf(),
|
||||
IrFactoryImpl,
|
||||
verifySignatures = true
|
||||
).module.descriptor.packagesSerialized()
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.js.sourceMap.SourceMap3Builder
|
||||
import org.jetbrains.kotlin.js.sourceMap.SourceMapBuilderConsumer
|
||||
import org.jetbrains.kotlin.js.test.utils.*
|
||||
import org.jetbrains.kotlin.js.util.TextOutputImpl
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.metadata.DebugProtoBuf
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
@@ -150,6 +151,7 @@ abstract class BasicBoxTest(
|
||||
|
||||
val skipDceDriven = SKIP_DCE_DRIVEN.matcher(fileContent).find()
|
||||
val splitPerModule = SPLIT_PER_MODULE.matcher(fileContent).find()
|
||||
val skipMangleVerification = SKIP_MANGLE_VERIFICATION.matcher(fileContent).find()
|
||||
|
||||
val propertyLazyInitialization = PROPERTY_LAZY_INITIALIZATION.matcher(fileContent).find()
|
||||
val safeExternalBoolean = SAFE_EXTERNAL_BOOLEAN.matcher(fileContent).find()
|
||||
@@ -197,6 +199,7 @@ abstract class BasicBoxTest(
|
||||
val outputFileName = module.outputFileName(outputDir) + ".js"
|
||||
val dceOutputFileName = module.outputFileName(dceOutputDir) + ".js"
|
||||
val pirOutputFileName = module.outputFileName(pirOutputDir) + ".js"
|
||||
val abiVersion = module.abiVersion
|
||||
val isMainModule = mainModuleName == module.name
|
||||
|
||||
logger.logFile("Output JS", File(outputFileName))
|
||||
@@ -226,6 +229,8 @@ abstract class BasicBoxTest(
|
||||
propertyLazyInitialization,
|
||||
safeExternalBoolean,
|
||||
safeExternalBooleanDiagnostic,
|
||||
skipMangleVerification,
|
||||
abiVersion
|
||||
)
|
||||
|
||||
when {
|
||||
@@ -481,6 +486,8 @@ abstract class BasicBoxTest(
|
||||
propertyLazyInitialization: Boolean,
|
||||
safeExternalBoolean: Boolean,
|
||||
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
|
||||
skipMangleVerification: Boolean,
|
||||
abiVersion: KotlinAbiVersion
|
||||
) {
|
||||
val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") }
|
||||
val testFiles = kotlinFiles.map { it.fileName }
|
||||
@@ -533,6 +540,8 @@ abstract class BasicBoxTest(
|
||||
propertyLazyInitialization,
|
||||
safeExternalBoolean,
|
||||
safeExternalBooleanDiagnostic,
|
||||
skipMangleVerification,
|
||||
abiVersion
|
||||
)
|
||||
|
||||
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
|
||||
@@ -629,6 +638,8 @@ abstract class BasicBoxTest(
|
||||
propertyLazyInitialization = false,
|
||||
safeExternalBoolean = false,
|
||||
safeExternalBooleanDiagnostic = null,
|
||||
skipMangleVerification = false,
|
||||
abiVersion = KotlinAbiVersion.CURRENT
|
||||
)
|
||||
|
||||
val originalOutput = FileUtil.loadFile(outputFile)
|
||||
@@ -710,6 +721,8 @@ abstract class BasicBoxTest(
|
||||
propertyLazyInitialization: Boolean,
|
||||
safeExternalBoolean: Boolean,
|
||||
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
|
||||
skipMangleVerification: Boolean,
|
||||
abiVersion: KotlinAbiVersion
|
||||
) {
|
||||
val translator = K2JSTranslator(config, false)
|
||||
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
|
||||
@@ -973,7 +986,7 @@ abstract class BasicBoxTest(
|
||||
private inner class TestFileFactoryImpl() : TestFiles.TestFileFactory<TestModule, TestFile>, Closeable {
|
||||
var testPackage: String? = null
|
||||
val tmpDir = KtTestUtil.tmpDir("js-tests")
|
||||
val defaultModule = TestModule(TEST_MODULE, emptyList(), emptyList())
|
||||
val defaultModule = TestModule(TEST_MODULE, emptyList(), emptyList(), KotlinAbiVersion.CURRENT)
|
||||
var languageVersionSettings: LanguageVersionSettings? = null
|
||||
|
||||
override fun createFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile? {
|
||||
@@ -1036,8 +1049,13 @@ abstract class BasicBoxTest(
|
||||
)
|
||||
}
|
||||
|
||||
override fun createModule(name: String, dependencies: List<String>, friends: List<String>) =
|
||||
TestModule(name, dependencies, friends)
|
||||
override fun createModule(name: String, dependencies: List<String>, friends: List<String>, abiVersions: List<Int>): TestModule {
|
||||
val abiVersion = if (abiVersions.isEmpty()) KotlinAbiVersion.CURRENT else {
|
||||
assert(abiVersions.size == 3)
|
||||
KotlinAbiVersion(abiVersions[0], abiVersions[1], abiVersions[2])
|
||||
}
|
||||
return TestModule(name, dependencies, friends, abiVersion)
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
FileUtil.delete(tmpDir)
|
||||
@@ -1053,7 +1071,8 @@ abstract class BasicBoxTest(
|
||||
private class TestModule(
|
||||
name: String,
|
||||
dependencies: List<String>,
|
||||
friends: List<String>
|
||||
friends: List<String>,
|
||||
val abiVersion: KotlinAbiVersion
|
||||
) : KotlinBaseTest.TestModule(name, dependencies, friends) {
|
||||
var moduleKind = ModuleKind.PLAIN
|
||||
var inliningDisabled = false
|
||||
@@ -1108,6 +1127,7 @@ abstract class BasicBoxTest(
|
||||
private val EXPECT_ACTUAL_LINKER = Pattern.compile("^// EXPECT_ACTUAL_LINKER *$", Pattern.MULTILINE)
|
||||
private val SKIP_DCE_DRIVEN = Pattern.compile("^// *SKIP_DCE_DRIVEN *$", Pattern.MULTILINE)
|
||||
private val SPLIT_PER_MODULE = Pattern.compile("^// *SPLIT_PER_MODULE *$", Pattern.MULTILINE)
|
||||
private val SKIP_MANGLE_VERIFICATION = Pattern.compile("^// *SKIP_MANGLE_VERIFICATION *$", Pattern.MULTILINE)
|
||||
|
||||
private val ERROR_POLICY_PATTERN = Pattern.compile("^// *ERROR_POLICY: *(.+)$", Pattern.MULTILINE)
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ 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.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.parsing.parseBoolean
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
@@ -98,6 +99,8 @@ abstract class BasicIrBoxTest(
|
||||
propertyLazyInitialization: Boolean,
|
||||
safeExternalBoolean: Boolean,
|
||||
safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
|
||||
skipMangleVerification: Boolean,
|
||||
abiVersion: KotlinAbiVersion
|
||||
) {
|
||||
val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file }
|
||||
|
||||
@@ -156,6 +159,7 @@ abstract class BasicIrBoxTest(
|
||||
lowerPerModule = lowerPerModule,
|
||||
safeExternalBoolean = safeExternalBoolean,
|
||||
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
|
||||
verifySignatures = !skipMangleVerification
|
||||
)
|
||||
|
||||
compiledModule.jsCode!!.writeTo(outputFile, config)
|
||||
@@ -187,6 +191,7 @@ abstract class BasicIrBoxTest(
|
||||
propertyLazyInitialization = propertyLazyInitialization,
|
||||
safeExternalBoolean = safeExternalBoolean,
|
||||
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
|
||||
verifySignatures = !skipMangleVerification
|
||||
).jsCode!!.writeTo(pirOutputFile, config)
|
||||
}
|
||||
} else {
|
||||
@@ -200,6 +205,8 @@ abstract class BasicIrBoxTest(
|
||||
irFactory = IrFactoryImpl,
|
||||
outputKlibPath = actualOutputFile,
|
||||
nopack = true,
|
||||
verifySignatures = !skipMangleVerification,
|
||||
abiVersion = abiVersion,
|
||||
null
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user