Move detecting of illegal call of contract function into call checker

(#KT-26153, #KT-26191) fixed
This commit is contained in:
Dmitriy Novozhilov
2019-03-01 12:39:00 +03:00
parent 54e5cce9be
commit 2f5843f764
12 changed files with 177 additions and 62 deletions
@@ -38,74 +38,68 @@ inline fun case_3(block: () -> Unit) {
/*
* TESTCASE NUMBER: 4
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
inline fun case_4(block: () -> Unit) {
.0009
return contract {
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
}
/*
* TESTCASE NUMBER: 5
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_5(value_1: Int?) {
println("!")
contract {
<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
}
/*
* TESTCASE NUMBER: 6
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_6(value_1: Int?) {
100 + 10
throw Exception(contract {
throw Exception(<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}.toString())
}
/*
* TESTCASE NUMBER: 7
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_7(value_1: Int?) {
for (i in 0..10) {
println(i)
}
return contract {
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}
}
/*
* TESTCASE NUMBER: 8
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_8(value_1: Int?) {
val f = 10 - 20
val g = contract {
val g = <!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}
}
/*
* TESTCASE NUMBER: 9
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
fun case_9(number: Int?): Boolean {
val value_1 = number != null
contract {
<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(false) implies (value_1)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
return number == null
@@ -7,7 +7,6 @@
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 14
* DESCRIPTION: Contract is first statement in control flow terms, but not in tokens order terms.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26153
* HELPERS: functions
*/
@@ -16,17 +15,17 @@ import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
return contract {
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
}
// TESTCASE NUMBER: 2
fun case_2() = contract { }
fun case_2() = <!CONTRACT_NOT_ALLOWED!>contract<!> { }
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
val value_1 = contract {
val value_1 = <!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
block()
@@ -34,7 +33,7 @@ inline fun case_3(block: () -> Unit) {
// TESTCASE NUMBER: 4
inline fun case_4(block: () -> Unit) {
(contract {
(<!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
})
return block()
@@ -42,7 +41,7 @@ inline fun case_4(block: () -> Unit) {
// TESTCASE NUMBER: 5
inline fun case_5(block: () -> Unit) {
<!REDUNDANT_LABEL_WARNING!>test@<!> contract {
<!REDUNDANT_LABEL_WARNING!>test@<!> <!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}
return block()
@@ -50,14 +49,14 @@ inline fun case_5(block: () -> Unit) {
// TESTCASE NUMBER: 6
inline fun case_6(block: () -> Unit) {
throw Exception(contract {
throw Exception(<!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
}.toString())
}
// TESTCASE NUMBER: 7
inline fun case_7(block: () -> Unit) {
funWithAnyArg(contract {
funWithAnyArg(<!CONTRACT_NOT_ALLOWED!>contract<!> {
callsInPlace(block, InvocationKind.EXACTLY_ONCE)
})
}
@@ -7,7 +7,6 @@
* SECTIONS: contracts, declarations, contractBuilder, common
* NUMBER: 16
* DESCRIPTION: Contract isn't in the first position.
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26191
*/
@@ -16,7 +15,7 @@ import kotlin.contracts.*
// TESTCASE NUMBER: 1
fun case_1(value_1: Int?) {
println("!")
contract {
<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
}
@@ -24,7 +23,7 @@ fun case_1(value_1: Int?) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Int?) {
100 + 10
throw Exception(contract {
throw Exception(<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}.toString())
}
@@ -34,7 +33,7 @@ fun case_3(value_1: Int?) {
for (i in 0..10) {
println(i)
}
return contract {
return <!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}
}
@@ -42,7 +41,7 @@ fun case_3(value_1: Int?) {
// TESTCASE NUMBER: 4
fun case_4(value_1: Int?) {
val f = 10 - 20
val g = contract {
val g = <!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(true) implies (value_1 != null)
}
}
@@ -50,7 +49,7 @@ fun case_4(value_1: Int?) {
// TESTCASE NUMBER: 5
fun case_5(number: Int?): Boolean {
val value_1 = number != null
contract {
<!CONTRACT_NOT_ALLOWED!>contract<!> {
returns(false) implies (value_1)
} <!CAST_NEVER_SUCCEEDS!>as<!> ContractBuilder
return number == null
@@ -48,6 +48,6 @@ fun case_5(): Boolean? {
// TESTCASE NUMBER: 6
fun case_6(value_1: Boolean): Boolean? {
contract { returns(null) implies <!ERROR_IN_CONTRACT_DESCRIPTION, TYPE_MISMATCH!>contract { returns(null) implies (!value_1) }<!> }
contract { returns(null) implies <!ERROR_IN_CONTRACT_DESCRIPTION, TYPE_MISMATCH!><!CONTRACT_NOT_ALLOWED, CONTRACT_NOT_ALLOWED!>contract<!> { returns(null) implies (!value_1) }<!> }
return null
}