diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt index 4d979d51d08..7e74c8a50f9 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/Common.kt @@ -73,6 +73,7 @@ data class SpecTestCase( var code: String, var ranges: MutableList, var unexpectedBehavior: Boolean, + var unspecifiedBehavior: Boolean, val issues: MutableList? ) diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt index ecbb7dbb59a..7a6167faf40 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/AbstractSpecTest.kt @@ -40,6 +40,7 @@ enum class SpecTestCaseInfoElementType( ) : SpecTestInfoElementType { TESTCASE_NUMBER(valuePattern = testCaseNumberPattern, required = true), RELEVANT_PLACES(valuePattern = relevantPlacesPattern), + UNSPECIFIED_BEHAVIOR } abstract class AbstractSpecTest( diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt index fd94d86e07e..b9c7d421c4c 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/models/LinkedSpecTest.kt @@ -24,7 +24,8 @@ enum class LinkedSpecTestFileInfoElementType( ) : SpecTestInfoElementType { SPEC_VERSION(required = true), PLACE(valuePattern = placePattern, required = true), - RELEVANT_PLACES(valuePattern = relevantPlacesPattern) + RELEVANT_PLACES(valuePattern = relevantPlacesPattern), + UNSPECIFIED_BEHAVIOR } data class SpecPlace( @@ -43,6 +44,7 @@ class LinkedSpecTest( description: String, cases: SpecTestCasesSet, unexpectedBehavior: Boolean, + private val unspecifiedBehavior: Boolean, issues: Set, helpers: Set? ) : AbstractSpecTest(testArea, testType, place.sections, testNumber, description, cases, unexpectedBehavior, issues, helpers) { @@ -54,8 +56,22 @@ class LinkedSpecTest( && place.sentenceNumber == pathMatcher.group("sentenceNumber").toInt() && testNumber == pathMatcher.group("testNumber").toInt() + private fun getUnspecifiedBehaviourText(): String? { + val separatedTestCasesUnspecifiedBehaviorNumber = cases.byNumbers.count { it.value.unspecifiedBehavior } + val testCasesUnspecifiedBehaviorNumber = when { + unspecifiedBehavior -> cases.byNumbers.size + separatedTestCasesUnspecifiedBehaviorNumber != 0 -> separatedTestCasesUnspecifiedBehaviorNumber + else -> 0 + } + + return if (testCasesUnspecifiedBehaviorNumber != 0) { + "!!! HAS UNSPECIFIED BEHAVIOUR (in $testCasesUnspecifiedBehaviorNumber cases) !!!" + } else null + } + override fun toString() = buildString { append("--------------------------------------------------$ls") + getUnspecifiedBehaviourText()?.let { append(it + ls) } super.getUnexpectedBehaviourText()?.let { append(it + ls) } append("${testArea.name.withSpaces()} $testType SPEC TEST (${testType.toString().withSpaces()})$ls") append("SPEC VERSION: $specVersion$ls") diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt index 015117d10cb..324f83280eb 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/CommonParser.kt @@ -70,6 +70,7 @@ object CommonParser { parsedTestFile.testDescription, parsedTestFile.testCasesSet, parsedTestFile.unexpectedBehavior, + LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR in testInfoElements, parsedTestFile.issues, parsedTestFile.helpers ) diff --git a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt index 59b1e213346..ba707574769 100644 --- a/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt +++ b/compiler/tests-spec/tests/org/jetbrains/kotlin/spec/parsers/TestCasesParser.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.spec.parsers import org.jetbrains.kotlin.spec.* import org.jetbrains.kotlin.spec.models.CommonInfoElementType +import org.jetbrains.kotlin.spec.models.LinkedSpecTestFileInfoElementType import org.jetbrains.kotlin.spec.models.SpecTestCaseInfoElementType import org.jetbrains.kotlin.spec.models.SpecTestInfoElements import org.jetbrains.kotlin.spec.parsers.CommonParser.splitByComma @@ -16,6 +17,7 @@ import java.util.* private operator fun SpecTestCase.plusAssign(addTestCase: SpecTestCase) { this.code += addTestCase.code this.unexpectedBehavior = this.unexpectedBehavior or addTestCase.unexpectedBehavior + this.unspecifiedBehavior = this.unspecifiedBehavior or addTestCase.unspecifiedBehavior this.issues?.addAll(addTestCase.issues!!) this.ranges.addAll(addTestCase.ranges) } @@ -71,6 +73,7 @@ fun parseTestCases(testFiles: TestFiles): SpecTestCasesSet { code = matcher.group("codeSL") ?: matcher.group("codeML"), ranges = mutableListOf(range), unexpectedBehavior = caseInfoElements.contains(CommonInfoElementType.UNEXPECTED_BEHAVIOUR), + unspecifiedBehavior = caseInfoElements.contains(LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR), issues = CommonParser.parseIssues(caseInfoElements[CommonInfoElementType.ISSUES]).toMutableList() ).save(testCasesSet.byNumbers, testCasesOfFile, testCasesByRangesOfFile, caseInfoElements)