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,16 +1,16 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 1
DESCRIPTION: Check that recursion isn't allowed in contract functions with CallsInPlace effect.
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 1
* DESCRIPTION: Check that recursion isn't allowed in contract functions with CallsInPlace effect.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
block()
@@ -2,17 +2,17 @@
// !WITH_CLASSES
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 2
DESCRIPTION: Check report about use contracts in literal functions, lambdas or not top-level functions.
ISSUES: KT-26149
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 2
* DESCRIPTION: Check report about use contracts in literal functions, lambdas or not top-level functions.
* ISSUES: KT-26149
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1() {
val fun_1 = fun(block: () -> Unit) {
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -23,6 +23,7 @@ fun case_1() {
println("1")
}
// TESTCASE NUMBER: 2
fun case_2() {
val lambda_1 = { block: () -> Unit ->
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -33,6 +34,7 @@ fun case_2() {
println("1")
}
// TESTCASE NUMBER: 3
object case_3 {
fun case_3(block: () -> Unit) {
<!CONTRACT_NOT_ALLOWED!>contract<!> { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
@@ -40,8 +42,12 @@ object case_3 {
}
}
// ISSUES: KT-26244
/*
* TESTCASE NUMBER: 4
* ISSUES: KT-26244
*/
class case_4 : _ClassLevel3() {
fun <T : Number?>T.case_4_1(): Boolean {
<!CONTRACT_NOT_ALLOWED!>contract<!> { returns(false) implies (<!USELESS_IS_CHECK!>this@case_4 !is _ClassLevel1<!>) }
return this == null
@@ -74,7 +80,10 @@ class case_4 : _ClassLevel3() {
fun case_4_5() = _ClassLevel3().case_4_5_wrap()
}
// ISSUES: KT-26244
/*
* TESTCASE NUMBER: 5
* ISSUES: KT-26244
*/
class case_5<T> : _ClassLevel5() {
inner class case_5_1 {
fun <K : Number?>K.case_5_1_1() {
@@ -1,23 +1,24 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 3
DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
UNEXPECTED BEHAVIOUR
ISSUES: KT-26126
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 3
* DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26126
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun funWithContractExactlyOnce(block: () -> Unit) { // report about not-inline function is expected
contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) }
return block()
}
// TESTCASE NUMBER: 1
fun case_1() {
val value_1: Int
funWithContractExactlyOnce { value_1 = 10 } // back-end exception
@@ -2,18 +2,18 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 4
DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
UNEXPECTED BEHAVIOUR
ISSUES: KT-27090
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (NEGATIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 4
* DESCRIPTION: Check that fun with contract and CallsInPlace effect is an inline function.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-27090
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
val Boolean.case_1: () -> Unit
get() {
contract {
@@ -22,6 +22,7 @@ val Boolean.case_1: () -> Unit
return {}
}
// TESTCASE NUMBER: 2
val (() -> Unit).case_2: () -> Unit
get() {
contract {
@@ -30,6 +31,7 @@ val (() -> Unit).case_2: () -> Unit
return {}
}
// TESTCASE NUMBER: 3
var Boolean.case_3: () -> Unit
get() {
return {}
@@ -40,6 +42,7 @@ var Boolean.case_3: () -> Unit
}
}
// TESTCASE NUMBER: 4
var (() -> Unit).case_4: () -> Unit
get() {
return {}
@@ -50,6 +53,7 @@ var (() -> Unit).case_4: () -> Unit
}
}
// TESTCASE NUMBER: 5
val Boolean.case_5: () -> Unit
get() {
contract {
@@ -1,32 +1,35 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 1
DESCRIPTION: Contract function usage before declaration it
* KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
*
* SECTIONS: contracts, declarations, contractFunction
* NUMBER: 1
* DESCRIPTION: Use a contract function before the declaration it.
*/
import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1_1(x: Any?) {
if (case_1_2(x)) {
<!DEBUG_INFO_SMARTCAST!>x<!>.length
}
}
// TESTCASE NUMBER: 2
fun case_2_1(x: Number?) {
case_2_2(x)
println(<!DEBUG_INFO_SMARTCAST!>x<!>.toByte())
}
// TESTCASE NUMBER: 1
fun case_1_2(x: Any?): Boolean {
contract { returns(true) implies (x is String) }
return x is String
}
// TESTCASE NUMBER: 2
fun case_2_2(x: Any?) {
contract { returns() implies(x != null) }
if (x == null) throw Exception()
@@ -1,35 +0,0 @@
// !USE_EXPERIMENTAL: kotlin.contracts.ExperimentalContracts
/*
KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE)
SECTION: contracts
CATEGORIES: declarations, contractFunction
NUMBER: 2
DESCRIPTION: Contract function usage before declaration it
*/
import kotlin.contracts.*
fun case_1_1(x: Any?) {
if (case_1_2(x)) {
<!DEBUG_INFO_SMARTCAST!>x<!>.length
}
}
fun case_2_1(x: Number?) {
case_2_2(x)
println(<!DEBUG_INFO_SMARTCAST!>x<!>.toByte())
}
fun case_1_2(x: Any?): Boolean {
contract { returns(true) implies (x is String) }
return x is String
}
fun case_2_2(x: Any?) {
contract { returns() implies(x != null) }
if (x == null) throw Exception()
}
@@ -1,10 +0,0 @@
package
public fun case_1_1(/*0*/ x: kotlin.Any?): kotlin.Unit
public fun case_1_2(/*0*/ x: kotlin.Any?): kotlin.Boolean
Returns(TRUE) -> x is String
public fun case_2_1(/*0*/ x: kotlin.Number?): kotlin.Unit
public fun case_2_2(/*0*/ x: kotlin.Any?): kotlin.Unit
Returns(WILDCARD) -> x != null