Reorganize spec tests infrastructure code

- Add the tests mute system for the diagnostic tests
- Move the code for the test info parsing to the separate package `parsers`
- Unification of the `linked` and `not linked` spec tests
- Package structure is refactored
- Change the multiline comment format with a test information
- Actualize `PrintSpecTestsStatistic`
- Other different code improvements
This commit is contained in:
victor.petukhov
2018-10-31 12:56:27 +03:00
parent 2af9efa4a0
commit 64f531fc93
348 changed files with 4722 additions and 3802 deletions
@@ -1,12 +1,11 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: analysis, common
NUMBER: 1
DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, analysis, common
* NUMBER: 1
* DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
*/
// FILE: contracts.kt
@@ -15,6 +14,7 @@ package contracts
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
contract {
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
@@ -26,6 +26,7 @@ inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
return value_1 != null
}
// TESTCASE NUMBER: 2
inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boolean? {
contract {
callsInPlace(block, InvocationKind.AT_MOST_ONCE)
@@ -42,10 +43,11 @@ inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boole
return null
}
// FILE: usages.kt
// FILE: main.kt
import contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Int?) {
val value_2: Int
if (contracts.case_1(value_1) { value_2 = 10 }) {
@@ -56,6 +58,7 @@ fun case_1(value_1: Int?) {
}
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
val value_4: Int
when (value_1.case_2(value_2, value_3) { value_4 = 10 }) {
@@ -1,12 +1,11 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: analysis, common
NUMBER: 1
DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, analysis, common
* NUMBER: 1
* DESCRIPTION: Analysis by contracts with mixed CallsInPlace and Returns effects.
*/
// FILE: contracts.kt
@@ -15,6 +14,7 @@ package contracts
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -24,6 +24,7 @@ inline fun case_1(value_1: Int?, block: () -> Unit): Boolean {
return value_1 != null
}
// TESTCASE NUMBER: 2
inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boolean? {
contract {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
@@ -37,10 +38,11 @@ inline fun <T> T?.case_2(value_1: Int?, value_2: Any?, block: () -> Unit): Boole
return null
}
// FILE: usages.kt
// FILE: main.kt
import contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Int?) {
val value_3: Int
if (contracts.case_1(value_1) { value_3 = 10 }) {
@@ -51,6 +53,7 @@ fun case_1(value_1: Int?) {
}
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int?, value_2: Int?, value_3: Any?) {
val value_4: Int
when (value_1.case_2(value_2, value_3) { value_4 = 10 }) {
@@ -3,20 +3,21 @@
// SKIP_TXT
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: analysis, common
NUMBER: 2
DESCRIPTION: Recursion in the lambda of contract function.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, analysis, common
* NUMBER: 2
* DESCRIPTION: Recursion in the lambda of contract function.
*/
// TESTCASE NUMBER: 1
fun case_1(x: Int): Unit = funWithExactlyOnceCallsInPlace {
if (x == 0) return
if (x == 1) return
return case_1(x - 2)
}
// TESTCASE NUMBER: 2
fun case_2(x: Int) {
funWithAtLeastOnceCallsInPlace {
if (x == 0) return
@@ -25,6 +26,7 @@ fun case_2(x: Int) {
}
}
// TESTCASE NUMBER: 3
fun case_3(x: Int) {
funWithAtMostOnceCallsInPlace {
if (x == 0) return