[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
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -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" }
|
||||||
|
|||||||
+1
-1
@@ -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
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user