Add NOTE and UNSPECIFIED BEHAVIOUR fields to spec tests

This commit is contained in:
victor.petukhov
2018-12-28 15:39:03 +03:00
parent ec8a6cbe9c
commit 317da3d481
5 changed files with 23 additions and 1 deletions
@@ -73,6 +73,7 @@ data class SpecTestCase(
var code: String,
var ranges: MutableList<IntRange>,
var unexpectedBehavior: Boolean,
var unspecifiedBehavior: Boolean,
val issues: MutableList<String>?
)
@@ -40,6 +40,7 @@ enum class SpecTestCaseInfoElementType(
) : SpecTestInfoElementType {
TESTCASE_NUMBER(valuePattern = testCaseNumberPattern, required = true),
RELEVANT_PLACES(valuePattern = relevantPlacesPattern),
UNSPECIFIED_BEHAVIOR
}
abstract class AbstractSpecTest(
@@ -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<String>,
helpers: Set<String>?
) : 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")
@@ -70,6 +70,7 @@ object CommonParser {
parsedTestFile.testDescription,
parsedTestFile.testCasesSet,
parsedTestFile.unexpectedBehavior,
LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR in testInfoElements,
parsedTestFile.issues,
parsedTestFile.helpers
)
@@ -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)