[Spec tests] Add tests for if-expression
This commit is contained in:
+24
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"1": {
|
||||
"neg": {
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 2,
|
||||
"description": "* HELPERS:",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"pos": {
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 3,
|
||||
"description": "* HELPERS: checkType",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-213
|
||||
* PLACE: control--and-data-flow-analysis, control-flow-graph, expressions-1, conditional-expressions -> paragraph 1 -> sentence 1
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: check if-expressions must have both branches.
|
||||
* HELPERS:
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
fun case1() {
|
||||
val b = true
|
||||
val a = <!INVALID_IF_AS_EXPRESSION!>if<!> (b) {
|
||||
"true"
|
||||
}
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
|
||||
fun case2() {
|
||||
val b = true
|
||||
val a = <!INVALID_IF_AS_EXPRESSION!>if<!> (b) "true"
|
||||
}
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-213
|
||||
* PLACE: control--and-data-flow-analysis, control-flow-graph, expressions-1, conditional-expressions -> paragraph 1 -> sentence 2
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: check any if-statement in kotlin may be trivially turned into such an expression by replacing the missing branch with a kotlin.Unit object expression.
|
||||
* HELPERS: checkType
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
fun case1() {
|
||||
val b = true
|
||||
if (!b) {
|
||||
println("this is statement")
|
||||
}
|
||||
val statement = <!INVALID_IF_AS_EXPRESSION!>if<!> (!b) { println("statement could not be assigned") }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
|
||||
fun case2() {
|
||||
val a = 1
|
||||
val b = 2
|
||||
if (a > b) a else ; //statement
|
||||
val expression: Any = <!INVALID_IF_AS_EXPRESSION!>if<!> (a > b) a else ;
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-213
|
||||
* PLACE: control--and-data-flow-analysis, control-flow-graph, expressions-1, conditional-expressions -> paragraph 1 -> sentence 1
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: check if-expressions must have both branches.
|
||||
* HELPERS: checkType
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
fun case1() {
|
||||
val b = true
|
||||
val a = if (b) {
|
||||
"true"
|
||||
} else {
|
||||
"false"
|
||||
}
|
||||
a checkType { check<String>() }
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>a<!>
|
||||
}
|
||||
// TESTCASE NUMBER: 2
|
||||
|
||||
fun case2() {
|
||||
val b = true
|
||||
val a = if (b) "true" else "false"
|
||||
a checkType { check<String>() }
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>a<!>
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 3
|
||||
|
||||
fun case3() {
|
||||
val b = true
|
||||
//subcase 1 (ELSE BRANCH)
|
||||
val case_3_1 = if (!b) {
|
||||
"true"
|
||||
} else boo()
|
||||
case_3_1 checkType { check<Any>() }
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>case_3_1<!>
|
||||
|
||||
case_3_1 as kotlin.Unit
|
||||
case_3_1 checkType { check<Unit>() }
|
||||
|
||||
//subcase 2 (IF TRUE BRANCH)
|
||||
val case_3_2 = if (b) {
|
||||
"true"
|
||||
} else boo()
|
||||
case_3_2 checkType { check<Any>() }
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>case_3_2<!>
|
||||
case_3_2 as kotlin.String
|
||||
case_3_2 checkType { check<String>() }
|
||||
}
|
||||
|
||||
fun boo(): Any {
|
||||
return kotlin.Unit
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
// !LANGUAGE: +NewInference
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -UNUSED_VALUE -UNUSED_PARAMETER -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST
|
||||
// SKIP_TXT
|
||||
|
||||
/*
|
||||
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
|
||||
*
|
||||
* SPEC VERSION: 0.1-213
|
||||
* PLACE: control--and-data-flow-analysis, control-flow-graph, expressions-1, conditional-expressions -> paragraph 1 -> sentence 2
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: check any if-statement in kotlin may be trivially turned into such an expression by replacing the missing branch with a kotlin.Unit object expression.
|
||||
* HELPERS: checkType, functions
|
||||
*/
|
||||
|
||||
// TESTCASE NUMBER: 1
|
||||
|
||||
fun case1() {
|
||||
val b = true
|
||||
|
||||
if (!b) { 123 } //statement
|
||||
|
||||
val expression: Any = if (!b) { } else kotlin.Unit
|
||||
|
||||
expression checkType { check<Any>() }
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>expression<!>
|
||||
|
||||
expression as kotlin.Unit
|
||||
expression checkType { check<Unit>() }
|
||||
}
|
||||
|
||||
// TESTCASE NUMBER: 2
|
||||
|
||||
fun case2() {
|
||||
val a = 1
|
||||
val b = 2
|
||||
if (a > b) { a } //statement
|
||||
val expression: Any = if (a > b) { a } else { }
|
||||
|
||||
expression checkType { check<Any>() }
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Any")!>expression<!>
|
||||
expression as kotlin.Unit
|
||||
expression checkType { check<Unit>() }
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"1": {
|
||||
"neg": {
|
||||
"2": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 2,
|
||||
"description": "* HELPERS: checkType",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 2,
|
||||
"description": "* HELPERS:",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"pos": {
|
||||
"2": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 2,
|
||||
"description": "* HELPERS: checkType, functions",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
],
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-213",
|
||||
"casesNumber": 3,
|
||||
"description": "* HELPERS: checkType, functions",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "Exhaustive with nullability check before",
|
||||
"path": "compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckBefore.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "Exhaustive with nullability check else",
|
||||
"path": "compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckElse.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"neg": {
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "When type disjunctions",
|
||||
"path": "compiler/testData/diagnostics/tests/when/WhenTypeDisjunctions.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "Exhaustive break continue",
|
||||
"path": "compiler/testData/diagnostics/tests/when/ExhaustiveBreakContinue.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"pos": {
|
||||
"1": [
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "Exhaustive return throw",
|
||||
"path": "compiler/testData/diagnostics/tests/when/ExhaustiveReturnThrow.kt",
|
||||
"unexpectedBehaviour": false
|
||||
},
|
||||
{
|
||||
"specVersion": "0.1-152",
|
||||
"casesNumber": 0,
|
||||
"description": "Exhaustive return",
|
||||
"path": "compiler/testData/diagnostics/tests/when/ExhaustiveReturn.kt",
|
||||
"unexpectedBehaviour": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
* SPEC VERSION: 0.1-213
|
||||
* PLACE: expressions, prefix-expressions, prefix-increment-expression -> paragraph 4 -> sentence 1
|
||||
* RELEVANT PLACES: statements, assignments -> paragraph 3 -> sentence 2
|
||||
* NUMBER:1
|
||||
* NUMBER: 1
|
||||
* DESCRIPTION: check unsafe prefix increment expression call for an assignable expression
|
||||
*/
|
||||
class A() {
|
||||
|
||||
Reference in New Issue
Block a user