Add NOTE and UNSPECIFIED BEHAVIOUR fields to spec tests
This commit is contained in:
@@ -73,6 +73,7 @@ data class SpecTestCase(
|
|||||||
var code: String,
|
var code: String,
|
||||||
var ranges: MutableList<IntRange>,
|
var ranges: MutableList<IntRange>,
|
||||||
var unexpectedBehavior: Boolean,
|
var unexpectedBehavior: Boolean,
|
||||||
|
var unspecifiedBehavior: Boolean,
|
||||||
val issues: MutableList<String>?
|
val issues: MutableList<String>?
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ enum class SpecTestCaseInfoElementType(
|
|||||||
) : SpecTestInfoElementType {
|
) : SpecTestInfoElementType {
|
||||||
TESTCASE_NUMBER(valuePattern = testCaseNumberPattern, required = true),
|
TESTCASE_NUMBER(valuePattern = testCaseNumberPattern, required = true),
|
||||||
RELEVANT_PLACES(valuePattern = relevantPlacesPattern),
|
RELEVANT_PLACES(valuePattern = relevantPlacesPattern),
|
||||||
|
UNSPECIFIED_BEHAVIOR
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractSpecTest(
|
abstract class AbstractSpecTest(
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ enum class LinkedSpecTestFileInfoElementType(
|
|||||||
) : SpecTestInfoElementType {
|
) : SpecTestInfoElementType {
|
||||||
SPEC_VERSION(required = true),
|
SPEC_VERSION(required = true),
|
||||||
PLACE(valuePattern = placePattern, required = true),
|
PLACE(valuePattern = placePattern, required = true),
|
||||||
RELEVANT_PLACES(valuePattern = relevantPlacesPattern)
|
RELEVANT_PLACES(valuePattern = relevantPlacesPattern),
|
||||||
|
UNSPECIFIED_BEHAVIOR
|
||||||
}
|
}
|
||||||
|
|
||||||
data class SpecPlace(
|
data class SpecPlace(
|
||||||
@@ -43,6 +44,7 @@ class LinkedSpecTest(
|
|||||||
description: String,
|
description: String,
|
||||||
cases: SpecTestCasesSet,
|
cases: SpecTestCasesSet,
|
||||||
unexpectedBehavior: Boolean,
|
unexpectedBehavior: Boolean,
|
||||||
|
private val unspecifiedBehavior: Boolean,
|
||||||
issues: Set<String>,
|
issues: Set<String>,
|
||||||
helpers: Set<String>?
|
helpers: Set<String>?
|
||||||
) : AbstractSpecTest(testArea, testType, place.sections, testNumber, description, cases, unexpectedBehavior, issues, helpers) {
|
) : AbstractSpecTest(testArea, testType, place.sections, testNumber, description, cases, unexpectedBehavior, issues, helpers) {
|
||||||
@@ -54,8 +56,22 @@ class LinkedSpecTest(
|
|||||||
&& place.sentenceNumber == pathMatcher.group("sentenceNumber").toInt()
|
&& place.sentenceNumber == pathMatcher.group("sentenceNumber").toInt()
|
||||||
&& testNumber == pathMatcher.group("testNumber").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 {
|
override fun toString() = buildString {
|
||||||
append("--------------------------------------------------$ls")
|
append("--------------------------------------------------$ls")
|
||||||
|
getUnspecifiedBehaviourText()?.let { append(it + ls) }
|
||||||
super.getUnexpectedBehaviourText()?.let { append(it + ls) }
|
super.getUnexpectedBehaviourText()?.let { append(it + ls) }
|
||||||
append("${testArea.name.withSpaces()} $testType SPEC TEST (${testType.toString().withSpaces()})$ls")
|
append("${testArea.name.withSpaces()} $testType SPEC TEST (${testType.toString().withSpaces()})$ls")
|
||||||
append("SPEC VERSION: $specVersion$ls")
|
append("SPEC VERSION: $specVersion$ls")
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ object CommonParser {
|
|||||||
parsedTestFile.testDescription,
|
parsedTestFile.testDescription,
|
||||||
parsedTestFile.testCasesSet,
|
parsedTestFile.testCasesSet,
|
||||||
parsedTestFile.unexpectedBehavior,
|
parsedTestFile.unexpectedBehavior,
|
||||||
|
LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR in testInfoElements,
|
||||||
parsedTestFile.issues,
|
parsedTestFile.issues,
|
||||||
parsedTestFile.helpers
|
parsedTestFile.helpers
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.spec.parsers
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.spec.*
|
import org.jetbrains.kotlin.spec.*
|
||||||
import org.jetbrains.kotlin.spec.models.CommonInfoElementType
|
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.SpecTestCaseInfoElementType
|
||||||
import org.jetbrains.kotlin.spec.models.SpecTestInfoElements
|
import org.jetbrains.kotlin.spec.models.SpecTestInfoElements
|
||||||
import org.jetbrains.kotlin.spec.parsers.CommonParser.splitByComma
|
import org.jetbrains.kotlin.spec.parsers.CommonParser.splitByComma
|
||||||
@@ -16,6 +17,7 @@ import java.util.*
|
|||||||
private operator fun SpecTestCase.plusAssign(addTestCase: SpecTestCase) {
|
private operator fun SpecTestCase.plusAssign(addTestCase: SpecTestCase) {
|
||||||
this.code += addTestCase.code
|
this.code += addTestCase.code
|
||||||
this.unexpectedBehavior = this.unexpectedBehavior or addTestCase.unexpectedBehavior
|
this.unexpectedBehavior = this.unexpectedBehavior or addTestCase.unexpectedBehavior
|
||||||
|
this.unspecifiedBehavior = this.unspecifiedBehavior or addTestCase.unspecifiedBehavior
|
||||||
this.issues?.addAll(addTestCase.issues!!)
|
this.issues?.addAll(addTestCase.issues!!)
|
||||||
this.ranges.addAll(addTestCase.ranges)
|
this.ranges.addAll(addTestCase.ranges)
|
||||||
}
|
}
|
||||||
@@ -71,6 +73,7 @@ fun parseTestCases(testFiles: TestFiles): SpecTestCasesSet {
|
|||||||
code = matcher.group("codeSL") ?: matcher.group("codeML"),
|
code = matcher.group("codeSL") ?: matcher.group("codeML"),
|
||||||
ranges = mutableListOf(range),
|
ranges = mutableListOf(range),
|
||||||
unexpectedBehavior = caseInfoElements.contains(CommonInfoElementType.UNEXPECTED_BEHAVIOUR),
|
unexpectedBehavior = caseInfoElements.contains(CommonInfoElementType.UNEXPECTED_BEHAVIOUR),
|
||||||
|
unspecifiedBehavior = caseInfoElements.contains(LinkedSpecTestFileInfoElementType.UNSPECIFIED_BEHAVIOR),
|
||||||
issues = CommonParser.parseIssues(caseInfoElements[CommonInfoElementType.ISSUES]).toMutableList()
|
issues = CommonParser.parseIssues(caseInfoElements[CommonInfoElementType.ISSUES]).toMutableList()
|
||||||
).save(testCasesSet.byNumbers, testCasesOfFile, testCasesByRangesOfFile, caseInfoElements)
|
).save(testCasesSet.byNumbers, testCasesOfFile, testCasesByRangesOfFile, caseInfoElements)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user