Add FIR version of spec diagnostic tests

This commit is contained in:
Denis Zharkov
2020-04-14 12:30:25 +03:00
parent 3cb2b0cab1
commit 04076ea748
4 changed files with 6750 additions and 10 deletions
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.spec.checkers
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.io.FileUtil
import org.jetbrains.kotlin.TestExceptionsComparator
import org.jetbrains.kotlin.config.LanguageVersionSettings
@@ -16,7 +17,8 @@ import org.jetbrains.kotlin.spec.utils.models.AbstractSpecTest
import org.jetbrains.kotlin.spec.utils.parsers.CommonParser
import org.jetbrains.kotlin.spec.utils.validators.DiagnosticTestTypeValidator
import org.jetbrains.kotlin.spec.utils.validators.SpecTestValidationException
import org.jetbrains.kotlin.test.*
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert
import java.io.File
import java.util.regex.Matcher
@@ -30,6 +32,18 @@ abstract class AbstractDiagnosticsTestSpec : org.jetbrains.kotlin.checkers.Abstr
private const val MODULE_PATH = "compiler/tests-spec"
private const val DIAGNOSTICS_TESTDATA_PATH = "$MODULE_PATH/testData/diagnostics"
private const val HELPERS_PATH = "$DIAGNOSTICS_TESTDATA_PATH/helpers"
fun additionalKtFiles(specTest: AbstractSpecTest, project: Project): List<KtFile> {
if (specTest.helpers == null) return emptyList()
return specTest.helpers.map {
val filename = "$it.kt"
val helperContent = FileUtil.loadFile(File("$HELPERS_PATH/$filename"), true)
KotlinTestUtils.createFile(filename, helperContent, project)
}
}
}
lateinit var specTest: AbstractSpecTest
@@ -56,15 +70,7 @@ abstract class AbstractDiagnosticsTestSpec : org.jetbrains.kotlin.checkers.Abstr
override fun getKtFiles(testFiles: List<TestFile>, includeExtras: Boolean): List<KtFile> {
val ktFiles = super.getKtFiles(testFiles, includeExtras) as ArrayList
if (specTest.helpers == null) return ktFiles
specTest.helpers?.forEach {
val filename = "$it.kt"
val helperContent = FileUtil.loadFile(File("$HELPERS_PATH/$filename"), true)
ktFiles.add(
KotlinTestUtils.createFile(filename, helperContent, project)
)
}
ktFiles.addAll(additionalKtFiles(specTest, project))
return ktFiles
}
@@ -0,0 +1,37 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.spec.checkers
import org.jetbrains.kotlin.fir.AbstractFirOldFrontendDiagnosticsTest
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.spec.utils.models.AbstractSpecTest
import org.jetbrains.kotlin.spec.utils.parsers.CommonParser
import org.jetbrains.kotlin.test.ConfigurationKind
import java.io.File
abstract class AbstractFirDiagnosticsTestSpec : AbstractFirOldFrontendDiagnosticsTest() {
private lateinit var specTest: AbstractSpecTest
override fun extractConfigurationKind(files: List<TestFile>): ConfigurationKind {
return ConfigurationKind.ALL
}
override fun getKtFiles(testFiles: List<TestFile>, includeExtras: Boolean): List<KtFile> {
val ktFiles = super.getKtFiles(testFiles, includeExtras) as MutableList
ktFiles.addAll(AbstractDiagnosticsTestSpec.additionalKtFiles(specTest, project))
return ktFiles
}
override fun analyzeAndCheck(testDataFile: File, files: List<TestFile>) {
val testFilePath = testDataFile.canonicalPath
specTest = CommonParser.parseSpecTest(testFilePath, files.associate { Pair(it.fileName, it.clearText) }).first
super.analyzeAndCheck(testDataFile, files)
}
}
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.spec.utils.tasks
import org.jetbrains.kotlin.generators.tests.generator.testGroup
import org.jetbrains.kotlin.spec.checkers.AbstractDiagnosticsTestSpec
import org.jetbrains.kotlin.spec.checkers.AbstractFirDiagnosticsTestSpec
import org.jetbrains.kotlin.spec.codegen.AbstractBlackBoxCodegenTestSpec
import org.jetbrains.kotlin.spec.parsing.AbstractParsingTestSpec
import org.jetbrains.kotlin.spec.utils.GeneralConfiguration.SPEC_TESTDATA_PATH
@@ -45,6 +46,15 @@ fun generateTests() {
excludedPattern = excludedFirTestdataPattern
)
}
testClass<AbstractFirDiagnosticsTestSpec> {
model(
"diagnostics",
excludeDirs = listOf("helpers") + detectDirsWithTestsMapFileOnly("diagnostics"),
excludedPattern = excludedFirTestdataPattern
)
}
testClass<AbstractParsingTestSpec> {
model(
relativeRootPath = "psi",
@@ -59,6 +69,7 @@ fun generateTests() {
}
fun main() {
TestsJsonMapGenerator.buildTestsMapPerSection()
TestsJsonMapGenerator.buildTestsMapPerSection()
generateTests()
}