From 5ba9d0927806d6396cfa09639e568aaa2dcb2d80 Mon Sep 17 00:00:00 2001 From: "anastasiia.spaseeva" Date: Mon, 25 May 2020 21:35:22 +0300 Subject: [PATCH] [Spec tests] Fix fir test runner for spec tests --- .../kotlin/checkers/BaseDiagnosticsTest.kt | 6 +++++- .../fir/AbstractFirOldFrontendDiagnosticsTest.kt | 2 +- .../org/jetbrains/kotlin/fir/FirTestUtils.kt | 16 ++++++++++------ .../checkers/AbstractFirDiagnosticsTestSpec.kt | 4 ++-- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index 9e8059df008..54ded363e89 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -412,9 +412,13 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava|") - val SPEC_LINKS_IN_TESTDATA_PATTERN = + val SPEC_LINKED_TESTDATA_PATTERN = Regex("""\/\*\s+? \* KOTLIN (PSI|DIAGNOSTICS|CODEGEN BOX) SPEC TEST \((POSITIVE|NEGATIVE)\)\n([\s\S]*?\n)\s+\*\/\n""") + val SPEC_NOT_LINED_TESTDATA_PATTERN = + Regex("""\/\*\s+? \* KOTLIN (PSI|DIAGNOSTICS|CODEGEN BOX) NOT LINKED SPEC TEST \((POSITIVE|NEGATIVE)\)\n([\s\S]*?\n)\s+\*\/\n""") + + fun parseDiagnosticFilterDirective( directiveMap: Directives, allowUnderscoreUsage: Boolean diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt index ae367fc318f..b2c9f254188 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/AbstractFirOldFrontendDiagnosticsTest.kt @@ -21,7 +21,7 @@ abstract class AbstractFirOldFrontendDiagnosticsTest : AbstractFirDiagnosticsTes private fun prepareTestDataFile(originalFilePath: String, firTestDataFile: File) { if (!firTestDataFile.exists()) { - KotlinTestUtils.assertEqualsToFile(firTestDataFile, loadTestDataWithoutDiagnostics(File(originalFilePath))) + KotlinTestUtils.assertEqualsToFile(firTestDataFile, loadTestDataWithDiagnostics(File(originalFilePath))) } } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestUtils.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestUtils.kt index 199a35a07ef..f47f5c000c7 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestUtils.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/fir/FirTestUtils.kt @@ -8,7 +8,8 @@ package org.jetbrains.kotlin.fir import com.intellij.openapi.util.text.StringUtil import junit.framework.TestCase import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.DIAGNOSTIC_IN_TESTDATA_PATTERN -import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.SPEC_LINKS_IN_TESTDATA_PATTERN +import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.SPEC_LINKED_TESTDATA_PATTERN +import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.Companion.SPEC_NOT_LINED_TESTDATA_PATTERN import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF import java.io.File @@ -51,9 +52,12 @@ fun compareAndMergeFirFileAndOldFrontendFile( } } -fun loadTestDataWithoutDiagnostics(file: File): String { - val textWithoutDiagnostics = KotlinTestUtils.doLoadFile(file) - .replace(DIAGNOSTIC_IN_TESTDATA_PATTERN, "") - .replace(SPEC_LINKS_IN_TESTDATA_PATTERN, "") - return StringUtil.convertLineSeparators(textWithoutDiagnostics.trim()).trimTrailingWhitespacesAndAddNewlineAtEOF() +private fun loadTestData(file: File, vararg patternsToBeRemoved: Regex): String { + var text = KotlinTestUtils.doLoadFile(file) + patternsToBeRemoved.forEach { text = text.replace(it, "") } + return StringUtil.convertLineSeparators(text.trim()).trimTrailingWhitespacesAndAddNewlineAtEOF() } + +fun loadTestDataWithDiagnostics(file: File) = loadTestData(file, SPEC_LINKED_TESTDATA_PATTERN, SPEC_NOT_LINED_TESTDATA_PATTERN) + +fun loadTestDataWithoutDiagnostics(file: File) = loadTestData(file, DIAGNOSTIC_IN_TESTDATA_PATTERN, SPEC_LINKED_TESTDATA_PATTERN) \ No newline at end of file diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/checkers/AbstractFirDiagnosticsTestSpec.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/checkers/AbstractFirDiagnosticsTestSpec.kt index ae95c781aa1..49e5b419abf 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/checkers/AbstractFirDiagnosticsTestSpec.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/checkers/AbstractFirDiagnosticsTestSpec.kt @@ -29,8 +29,8 @@ abstract class AbstractFirDiagnosticsTestSpec : AbstractFirOldFrontendDiagnostic override fun analyzeAndCheck(testDataFile: File, files: List) { val testFilePath = testDataFile.canonicalPath - - specTest = CommonParser.parseSpecTest(testFilePath, files.associate { Pair(it.fileName, it.clearText) }).first + val testWithMetaInfoPath = if (!testFilePath.contains(".fir.kt")) testFilePath else testFilePath.replace(".fir.kt", ".kt") + specTest = CommonParser.parseSpecTest(testWithMetaInfoPath, files.associate { Pair(it.fileName, it.clearText) }).first super.analyzeAndCheck(testDataFile, files) }