[JS TESTS] Extend test frame with some features

- Setting up specific ABI version for module
- Disabling mangle verification
This commit is contained in:
Roman Artemev
2021-05-26 20:05:03 +03:00
committed by TeamCityServer
parent 3403c464fe
commit a8d0e60328
10 changed files with 70 additions and 26 deletions
@@ -53,6 +53,7 @@ fun compile(
multiModule: Boolean = false, multiModule: Boolean = false,
relativeRequirePath: Boolean = false, relativeRequirePath: Boolean = false,
propertyLazyInitialization: Boolean, propertyLazyInitialization: Boolean,
verifySignatures: Boolean = true,
legacyPropertyAccess: Boolean = false, legacyPropertyAccess: Boolean = false,
baseClassIntoMetadata: Boolean = false, baseClassIntoMetadata: Boolean = false,
lowerPerModule: Boolean = false, lowerPerModule: Boolean = false,
@@ -60,7 +61,7 @@ fun compile(
safeExternalBooleanDiagnostic: RuntimeDiagnostic? = null, safeExternalBooleanDiagnostic: RuntimeDiagnostic? = null,
): CompilerResult { ): CompilerResult {
val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) = val (moduleFragment: IrModuleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer, moduleToName) =
loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory) loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory, verifySignatures)
val moduleDescriptor = moduleFragment.descriptor val moduleDescriptor = moduleFragment.descriptor
@@ -40,7 +40,10 @@ fun compileWasm(
exportedDeclarations: Set<FqName> = emptySet() exportedDeclarations: Set<FqName> = emptySet()
): WasmCompilerResult { ): WasmCompilerResult {
val (moduleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer) = val (moduleFragment, dependencyModules, irBuiltIns, symbolTable, deserializer) =
loadIr(project, mainModule, analyzer, configuration, allDependencies, friendDependencies, irFactory) loadIr(
project, mainModule, analyzer, configuration, allDependencies, friendDependencies,
irFactory, verifySignatures = false
)
val allModules = when (mainModule) { val allModules = when (mainModule) {
is MainModule.SourceFiles -> dependencyModules + listOf(moduleFragment) is MainModule.SourceFiles -> dependencyModules + listOf(moduleFragment)
@@ -15,10 +15,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
import org.jetbrains.kotlin.backend.common.lower.ExpectDeclarationRemover import org.jetbrains.kotlin.backend.common.lower.ExpectDeclarationRemover
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideChecker import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideChecker
import org.jetbrains.kotlin.backend.common.serialization.DeserializationStrategy import org.jetbrains.kotlin.backend.common.serialization.*
import org.jetbrains.kotlin.backend.common.serialization.ICData
import org.jetbrains.kotlin.backend.common.serialization.KlibIrVersion
import org.jetbrains.kotlin.backend.common.serialization.knownBuiltins
import org.jetbrains.kotlin.backend.common.serialization.mangle.ManglerChecker import org.jetbrains.kotlin.backend.common.serialization.mangle.ManglerChecker
import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.Ir2DescriptorManglerAdapter import org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor.Ir2DescriptorManglerAdapter
import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer import org.jetbrains.kotlin.backend.common.serialization.metadata.DynamicTypeDeserializer
@@ -105,6 +102,7 @@ fun generateKLib(
irFactory: IrFactory, irFactory: IrFactory,
outputKlibPath: String, outputKlibPath: String,
nopack: Boolean, nopack: Boolean,
verifySignatures: Boolean = true,
abiVersion: KotlinAbiVersion = KotlinAbiVersion.CURRENT, abiVersion: KotlinAbiVersion = KotlinAbiVersion.CURRENT,
jsOutputName: String? jsOutputName: String?
) { ) {
@@ -170,7 +168,9 @@ fun generateKLib(
val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files, irLinker, messageLogger, expectDescriptorToSymbol) val moduleFragment = psi2IrContext.generateModuleFragmentWithPlugins(project, files, irLinker, messageLogger, expectDescriptorToSymbol)
moduleFragment.acceptVoid(ManglerChecker(JsManglerIr, Ir2DescriptorManglerAdapter(JsManglerDesc))) if (verifySignatures) {
moduleFragment.acceptVoid(ManglerChecker(JsManglerIr, Ir2DescriptorManglerAdapter(JsManglerDesc)))
}
if (configuration.getBoolean(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR)) { if (configuration.getBoolean(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR)) {
val fakeOverrideChecker = FakeOverrideChecker(JsManglerIr, JsManglerDesc) val fakeOverrideChecker = FakeOverrideChecker(JsManglerIr, JsManglerDesc)
irLinker.modules.forEach { fakeOverrideChecker.check(it) } irLinker.modules.forEach { fakeOverrideChecker.check(it) }
@@ -228,6 +228,7 @@ fun loadIr(
allDependencies: KotlinLibraryResolveResult, allDependencies: KotlinLibraryResolveResult,
friendDependencies: List<KotlinLibrary>, friendDependencies: List<KotlinLibrary>,
irFactory: IrFactory, irFactory: IrFactory,
verifySignatures: Boolean
): IrModuleInfo { ): IrModuleInfo {
val depsDescriptors = ModulesStructure(project, mainModule, analyzer, configuration, allDependencies, friendDependencies) val depsDescriptors = ModulesStructure(project, mainModule, analyzer, configuration, allDependencies, friendDependencies)
val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT val errorPolicy = configuration.get(JSConfigurationKeys.ERROR_TOLERANCE_POLICY) ?: ErrorTolerancePolicy.DEFAULT
@@ -259,14 +260,18 @@ fun loadIr(
// TODO: not sure whether this check should be enabled by default. Add configuration key for it. // TODO: not sure whether this check should be enabled by default. Add configuration key for it.
val mangleChecker = ManglerChecker(JsManglerIr, Ir2DescriptorManglerAdapter(JsManglerDesc)) val mangleChecker = ManglerChecker(JsManglerIr, Ir2DescriptorManglerAdapter(JsManglerDesc))
moduleFragment.acceptVoid(mangleChecker) if (verifySignatures) {
moduleFragment.acceptVoid(mangleChecker)
}
if (configuration.getBoolean(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR)) { if (configuration.getBoolean(JSConfigurationKeys.FAKE_OVERRIDE_VALIDATOR)) {
val fakeOverrideChecker = FakeOverrideChecker(JsManglerIr, JsManglerDesc) val fakeOverrideChecker = FakeOverrideChecker(JsManglerIr, JsManglerDesc)
irLinker.modules.forEach { fakeOverrideChecker.check(it) } irLinker.modules.forEach { fakeOverrideChecker.check(it) }
} }
irBuiltIns.knownBuiltins.forEach { it.acceptVoid(mangleChecker) } if (verifySignatures) {
irBuiltIns.knownBuiltins.forEach { it.acceptVoid(mangleChecker) }
}
return IrModuleInfo(moduleFragment, deserializedModuleFragments, irBuiltIns, symbolTable, irLinker, moduleFragmentToUniqueName) return IrModuleInfo(moduleFragment, deserializedModuleFragments, irBuiltIns, symbolTable, irLinker, moduleFragmentToUniqueName)
} }
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.test.TestFiles
import org.jetbrains.kotlin.test.TestFiles.TestFileFactory import org.jetbrains.kotlin.test.TestFiles.TestFileFactory
import org.jetbrains.kotlin.test.util.KtTestUtil import org.jetbrains.kotlin.test.util.KtTestUtil
import java.io.File import java.io.File
import java.util.*
abstract class KotlinMultiFileTestWithJava<M : KotlinBaseTest.TestModule, F : KotlinBaseTest.TestFile> : abstract class KotlinMultiFileTestWithJava<M : KotlinBaseTest.TestModule, F : KotlinBaseTest.TestFile> :
KotlinBaseTest<F>() { KotlinBaseTest<F>() {
@@ -140,7 +139,7 @@ abstract class KotlinMultiFileTestWithJava<M : KotlinBaseTest.TestModule, F : Ko
return createTestFile(module, fileName, text, directives) return createTestFile(module, fileName, text, directives)
} }
override fun createModule(name: String, dependencies: List<String>, friends: List<String>): M? { override fun createModule(name: String, dependencies: List<String>, friends: List<String>, abiVersions: List<Int>): M? {
val module = createTestModule(name, dependencies, friends) val module = createTestModule(name, dependencies, friends)
val oldValue = modules.put(name, ModuleAndDependencies(module, dependencies, friends)) val oldValue = modules.put(name, ModuleAndDependencies(module, dependencies, friends))
assert(oldValue == null) { "Module $name declared more than once" } assert(oldValue == null) { "Module $name declared more than once" }
@@ -64,7 +64,7 @@ abstract class AbstractKlibBinaryCompatibilityTest : KotlinTestWithEnvironment()
TestFile(module, fileName, text, directives) TestFile(module, fileName, text, directives)
} ?: error("Expected a module for $fileName in $filePath") } ?: error("Expected a module for $fileName in $filePath")
override fun createModule(name: String, dependencies: List<String>, friends: List<String>) = override fun createModule(name: String, dependencies: List<String>, friends: List<String>, abiVersions: List<Int>) =
TestModule(name, dependencies, friends) TestModule(name, dependencies, friends)
}, },
@@ -10,10 +10,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.TestHelperGeneratorKt; import org.jetbrains.kotlin.TestHelperGeneratorKt;
import java.util.Collections; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -33,7 +30,7 @@ public class TestFiles {
*/ */
private static final String MODULE_DELIMITER = ",\\s*"; private static final String MODULE_DELIMITER = ",\\s*";
private static final Pattern MODULE_PATTERN = Pattern.compile("//\\s*MODULE:\\s*([^()\\n]+)(?:\\(([^()]+(?:" + MODULE_DELIMITER + "[^()]+)*)\\))?\\s*(?:\\(([^()]+(?:" + MODULE_DELIMITER + "[^()]+)*)\\))?\n"); private static final Pattern MODULE_PATTERN = Pattern.compile("//\\s*MODULE:\\s*([^()\\n]+)(?:\\(([^()]+(?:" + MODULE_DELIMITER + "[^()]+)*)\\))?\\s*(?:\\(([^()]+(?:" + MODULE_DELIMITER + "[^()]+)*)\\))?\\s*(?:\\((\\d+(?:" + MODULE_DELIMITER + "\\d+)*)\\))?\n");
private static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)\n"); private static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)\n");
private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("\\r\\n|\\r|\\n"); private static final Pattern LINE_SEPARATOR_PATTERN = Pattern.compile("\\r\\n|\\r|\\n");
@@ -88,10 +85,11 @@ public class TestFiles {
String moduleName = moduleMatcher.group(1); String moduleName = moduleMatcher.group(1);
String moduleDependencies = moduleMatcher.group(2); String moduleDependencies = moduleMatcher.group(2);
String moduleFriends = moduleMatcher.group(3); String moduleFriends = moduleMatcher.group(3);
String abiVersions = moduleMatcher.group(4);
if (moduleName != null) { if (moduleName != null) {
moduleName = moduleName.trim(); moduleName = moduleName.trim();
hasModules = true; hasModules = true;
module = factory.createModule(moduleName, parseModuleList(moduleDependencies), parseModuleList(moduleFriends)); module = factory.createModule(moduleName, parseModuleList(moduleDependencies), parseModuleList(moduleFriends), parseAbiVersionsList(abiVersions));
M oldValue = modules.put(moduleName, module); M oldValue = modules.put(moduleName, module);
assert oldValue == null : "Module with name " + moduleName + " already present in file"; assert oldValue == null : "Module with name " + moduleName + " already present in file";
} }
@@ -138,7 +136,7 @@ public class TestFiles {
} }
if (isDirectiveDefined(expectedText, "WITH_COROUTINES")) { if (isDirectiveDefined(expectedText, "WITH_COROUTINES")) {
M supportModule = hasModules ? factory.createModule("support", Collections.emptyList(), Collections.emptyList()) : null; M supportModule = hasModules ? factory.createModule("support", Collections.emptyList(), Collections.emptyList(), Collections.emptyList()) : null;
if (supportModule != null) { if (supportModule != null) {
M oldValue = modules.put(supportModule.name, supportModule); M oldValue = modules.put(supportModule.name, supportModule);
assert oldValue == null : "Module with name " + supportModule.name + " already present in file"; assert oldValue == null : "Module with name " + supportModule.name + " already present in file";
@@ -201,9 +199,19 @@ public class TestFiles {
return kotlin.text.StringsKt.split(dependencies, Pattern.compile(MODULE_DELIMITER), 0); return kotlin.text.StringsKt.split(dependencies, Pattern.compile(MODULE_DELIMITER), 0);
} }
private static List<Integer> parseAbiVersionsList(@Nullable String versions) {
if (versions == null) return Collections.emptyList();
List<String> splitted = kotlin.text.StringsKt.split(versions, Pattern.compile(MODULE_DELIMITER), 0);
List<Integer> result = new ArrayList<>(splitted.size());
for (String s : splitted) {
result.add(Integer.parseInt(s));
}
return result;
}
public interface TestFileFactory<M, F> { public interface TestFileFactory<M, F> {
F createFile(@Nullable M module, @NotNull String fileName, @NotNull String text, @NotNull Directives directives); F createFile(@Nullable M module, @NotNull String fileName, @NotNull String text, @NotNull Directives directives);
M createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends); M createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends, @NotNull List<Integer> abiVersions);
} }
public static abstract class TestFileFactoryNoModules<F> implements TestFileFactory<KotlinBaseTest.TestModule, F> { public static abstract class TestFileFactoryNoModules<F> implements TestFileFactory<KotlinBaseTest.TestModule, F> {
@@ -221,7 +229,7 @@ public class TestFiles {
public abstract F create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives); public abstract F create(@NotNull String fileName, @NotNull String text, @NotNull Directives directives);
@Override @Override
public KotlinBaseTest.TestModule createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends) { public KotlinBaseTest.TestModule createModule(@NotNull String name, @NotNull List<String> dependencies, @NotNull List<String> friends, @NotNull List<Integer> abiVersions) {
return null; return null;
} }
} }
@@ -152,7 +152,7 @@ abstract class AbstractJsLineNumberTest : KotlinTestWithEnvironment() {
return TestFile(temporaryFile.absolutePath, text, currentModule, directives) 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() { override fun close() {
FileUtil.delete(tmpDir) FileUtil.delete(tmpDir)
@@ -86,6 +86,7 @@ class ApiTest : KotlinTestWithEnvironment() {
resolvedLibraries, resolvedLibraries,
listOf(), listOf(),
IrFactoryImpl, IrFactoryImpl,
verifySignatures = true
).module.descriptor.packagesSerialized() ).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.sourceMap.SourceMapBuilderConsumer
import org.jetbrains.kotlin.js.test.utils.* import org.jetbrains.kotlin.js.test.utils.*
import org.jetbrains.kotlin.js.util.TextOutputImpl import org.jetbrains.kotlin.js.util.TextOutputImpl
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.metadata.DebugProtoBuf import org.jetbrains.kotlin.metadata.DebugProtoBuf
import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtNamedFunction
@@ -150,6 +151,7 @@ abstract class BasicBoxTest(
val skipDceDriven = SKIP_DCE_DRIVEN.matcher(fileContent).find() val skipDceDriven = SKIP_DCE_DRIVEN.matcher(fileContent).find()
val splitPerModule = SPLIT_PER_MODULE.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 propertyLazyInitialization = PROPERTY_LAZY_INITIALIZATION.matcher(fileContent).find()
val safeExternalBoolean = SAFE_EXTERNAL_BOOLEAN.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 outputFileName = module.outputFileName(outputDir) + ".js"
val dceOutputFileName = module.outputFileName(dceOutputDir) + ".js" val dceOutputFileName = module.outputFileName(dceOutputDir) + ".js"
val pirOutputFileName = module.outputFileName(pirOutputDir) + ".js" val pirOutputFileName = module.outputFileName(pirOutputDir) + ".js"
val abiVersion = module.abiVersion
val isMainModule = mainModuleName == module.name val isMainModule = mainModuleName == module.name
logger.logFile("Output JS", File(outputFileName)) logger.logFile("Output JS", File(outputFileName))
@@ -226,6 +229,8 @@ abstract class BasicBoxTest(
propertyLazyInitialization, propertyLazyInitialization,
safeExternalBoolean, safeExternalBoolean,
safeExternalBooleanDiagnostic, safeExternalBooleanDiagnostic,
skipMangleVerification,
abiVersion
) )
when { when {
@@ -481,6 +486,8 @@ abstract class BasicBoxTest(
propertyLazyInitialization: Boolean, propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean, safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?, safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
skipMangleVerification: Boolean,
abiVersion: KotlinAbiVersion
) { ) {
val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") } val kotlinFiles = module.files.filter { it.fileName.endsWith(".kt") }
val testFiles = kotlinFiles.map { it.fileName } val testFiles = kotlinFiles.map { it.fileName }
@@ -533,6 +540,8 @@ abstract class BasicBoxTest(
propertyLazyInitialization, propertyLazyInitialization,
safeExternalBoolean, safeExternalBoolean,
safeExternalBooleanDiagnostic, safeExternalBooleanDiagnostic,
skipMangleVerification,
abiVersion
) )
if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) { if (incrementalCompilationChecksEnabled && module.hasFilesToRecompile) {
@@ -629,6 +638,8 @@ abstract class BasicBoxTest(
propertyLazyInitialization = false, propertyLazyInitialization = false,
safeExternalBoolean = false, safeExternalBoolean = false,
safeExternalBooleanDiagnostic = null, safeExternalBooleanDiagnostic = null,
skipMangleVerification = false,
abiVersion = KotlinAbiVersion.CURRENT
) )
val originalOutput = FileUtil.loadFile(outputFile) val originalOutput = FileUtil.loadFile(outputFile)
@@ -710,6 +721,8 @@ abstract class BasicBoxTest(
propertyLazyInitialization: Boolean, propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean, safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?, safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
skipMangleVerification: Boolean,
abiVersion: KotlinAbiVersion
) { ) {
val translator = K2JSTranslator(config, false) val translator = K2JSTranslator(config, false)
val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters) val translationResult = translator.translateUnits(ExceptionThrowingReporter, units, mainCallParameters)
@@ -973,7 +986,7 @@ abstract class BasicBoxTest(
private inner class TestFileFactoryImpl() : TestFiles.TestFileFactory<TestModule, TestFile>, Closeable { private inner class TestFileFactoryImpl() : TestFiles.TestFileFactory<TestModule, TestFile>, Closeable {
var testPackage: String? = null var testPackage: String? = null
val tmpDir = KtTestUtil.tmpDir("js-tests") 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 var languageVersionSettings: LanguageVersionSettings? = null
override fun createFile(module: TestModule?, fileName: String, text: String, directives: Directives): TestFile? { 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>) = override fun createModule(name: String, dependencies: List<String>, friends: List<String>, abiVersions: List<Int>): TestModule {
TestModule(name, dependencies, friends) 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() { override fun close() {
FileUtil.delete(tmpDir) FileUtil.delete(tmpDir)
@@ -1053,7 +1071,8 @@ abstract class BasicBoxTest(
private class TestModule( private class TestModule(
name: String, name: String,
dependencies: List<String>, dependencies: List<String>,
friends: List<String> friends: List<String>,
val abiVersion: KotlinAbiVersion
) : KotlinBaseTest.TestModule(name, dependencies, friends) { ) : KotlinBaseTest.TestModule(name, dependencies, friends) {
var moduleKind = ModuleKind.PLAIN var moduleKind = ModuleKind.PLAIN
var inliningDisabled = false var inliningDisabled = false
@@ -1108,6 +1127,7 @@ abstract class BasicBoxTest(
private val EXPECT_ACTUAL_LINKER = Pattern.compile("^// EXPECT_ACTUAL_LINKER *$", Pattern.MULTILINE) 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 SKIP_DCE_DRIVEN = Pattern.compile("^// *SKIP_DCE_DRIVEN *$", Pattern.MULTILINE)
private val SPLIT_PER_MODULE = Pattern.compile("^// *SPLIT_PER_MODULE *$", 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) 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.config.RuntimeDiagnostic
import org.jetbrains.kotlin.js.facade.MainCallParameters import org.jetbrains.kotlin.js.facade.MainCallParameters
import org.jetbrains.kotlin.js.facade.TranslationUnit import org.jetbrains.kotlin.js.facade.TranslationUnit
import org.jetbrains.kotlin.library.KotlinAbiVersion
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.parsing.parseBoolean import org.jetbrains.kotlin.parsing.parseBoolean
import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TargetBackend
@@ -98,6 +99,8 @@ abstract class BasicIrBoxTest(
propertyLazyInitialization: Boolean, propertyLazyInitialization: Boolean,
safeExternalBoolean: Boolean, safeExternalBoolean: Boolean,
safeExternalBooleanDiagnostic: RuntimeDiagnostic?, safeExternalBooleanDiagnostic: RuntimeDiagnostic?,
skipMangleVerification: Boolean,
abiVersion: KotlinAbiVersion
) { ) {
val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file } val filesToCompile = units.map { (it as TranslationUnit.SourceFile).file }
@@ -156,6 +159,7 @@ abstract class BasicIrBoxTest(
lowerPerModule = lowerPerModule, lowerPerModule = lowerPerModule,
safeExternalBoolean = safeExternalBoolean, safeExternalBoolean = safeExternalBoolean,
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic, safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
verifySignatures = !skipMangleVerification
) )
compiledModule.jsCode!!.writeTo(outputFile, config) compiledModule.jsCode!!.writeTo(outputFile, config)
@@ -187,6 +191,7 @@ abstract class BasicIrBoxTest(
propertyLazyInitialization = propertyLazyInitialization, propertyLazyInitialization = propertyLazyInitialization,
safeExternalBoolean = safeExternalBoolean, safeExternalBoolean = safeExternalBoolean,
safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic, safeExternalBooleanDiagnostic = safeExternalBooleanDiagnostic,
verifySignatures = !skipMangleVerification
).jsCode!!.writeTo(pirOutputFile, config) ).jsCode!!.writeTo(pirOutputFile, config)
} }
} else { } else {
@@ -200,6 +205,8 @@ abstract class BasicIrBoxTest(
irFactory = IrFactoryImpl, irFactory = IrFactoryImpl,
outputKlibPath = actualOutputFile, outputKlibPath = actualOutputFile,
nopack = true, nopack = true,
verifySignatures = !skipMangleVerification,
abiVersion = abiVersion,
null null
) )