[IR] add JsTextTest for IrScript

This commit is contained in:
Vitaliy.Tikhonov
2019-08-30 14:41:54 +03:00
committed by romanart
parent 209a20153e
commit cf5a1615ea
11 changed files with 383 additions and 3 deletions
@@ -68,6 +68,7 @@ import java.util.regex.Pattern;
import static org.jetbrains.kotlin.checkers.CompilerTestLanguageVersionSettingsKt.parseLanguageVersionSettings;
import static org.jetbrains.kotlin.cli.common.output.OutputUtilsKt.writeAllTo;
import static org.jetbrains.kotlin.cli.js.K2JsIrCompilerKt.loadPluginsForTests;
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*;
import static org.jetbrains.kotlin.codegen.TestUtilsKt.extractUrls;
import static org.jetbrains.kotlin.test.KotlinTestUtils.getAnnotationsJar;
@@ -130,6 +131,8 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
);
}
protected void configureTestSpecific(@NotNull CompilerConfiguration configuration, @NotNull List<TestFile> testFiles) {}
@NotNull
protected CompilerConfiguration createConfiguration(
@NotNull ConfigurationKind kind,
@@ -144,6 +147,8 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
updateConfiguration(configuration);
setCustomDefaultJvmTarget(configuration);
configureTestSpecific(configuration, testFilesWithConfigurationDirectives);
return configuration;
}
@@ -354,7 +359,7 @@ public abstract class CodegenTestCase extends KtUsefulTestCase {
List<KtFile> ktFiles = new ArrayList<>(files.size());
for (TestFile file : files) {
if (file.name.endsWith(".kt")) {
if (file.name.endsWith(".kt") || file.name.endsWith(".kts")) {
// `rangesToDiagnosticNames` parameter is not-null only for diagnostic tests, it's using for lazy diagnostics
String content = CheckerTestUtil.INSTANCE.parseDiagnosedRanges(file.content, new ArrayList<>(0), null);
ktFiles.add(KotlinTestUtils.createFile(file.name, content, project));
@@ -18,6 +18,8 @@ package org.jetbrains.kotlin.ir
import com.intellij.openapi.util.text.StringUtil
import junit.framework.TestCase
import org.jetbrains.kotlin.cli.js.loadPluginsForTests
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -31,6 +33,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.scripting.compiler.plugin.loadScriptConfiguration
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
import org.jetbrains.kotlin.utils.rethrow
@@ -48,7 +51,7 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
val ignoreErrors = shouldIgnoreErrors(wholeFile)
val irModule = generateIrModule(ignoreErrors)
val ktFiles = testFiles.filter { it.name.endsWith(".kt") }
val ktFiles = testFiles.filter { it.name.endsWith(".kt") || it.name.endsWith(".kts") }
for ((testFile, irFile) in ktFiles.zip(irModule.files)) {
doTestIrFileAgainstExpectations(dir, testFile, irFile)
}
@@ -88,6 +91,13 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
return generateMemberStub(classDescriptor) as IrClass
}
override fun configureTestSpecific(configuration: CompilerConfiguration, testFiles: List<TestFile>) {
if (testFiles.any { it.name.endsWith(".kts") }) {
loadScriptConfiguration(configuration)
loadPluginsForTests(configuration)
}
}
private fun doTestIrFileAgainstExpectations(dir: File, testFile: TestFile, irFile: IrFile) {
if (testFile.isExternalFile()) return
@@ -299,7 +309,9 @@ abstract class AbstractIrTextTestCase : AbstractIrGeneratorTestCase() {
internal class IrTreeFileLabel(val expectedTextFile: File, val lineNumber: Int)
protected open fun getExpectedTextFileName(testFile: TestFile, name: String = testFile.name): String = name.replace(".kt", ".txt")
protected open fun getExpectedTextFileName(testFile: TestFile, name: String = testFile.name): String {
return name.replace(".kts", ".txt").replace(".kt", ".txt")
}
private fun parseExpectations(dir: File, testFile: TestFile): Expectations {
val regexps =