Alphabetical sort wrapped intersection types for rendered diagnostics

This commit is contained in:
victor.petukhov
2018-12-28 15:34:42 +03:00
parent acd6d354dc
commit ec8a6cbe9c
118 changed files with 1387 additions and 937 deletions
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,46 +7,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1
* DESCRIPTION: Checking for not exhaustive 'when' when not covered by all possible subtypes or 'when' does not have bound value.
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
fun case_1(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1, is _SealedChild2 -> ""
fun case_2(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1, is SealedChild2 -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> ""
fun case_3(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
SealedMixedChildObject1 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1, is _SealedMixedChild2, is _SealedMixedChild1 -> ""
fun case_4(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
SealedMixedChildObject1, is SealedMixedChild2, is SealedMixedChild1 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_5(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassMixed): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
fun case_6(value_1: SealedClassMixed): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassSingleWithObject): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
fun case_7(value_1: SealedClassSingleWithObject): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
fun case_8(value_1: SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
// TESTCASE NUMBER: 9
fun case_9(value_1: Number): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
@@ -68,15 +68,15 @@ fun case_10(value_1: Any): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
}
// TESTCASE NUMBER: 11
fun case_11(value_1: _SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> {
value_1 is _SealedChild1 -> ""
value_1 is _SealedChild2 -> ""
value_1 is _SealedChild3 -> ""
fun case_11(value_1: SealedClass): String = <!NO_ELSE_IN_WHEN!>when<!> {
value_1 is SealedChild1 -> ""
value_1 is SealedChild2 -> ""
value_1 is SealedChild3 -> ""
}
// TESTCASE NUMBER: 12
fun case_12(value_1: _SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_12(value_1: SealedClassMixed): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,43 +7,44 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1
* DESCRIPTION: Checking for not exhaustive when when not covered by all enumerated values.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
fun case_1(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, _EnumClass.SOUTH, _EnumClass.NORTH -> ""
fun case_2(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST, EnumClass.SOUTH, EnumClass.NORTH -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
fun case_3(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
fun case_4(value_1: EnumClass): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
// TESTCASE NUMBER: 5
fun case_5(value_1: _EnumClassSingle): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
fun case_5(value_1: EnumClassSingle): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) { }
/*
* TESTCASE NUMBER: 6
* DISCUSSION: maybe use const propagation here?
* ISSUES: KT-25265
*/
fun case_6(value_1: _EnumClass): String {
val west = _EnumClass.WEST
fun case_6(value_1: EnumClass): String {
val west = EnumClass.WEST
return <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
west -> ""
}
}
@@ -54,4 +54,4 @@ fun case_6(value_1: _EnumClass): String {
* DISCUSSION
* ISSUES: KT-26044
*/
fun case_7(value_1: _EnumClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
fun case_7(value_1: EnumClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) { }
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable sealed classes (and several checks for not sealed).
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_1(value_1: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
_SealedMixedChildObject1 -> ""
fun case_2(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
SealedMixedChildObject1 -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null, is _SealedMixedChild1, is _SealedMixedChild2, _SealedMixedChildObject1 -> ""
fun case_3(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null, is SealedMixedChild1, is SealedMixedChild2, SealedMixedChildObject1 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_4(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
fun case_5(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassMixed?): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
fun case_6(value_1: SealedClassMixed?): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2-> ""
is _SealedMixedChild3 -> ""
fun case_7(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2-> ""
is SealedMixedChild3 -> ""
null -> ""
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_SealedMixedChildObject1 -> ""
fun case_8(value_1: SealedClassMixed?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
SealedMixedChildObject1 -> ""
}
/*
@@ -77,4 +77,4 @@ fun case_9(value_1: Any?): String = <!NO_ELSE_IN_WHEN!>when<!> (value_1) {
* DISCUSSION
* ISSUES: KT-26044
*/
fun case_10(value: _SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {}
fun case_10(value: SealedClassEmpty): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,38 +7,39 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3
* DESCRIPTION: Checking for not exhaustive 'when' on the nullable enums.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
EnumClass.WEST -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST -> ""
_EnumClass.SOUTH -> ""
_EnumClass.NORTH -> ""
fun case_2(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST -> ""
EnumClass.SOUTH -> ""
EnumClass.NORTH -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClass.EAST, null, _EnumClass.SOUTH, _EnumClass.NORTH -> ""
fun case_3(value_1: EnumClass?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClass.EAST, null, EnumClass.SOUTH, EnumClass.NORTH -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClassSingle): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
fun case_4(value_1: EnumClassSingle): Int = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {}
// TESTCASE NUMBER: 5
fun case_5(value_1: _EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_5(value_1: EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
EnumClassSingle.EVERYTHING -> ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
fun case_6(value_1: EnumClassSingle?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null -> ""
}
@@ -1,5 +1,3 @@
// !WITH_ENUM_CLASSES
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,23 +6,24 @@
* PLACE: when-expression -> paragraph 11 -> sentence 1
* NUMBER: 3
* DESCRIPTION: Check when exhaustive via else entry (when with bound value, redundant else).
* HELPERS: enumClasses, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_2(value_1: EnumClass?): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
@@ -45,31 +44,31 @@ fun case_4(value_1: Boolean?): String = when (value_1) {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClass): String = when (value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_5(value_1: SealedClass): String = when (value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClass?): String = when (value_1) {
is _SealedChild1 -> ""
is _SealedChild2 -> ""
is _SealedChild3 -> ""
fun case_6(value_1: SealedClass?): String = when (value_1) {
is SealedChild1 -> ""
is SealedChild2 -> ""
is SealedChild3 -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassSingle): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassSingle<!> -> ""
fun case_7(value_1: SealedClassSingle): String = when (value_1) {
<!USELESS_IS_CHECK!>is SealedClassSingle<!> -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassSingle?): String = when (value_1) {
is _SealedClassSingle -> ""
fun case_8(value_1: SealedClassSingle?): String = when (value_1) {
is SealedClassSingle -> ""
null -> ""
<!REDUNDANT_ELSE_IN_WHEN!>else<!> -> ""
}
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,59 +7,60 @@
* PLACE: when-expression -> paragraph 11 -> sentence 6
* NUMBER: 1
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered.
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is _SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is _SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
fun case_1(value_1: SealedClass): Int = when (value_1) {
is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass): String = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClass<!> -> ""
fun case_2(value_1: SealedClass): String = when (value_1) {
<!USELESS_IS_CHECK!>is SealedClass<!> -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
fun case_3(value_1: SealedClassWithMethods): String = when (value_1) {
is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects): String = when (value_1) {
_SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> ""
fun case_4(value_1: SealedClassWithObjects): String = when (value_1) {
SealedWithObjectsChild1 -> ""
SealedWithObjectsChild2 -> ""
SealedWithObjectsChild3 -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_5(value_1: SealedClassMixed): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
}
/*
* TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/
fun case_6(value_1: _SealedClassMixed): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> ""
fun case_6(value_1: SealedClassMixed): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
is SealedMixedChildObject1 -> ""
is SealedMixedChildObject2 -> ""
is SealedMixedChildObject3 -> ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassEmpty): String = when (value_1) {
fun case_7(value_1: SealedClassEmpty): String = when (value_1) {
else -> ""
}
@@ -69,8 +69,8 @@ fun case_7(value_1: _SealedClassEmpty): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-22996
*/
fun case_8(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3?, <!USELESS_IS_CHECK!>is _SealedChild3?<!> -> ""
fun case_8(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is SealedChild1, !is SealedChild3?, <!USELESS_IS_CHECK!>is SealedChild3?<!> -> ""
}
/*
@@ -78,7 +78,7 @@ fun case_8(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
* UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-22996
*/
fun case_9(value: _SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is _SealedChild1, !is _SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3?<!> -> ""
fun case_9(value: SealedClass?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is SealedChild3?<!> -> ""
}
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,17 +6,18 @@
* PLACE: when-expression -> paragraph 11 -> sentence 7
* NUMBER: 1
* DESCRIPTION: Check when exhaustive when all enumerated values are checked.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(dir: _EnumClass): String = when (dir) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(dir: EnumClass): String = when (dir) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_2(value_1: EnumClassSingle): String = when (value_1) {
EnumClassSingle.EVERYTHING -> ""
}
@@ -1,4 +1,3 @@
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,20 +6,21 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 2
* DESCRIPTION: Check when exhaustive when enumerated values are checked and contains a null check.
* HELPERS: enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass?): String = when (value_1) {
_EnumClass.EAST -> ""
_EnumClass.NORTH -> ""
_EnumClass.SOUTH -> ""
_EnumClass.WEST -> ""
fun case_1(value_1: EnumClass?): String = when (value_1) {
EnumClass.EAST -> ""
EnumClass.NORTH -> ""
EnumClass.SOUTH -> ""
EnumClass.WEST -> ""
null -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClassSingle?): String = when (value_1) {
_EnumClassSingle.EVERYTHING -> ""
fun case_2(value_1: EnumClassSingle?): String = when (value_1) {
EnumClassSingle.EVERYTHING -> ""
null -> ""
}
@@ -29,6 +29,6 @@ fun case_2(value_1: _EnumClassSingle?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26044
*/
fun case_3(value_1: _EnumClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
fun case_3(value_1: EnumClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!>(value_1) {
null -> ""
}
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,46 +6,47 @@
* PLACE: when-expression -> paragraph 11 -> sentence 8
* NUMBER: 3
* DESCRIPTION: Check when exhaustive when possible subtypes of the sealed class are covered and contains a null check.
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass?): Int = when (value_1) {
is _SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is _SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is _SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
fun case_1(value_1: SealedClass?): Int = when (value_1) {
is SealedChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.number
is SealedChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.e1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.e2
is SealedChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1 + <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2
null -> 0
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String = when (value_1) {
is _SealedClass -> ""
fun case_2(value_1: SealedClass?): String = when (value_1) {
is SealedClass -> ""
null -> ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClassWithMethods?): String = when (value_1) {
is _SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is _SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is _SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
fun case_3(value_1: SealedClassWithMethods?): String = when (value_1) {
is SealedWithMethodsChild1 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m1()
is SealedWithMethodsChild2 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m2()
is SealedWithMethodsChild3 -> <!DEBUG_INFO_SMARTCAST!>value_1<!>.m3()
null -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClassWithObjects?): String = when (value_1) {
_SealedWithObjectsChild1 -> ""
_SealedWithObjectsChild2 -> ""
_SealedWithObjectsChild3 -> ""
fun case_4(value_1: SealedClassWithObjects?): String = when (value_1) {
SealedWithObjectsChild1 -> ""
SealedWithObjectsChild2 -> ""
SealedWithObjectsChild3 -> ""
null -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
_SealedMixedChildObject1 -> ""
_SealedMixedChildObject2 -> ""
_SealedMixedChildObject3 -> ""
fun case_5(value_1: SealedClassMixed?): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
SealedMixedChildObject1 -> ""
SealedMixedChildObject2 -> ""
SealedMixedChildObject3 -> ""
null -> ""
}
@@ -54,13 +54,13 @@ fun case_5(value_1: _SealedClassMixed?): String = when (value_1) {
* TESTCASE NUMBER: 6
* DISCUSSION: is it correct that objects can be checked using the type checking operator?
*/
fun case_6(value_1: _SealedClassMixed?): String = when (value_1) {
is _SealedMixedChild1 -> ""
is _SealedMixedChild2 -> ""
is _SealedMixedChild3 -> ""
is _SealedMixedChildObject1 -> ""
is _SealedMixedChildObject2 -> ""
is _SealedMixedChildObject3 -> ""
fun case_6(value_1: SealedClassMixed?): String = when (value_1) {
is SealedMixedChild1 -> ""
is SealedMixedChild2 -> ""
is SealedMixedChild3 -> ""
is SealedMixedChildObject1 -> ""
is SealedMixedChildObject2 -> ""
is SealedMixedChildObject3 -> ""
null -> ""
}
@@ -69,6 +69,6 @@ fun case_6(value_1: _SealedClassMixed?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR: must be exhaustive
* ISSUES: KT-26044
*/
fun case_7(value: _SealedClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
fun case_7(value: SealedClassEmpty?): String = <!NO_ELSE_IN_WHEN!>when<!> (value) {
null -> ""
}
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1
* DESCRIPTION: 'When' without bound value and with not boolean condition in 'when condition'.
* HELPERS: typesProvider
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: String, value_3: _BasicTypesProvider): String {
fun case_1(value_1: Int, value_2: String, value_3: TypesProvider): String {
when {
<!TYPE_MISMATCH!>.012f / value_1<!> -> return ""
<!TYPE_MISMATCH!>"$value_2..."<!> -> return ""
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,14 +6,15 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 2
* DESCRIPTION: 'When' without bound value and not allowed comma in when entry.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _BasicTypesProvider) {
fun case_1(value_1: TypesProvider) {
when {
getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> value_1.getBoolean() -> return
value_1.getBoolean() && getBoolean()<!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> getLong() == 1000L -> return
<!TYPE_MISMATCH!>value_1.getList()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>getLong()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>{}<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>Any()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> throw Exception() -> return
<!TYPE_MISMATCH!>Out<Int>()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>getLong()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>{}<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> <!TYPE_MISMATCH!>Any()<!><!COMMA_IN_WHEN_CONDITION_WITHOUT_ARGUMENT!>,<!> throw Exception() -> return
}
<!UNREACHABLE_CODE!>return<!>
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -DEBUG_INFO_SMARTCAST
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' without bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: Byte, value_3: _BasicTypesProvider) {
fun case_2(value_1: Int, value_2: Byte, value_3: TypesProvider) {
when {
value_1 == 1 -> -.09 % 10L
value_1 == 3 -> value_2 / -5
value_1 == 2 -> value_3.getChar(99) - 11 + 90
value_1 == 2 -> value_3.getChar() - 11 + 90
}
}
@@ -39,8 +37,8 @@ fun case_3(value_1: Int, value_2: Boolean, value_3: Long) {
value_1 == 1 -> value_2
value_1 == 2 -> !value_2
value_1 == 3 -> getBoolean() && value_2
value_1 == 5 -> getChar(10) != 'a'
value_1 == 6 -> getList() === getAny()
value_1 == 5 -> getChar() != 'a'
value_1 == 6 -> Out<Int>() === getAny()
value_1 == 7 -> value_3 <= 11
}
}
@@ -145,8 +143,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when {
value_1 == 1 -> value_2 as MutableList<Int>
value_1 == 2 -> value_2 as? MutableList<Int>
value_1 == 1 -> value_2 as List<Int>
value_1 == 2 -> value_2 as? List<Int>
value_1 == 3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>
value_1 == 4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int>
}
@@ -185,11 +183,11 @@ fun case_15(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// TESTCASE NUMBER: 16
fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
fun case_16(value_1: Int, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } }
when {
value_1 == 1 -> _funWithoutArgs()
value_1 == 1 -> funWithoutArgs()
value_1 == 2 -> __fun_1()()
value_1 == 3 -> value_2.fun_2(value_4)
value_1 == 4 -> value_3?.fun_2(value_4)
@@ -198,7 +196,7 @@ fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
}
// TESTCASE NUMBER: 17
fun case_17(value_1: Int, value_2: _Class, value_3: _Class?) {
fun case_17(value_1: Int, value_2: Class, value_3: Class?) {
when {
value_1 == 1 -> value_2.prop_1
value_1 == 2 -> value_3?.prop_1
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_SEALED_CLASSES
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 3 -> sentence 2
* NUMBER: 1
* DESCRIPTION: 'When' without bound value and different variants of the boolean conditions (logical, equality, comparison, type checking operator, containment operator).
* HELPERS: typesProvider, enumClasses, sealedClasses, classes
*/
// TESTCASE NUMBER: 1
@@ -16,8 +14,8 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
return when {
value_1 -> 1
getBoolean() && value_1 -> 2
getChar(10) != 'a' -> 3
getList() === getAny() -> 4
getChar() != 'a' -> 3
Out<Int>() === getAny() -> 4
value_2 <= 11 -> 5
!value_1 -> 6
else -> 7
@@ -28,12 +26,12 @@ fun case_1(value_1: Boolean, value_2: Long): Int {
* TESTCASE NUMBER: 2
* NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value.
*/
fun case_2(value_1: _EnumClass) {
fun case_2(value_1: EnumClass) {
when {
value_1 == _EnumClass.NORTH -> {}
value_1 == _EnumClass.SOUTH -> {}
value_1 == _EnumClass.WEST -> {}
value_1 == _EnumClass.EAST -> {}
value_1 == EnumClass.NORTH -> {}
value_1 == EnumClass.SOUTH -> {}
value_1 == EnumClass.WEST -> {}
value_1 == EnumClass.EAST -> {}
}
}
@@ -105,11 +103,11 @@ fun case_7(value_1: Any) {
* TESTCASE NUMBER: 8
* NOTE: for a potential analysys of exhaustiveness by enums in whens without a bound value.
*/
fun case_8(value_1: _SealedClass) {
fun case_8(value_1: SealedClass) {
when {
value_1 is _SealedChild1 -> {}
value_1 is _SealedChild2 -> {}
value_1 is _SealedChild3 -> {}
value_1 is SealedChild1 -> {}
value_1 is SealedChild2 -> {}
value_1 is SealedChild3 -> {}
}
}
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,10 +8,11 @@
* DESCRIPTION: 'When' without bound value and with Nothing in condition (subtype of Boolean).
* DISCUSSION
* ISSUES: KT-25948
* HELPERS: typesProvider
*/
// TESTCASE NUMBER: 1
fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_1(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when {
return -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>return == return -> return<!>
@@ -23,7 +23,7 @@ fun case_1(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 2
fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_2(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
when {
throw Exception() -> <!UNREACHABLE_CODE!>return<!>
<!UNREACHABLE_CODE!>(throw Exception()) == (throw Exception()) -> return<!>
@@ -34,7 +34,7 @@ fun case_2(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 3
fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
fun case_3(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider) {
loop1@ while (true) {
loop2@ while (true) {
loop3@ while (true) {
@@ -49,7 +49,7 @@ fun case_3(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider) {
}
// TESTCASE NUMBER: 4
fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String {
fun case_4(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider): String {
loop1@ while (true) {
loop2@ while (true) {
loop3@ while (true) {
@@ -64,7 +64,7 @@ fun case_4(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider): String {
}
// TESTCASE NUMBER: 6
fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: _BasicTypesProvider): String {
fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: TypesProvider): String {
when {
value_1 -> <!UNREACHABLE_CODE!>return ""<!>
<!UNREACHABLE_CODE!>value_2.getNothing() -> return ""<!>
@@ -76,7 +76,7 @@ fun case_6(value_1: Nothing, <!UNUSED_PARAMETER!>value_2<!>: _BasicTypesProvider
}
// TESTCASE NUMBER: 5
fun case_5(<!UNUSED_PARAMETER!>value_1<!>: _BasicTypesProvider, <!UNUSED_PARAMETER!>value_2<!>: Nothing) {
fun case_5(<!UNUSED_PARAMETER!>value_1<!>: TypesProvider, <!UNUSED_PARAMETER!>value_2<!>: Nothing) {
loop1@ while (true) {
loop2@ while (true) {
loop3@ while (true) {
@@ -1,7 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -10,6 +7,7 @@
* PLACE: when-expression -> paragraph 6 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and with different variants of expressions in the control structure body.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -25,11 +23,11 @@ fun case_1(value_1: Int) {
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: Byte, value_3: _BasicTypesProvider) {
fun case_2(value_1: Int, value_2: Byte, value_3: TypesProvider) {
when (value_1) {
1 -> -.09 % 10L
3 -> value_2 / -5
2 -> value_3.getChar(99) - 11 + 90
2 -> value_3.getChar() - 11 + 90
4 -> 100
}
}
@@ -40,7 +38,7 @@ fun case_3(value_1: Int, value_2: Boolean, value_3: Long) {
1 -> value_2
2 -> !value_2
3 -> getBoolean() && value_2
5 -> getChar(10) != 'a'
5 -> getChar() != 'a'
6 -> getList() === getAny()
7 -> value_3 <= 11
}
@@ -148,8 +146,8 @@ fun case_11(value_1: Int) {
// TESTCASE NUMBER: 12
fun case_12(value_1: Int, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) {
1 -> value_2 as MutableList<Int>
2 -> value_2 as? MutableList<Int>
1 -> value_2 as List<Int>
2 -> value_2 as? List<Int>
3 -> value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>
4 -> (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int>
}
@@ -188,11 +186,11 @@ fun case_15(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// TESTCASE NUMBER: 16
fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
fun case_16(value_1: Int, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } }
when (value_1) {
1 -> _funWithoutArgs()
1 -> funWithoutArgs()
2 -> __fun_1()()
3 -> value_2.fun_2(value_4)
4 -> value_3?.fun_2(value_4)
@@ -201,7 +199,7 @@ fun case_16(value_1: Int, value_2: _Class, value_3: _Class?, value_4: Int) {
}
// TESTCASE NUMBER: 17
fun case_17(value_1: Int, value_2: _Class, value_3: _Class?) {
fun case_17(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) {
1 -> value_2.prop_1
2 -> value_3?.prop_1
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,12 +6,13 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition (without companion object in classes), but without type checking operator.
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Any): String {
when (value_1) {
<!NO_COMPANION_OBJECT!>_EmptyClass<!> -> return ""
<!NO_COMPANION_OBJECT!>EmptyClass<!> -> return ""
}
return ""
@@ -1,4 +1,3 @@
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition on the non-type operand of the type checking operator.
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
@@ -1,4 +1,3 @@
// !WITH_BASIC_TYPES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -7,10 +6,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and 'when condition' with range expression, but without containment checking operator.
* HELPERS: typesProvider
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: _BasicTypesProvider): String {
fun case_1(value_1: Int, value_2: TypesProvider): String {
when (value_1) {
<!INCOMPATIBLE_TYPES!>-1000L..100<!> -> return ""
<!INCOMPATIBLE_TYPES!>value_2.getInt()..getLong()<!> -> return ""
@@ -1,5 +1,4 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,10 +7,11 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and 'when condition' with contains operator and type without defined contains operator.
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int, value_2: _EmptyClass, value_3: Int, value_4: Any): String {
fun case_1(value_1: Int, value_2: EmptyClass, value_3: Int, value_4: Any): String {
when (value_1) {
<!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_2 -> return ""
<!TYPE_MISMATCH_IN_RANGE, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>in<!> value_3 -> return ""
@@ -1,5 +1,3 @@
// !WITH_CLASSES
// !WITH_OBJECTS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and type test condition.
* HELPERS: classes, objects
*/
// TESTCASE NUMBER: 1
@@ -61,8 +60,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
// TESTCASE NUMBER: 6
fun case_6(value_1: Any): String {
when (value_1) {
is _EmptyObject -> return ""
is _ClassWithCompanionObject.Companion -> return ""
is EmptyObject -> return ""
is ClassWithCompanionObject.Companion -> return ""
}
return ""
@@ -1,6 +1,3 @@
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
// !WITH_OBJECTS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,13 +6,14 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and type test condition (invert type checking operator).
* HELPERS: classes, sealedClasses, objects
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass) = when (value_1) {
!is _SealedChild1 -> {}
!is _SealedChild2 -> {}
!is _SealedChild3 -> {}
fun case_1(value_1: SealedClass) = when (value_1) {
!is SealedChild1 -> {}
!is SealedChild2 -> {}
!is SealedChild3 -> {}
}
/*
@@ -23,16 +21,16 @@ fun case_1(value_1: _SealedClass) = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_2(value_1: _SealedClass?): String = when (value_1) {
!is _SealedChild2 -> "" // including null
<!USELESS_IS_CHECK!>is _SealedChild2<!> -> ""
fun case_2(value_1: SealedClass?): String = when (value_1) {
!is SealedChild2 -> "" // including null
<!USELESS_IS_CHECK!>is SealedChild2<!> -> ""
null -> "" // redundant
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass?): String = when (value_1) {
!is _SealedChild2? -> "" // null isn't included
is _SealedChild2 -> ""
fun case_3(value_1: SealedClass?): String = when (value_1) {
!is SealedChild2? -> "" // null isn't included
is SealedChild2 -> ""
null -> ""
}
@@ -41,18 +39,18 @@ fun case_3(value_1: _SealedClass?): String = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-22996
*/
fun case_4(value_1: _SealedClass?) {
fun case_4(value_1: SealedClass?) {
when (value_1) {
!is _SealedChild2 -> {} // including null
<!USELESS_IS_CHECK!>is _SealedChild2?<!> -> {} // redundant nullable type check
!is SealedChild2 -> {} // including null
<!USELESS_IS_CHECK!>is SealedChild2?<!> -> {} // redundant nullable type check
}
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any): String {
when (value_1) {
is _EmptyObject -> return ""
!is _ClassWithCompanionObject.Companion -> return ""
is EmptyObject -> return ""
!is ClassWithCompanionObject.Companion -> return ""
}
return ""
@@ -1,6 +1,3 @@
// !WITH_CLASSES
// !WITH_SEALED_CLASSES
// !WITH_OBJECTS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions.
* HELPERS: classes, sealedClasses, objects
*/
// TESTCASE NUMBER: 1
@@ -21,8 +19,8 @@ fun case_1(value_1: Any) = when (value_1) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Any?) = when (value_1) {
is Float, is Char, is _SealedClass? -> "" // if value is null then this branch will be executed
is Double, is Boolean, is _ClassWithCompanionObject.Companion -> ""
is Float, is Char, is SealedClass? -> "" // if value is null then this branch will be executed
is Double, is Boolean, is ClassWithCompanionObject.Companion -> ""
else -> ""
}
@@ -33,7 +31,7 @@ fun case_2(value_1: Any?) = when (value_1) {
*/
fun case_3(value_1: Any?) = when (value_1) {
is Float, is Char, is Int? -> "" // if value is null then this branch will be executed
is _SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
is SealedChild2, is Boolean?, is String -> "" // redundant nullable type check
else -> ""
}
@@ -44,7 +42,7 @@ fun case_3(value_1: Any?) = when (value_1) {
*/
fun case_4(value_1: Any?) = when (value_1) {
is Float, is Char?, is Int? -> "" // double nullable type check in the one branch
is _SealedChild1, is Boolean, is String -> ""
is SealedChild1, is Boolean, is String -> ""
else -> ""
}
@@ -56,7 +54,7 @@ fun case_4(value_1: Any?) = when (value_1) {
fun case_5(value_1: Any?): String {
when (value_1) {
is Float, is Char?, is Int -> return ""
is Double, is _EmptyObject, is String -> return ""
is Double, is EmptyObject, is String -> return ""
null -> return "" // null-check redundant
else -> return ""
}
@@ -70,7 +68,7 @@ fun case_5(value_1: Any?): String {
fun case_6(value_1: Any?): String {
when (value_1) {
is Float, is Char?, null, is Int -> return "" // double nullable type check in the one branch
is Double, is _EmptyObject, is String -> return ""
is Double, is EmptyObject, is String -> return ""
else -> return ""
}
}
@@ -1,4 +1,3 @@
// !WITH_SEALED_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -7,32 +6,33 @@
* PLACE: when-expression -> paragraph 7 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' with bound value and enumaration of type test conditions (with invert type checking operator).
* HELPERS: sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String = when (value_1) {
is _SealedChild1, !is _SealedChild3 -> ""
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> ""
fun case_1(value_1: SealedClass): String = when (value_1) {
is SealedChild1, !is SealedChild3 -> ""
<!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass) = when (value_1) {
!is _SealedChild1, !is _SealedChild2, !is _SealedChild3 -> {}
fun case_2(value_1: SealedClass) = when (value_1) {
!is SealedChild1, !is SealedChild2, !is SealedChild3 -> {}
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String = when (value_1) {
is _SealedChild2, !is _SealedChild2 -> ""
fun case_3(value_1: SealedClass): String = when (value_1) {
is SealedChild2, !is SealedChild2 -> ""
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass): String = when (value_1) {
!is _SealedChild1, <!USELESS_IS_CHECK!>is _SealedChild1<!> -> ""
fun case_4(value_1: SealedClass): String = when (value_1) {
!is SealedChild1, <!USELESS_IS_CHECK!>is SealedChild1<!> -> ""
}
// TESTCASE NUMBER: 5
fun case_5(value_1: Any?): String = when (value_1) {
is _SealedChild3, !is _SealedChild3? -> ""
is SealedChild3, !is SealedChild3? -> ""
else -> ""
}
@@ -42,8 +42,8 @@ fun case_5(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996
*/
fun case_6(value_1: Any?): String = when (value_1) {
is Boolean?, !is _SealedChild3 -> "" // double nullable type check in the one branch
<!USELESS_IS_CHECK!>is _SealedChild3<!> -> ""
is Boolean?, !is SealedChild3 -> "" // double nullable type check in the one branch
<!USELESS_IS_CHECK!>is SealedChild3<!> -> ""
else -> ""
}
@@ -53,6 +53,6 @@ fun case_6(value_1: Any?): String = when (value_1) {
* ISSUES: KT-22996
*/
fun case_7(value_1: Any?): String = when (value_1) {
is Number?, null, !is _SealedChild3 -> "" // triple nullable type check in the one branch
is Number?, null, !is SealedChild3 -> "" // triple nullable type check in the one branch
else -> ""
}
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 1
* DESCRIPTION: 'When' with bound value and containment operator.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
@@ -23,9 +22,9 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: _Class) = when (value_1) {
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: Class) = when (value_1) {
in value_2[0] -> ""
!in listOf(0, 1, 2, 3, 4) -> ""
!in value_3.getIntArray(90) -> ""
!in value_3.getIntArray() -> ""
else -> ""
}
@@ -1,5 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 3
* NUMBER: 2
* DESCRIPTION: 'When' with bound value and enumeration of the containment operators.
* HELPERS: typesProvider, classes
*/
// TESTCASE NUMBER: 1
@@ -21,7 +20,7 @@ fun case_1(value_1: Int, value_2: Int, value_3: Short): String {
}
// TESTCASE NUMBER: 2
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: _Class) = when (value_1) {
!in value_2[0], !in listOf(0, 1, 2, 3, 4), !in value_3.getIntArray(90) -> ""
fun case_2(value_1: Int, value_2: List<IntArray>, value_3: Class) = when (value_1) {
!in value_2[0], !in listOf(0, 1, 2, 3, 4), !in value_3.getIntArray() -> ""
else -> ""
}
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_FUNCTIONS
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 1
* DESCRIPTION: 'When' with enumeration of the different variants of expressions in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -28,7 +26,7 @@ fun case_2(value_1: Number, value_2: Int) {
when (value_1) {
-.09 % 10L -> {}
value_2 / -5 -> {}
getByte(99) - 11 + 90 -> {}
getByte() - 11 + 90 -> {}
}
}
@@ -38,7 +36,7 @@ fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) {
value_2 -> {}
!value_2 -> {}
getBoolean() && value_2 -> {}
getChar(10) != 'a' -> {}
getChar() != 'a' -> {}
getList() === getAny() -> {}
value_3 <= 11 -> {}
}
@@ -113,8 +111,8 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) {
value_2 as MutableList<Int> -> {}
value_2 <!USELESS_CAST!>as? MutableList<Int><!> -> {}
value_2 as List<Int> -> {}
value_2 <!USELESS_CAST!>as? List<Int><!> -> {}
value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!> -> {}
(value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {}
}
@@ -153,11 +151,11 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// TESTCASE NUMBER: 14
fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) {
fun case_14(value_1: Any, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Any { return fun() { } }
when (value_1) {
_funWithoutArgs() -> {}
funWithoutArgs() -> {}
__fun_1()() -> {}
value_2.fun_2(value_4) -> {}
value_3?.fun_2(value_4) -> {}
@@ -166,7 +164,7 @@ fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) {
}
// TESTCASE NUMBER: 15
fun case_15(value_1: Int, value_2: _Class, value_3: _Class?) {
fun case_15(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) {
value_2.prop_1 -> {}
value_3?.prop_2 -> {}
@@ -1,6 +1,3 @@
// !WITH_BASIC_TYPES
// !WITH_CLASSES
// !WITH_FUNCTIONS
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,6 +6,7 @@
* PLACE: when-expression -> paragraph 7 -> sentence 5
* NUMBER: 2
* DESCRIPTION: 'When' with different variants of the arithmetic expressions (additive expression and multiplicative expression) in 'when condition'.
* HELPERS: typesProvider, classes, functions
*/
// TESTCASE NUMBER: 1
@@ -22,14 +20,14 @@ fun case_1(value_1: Any?) {
// TESTCASE NUMBER: 2
fun case_2(value_1: Number, value_2: Int) {
when (value_1) {
-.09 % 10L, value_2 / -5, getByte(99) - 11 + 90 -> {}
-.09 % 10L, value_2 / -5, getByte() - 11 + 90 -> {}
}
}
// TESTCASE NUMBER: 3
fun case_3(value_1: Boolean, value_2: Boolean, value_3: Long) {
when (value_1) {
value_2, !value_2, getBoolean() && value_2, getChar(10) != 'a' -> {}
value_2, !value_2, getBoolean() && value_2, getChar() != 'a' -> {}
getList() === getAny(), value_3 <= 11 -> {}
}
}
@@ -90,7 +88,7 @@ fun case_9(value_1: Any) {
// TESTCASE NUMBER: 10
fun case_10(value_1: Collection<Int>, value_2: Collection<Int>, value_3: Collection<Int>?) {
when (value_1) {
value_2 as MutableList<Int>, value_2 <!USELESS_CAST!>as? MutableList<Int><!> -> {}
value_2 as List<Int>, value_2 <!USELESS_CAST!>as? List<Int><!> -> {}
value_3 <!UNCHECKED_CAST!>as? MutableMap<Int, Int><!>, (value_2 <!UNCHECKED_CAST!>as? Map<Int, Int><!>) as MutableMap<Int, Int> -> {}
}
}
@@ -123,17 +121,17 @@ fun case_13(value_1: Int, value_2: List<Int>, value_3: List<List<List<List<Int>>
}
// TESTCASE NUMBER: 14
fun case_14(value_1: Any, value_2: _Class, value_3: _Class?, value_4: Int) {
fun case_14(value_1: Any, value_2: Class, value_3: Class?, value_4: Int) {
fun __fun_1(): () -> Unit { return fun() { } }
when (value_1) {
_funWithoutArgs(), __fun_1()(), value_2.fun_2(value_4) -> {}
funWithoutArgs(), __fun_1()(), value_2.fun_2(value_4) -> {}
value_3?.fun_2(value_4), value_3!!.fun_2(value_4) -> {}
}
}
// TESTCASE NUMBER: 15
fun case_15(value_1: Int, value_2: _Class, value_3: _Class?) {
fun case_15(value_1: Int, value_2: Class, value_3: Class?) {
when (value_1) {
value_2.prop_1, value_3?.prop_2 -> {}
value_2::prop_1.get(), value_3!!::prop_3.get() -> {}
@@ -256,7 +254,7 @@ fun case_25(value_1: Boolean) = when (value_1) {
* UNEXPECTED BEHAVIOUR
* ISSUES: KT-26045
*/
fun case_26(value_1: Int?, value_2: _Class, value_3: _Class?) {
fun case_26(value_1: Int?, value_2: Class, value_3: Class?) {
when (value_1) {
value_2.prop_1, <!DUPLICATE_LABEL_IN_WHEN!>value_3?.prop_1<!> -> {}
10 -> {}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,24 +7,25 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int): String {
val whenValue = when {
value_1 == 0 -> _ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4()
else -> _ClassLevel5()
value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -33,19 +33,19 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Int): String {
val whenValue = when (value_1) {
0 -> _ClassLevel2()
1 -> _ClassLevel3()
2 -> _ClassLevel4()
else -> _ClassLevel5()
0 -> ClassLevel2()
1 -> ClassLevel3()
2 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_ENUM_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,58 +7,59 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String {
fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String {
fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
null -> _ClassLevel6()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
null -> ClassLevel6()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel6>() }
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel6>() }
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel6>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String {
fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -74,12 +73,12 @@ fun case_3(value_1: _EnumClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String {
fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -8,20 +7,21 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
true -> ClassLevel2()
false -> ClassLevel3()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -29,16 +29,16 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
null -> _ClassLevel4()
true -> ClassLevel2()
false -> ClassLevel3()
null -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (NEGATIVE)
@@ -9,51 +7,52 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String {
fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String {
fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
null -> _ClassLevel5()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String {
fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -65,11 +64,11 @@ fun case_3(value_1: _SealedClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String {
fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -84,48 +83,48 @@ fun case_4(value_1: _SealedClass?): String {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String {
fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String {
fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
null -> _ClassLevel5()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String {
fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><Int>() }
@@ -137,11 +136,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String {
fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -156,19 +155,19 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
}
// TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects?): String {
fun case_9(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
is _SealedClassWithObjects -> _ClassLevel2()
else -> _ClassLevel3()
is SealedClassWithObjects -> ClassLevel2()
else -> ClassLevel3()
}
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><_ClassLevel1>() }
checkSubtype<_ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<_ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel5>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel4>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel3>() }
whenValue checkType { <!TYPE_MISMATCH!>_<!><ClassLevel1>() }
checkSubtype<ClassLevel5>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel4>(<!TYPE_MISMATCH!>whenValue<!>)
checkSubtype<ClassLevel3>(<!TYPE_MISMATCH!>whenValue<!>)
return ""
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,19 +7,20 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 1
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via else branch).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Int): String {
val whenValue = when {
value_1 == 0 -> _ClassLevel2()
value_1 > 0 && value_1 <= 10 -> _ClassLevel3()
value_1 > 10 && value_1 <= 100 -> _ClassLevel4()
else -> _ClassLevel5()
value_1 == 0 -> ClassLevel2()
value_1 > 0 && value_1 <= 10 -> ClassLevel3()
value_1 > 10 && value_1 <= 100 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -28,14 +28,14 @@ fun case_1(value_1: Int): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Int): String {
val whenValue = when (value_1) {
0 -> _ClassLevel2()
1 -> _ClassLevel3()
2 -> _ClassLevel4()
else -> _ClassLevel5()
0 -> ClassLevel2()
1 -> ClassLevel3()
2 -> ClassLevel4()
else -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
// !WITH_ENUM_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,46 +7,47 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 2
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via enum).
* HELPERS: classes, enumClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _EnumClass): String {
fun case_1(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _EnumClass?): String {
fun case_2(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> _ClassLevel2()
_EnumClass.NORTH -> _ClassLevel3()
_EnumClass.SOUTH -> _ClassLevel4()
_EnumClass.WEST -> _ClassLevel5()
null -> _ClassLevel6()
EnumClass.EAST -> ClassLevel2()
EnumClass.NORTH -> ClassLevel3()
EnumClass.SOUTH -> ClassLevel4()
EnumClass.WEST -> ClassLevel5()
null -> ClassLevel6()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _EnumClass): String {
fun case_3(value_1: EnumClass): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -58,12 +57,12 @@ fun case_3(value_1: _EnumClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _EnumClass?): String {
fun case_4(value_1: EnumClass?): String {
val whenValue = when (value_1) {
_EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
_EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
EnumClass.EAST -> <!IMPLICIT_CAST_TO_ANY!>10<!>
EnumClass.NORTH -> <!IMPLICIT_CAST_TO_ANY!>""<!>
EnumClass.SOUTH -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
EnumClass.WEST -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> <!IMPLICIT_CAST_TO_ANY!>false<!>
}
@@ -1,5 +1,4 @@
// !CHECK_TYPE
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -8,17 +7,18 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 3
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via boolean bound value).
* HELPERS: classes
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: Boolean): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
true -> ClassLevel2()
false -> ClassLevel3()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -26,13 +26,13 @@ fun case_1(value_1: Boolean): String {
// TESTCASE NUMBER: 2
fun case_2(value_1: Boolean?): String {
val whenValue = when (value_1) {
true -> _ClassLevel2()
false -> _ClassLevel3()
null -> _ClassLevel4()
true -> ClassLevel2()
false -> ClassLevel3()
null -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
@@ -1,6 +1,4 @@
// !CHECK_TYPE
// !WITH_SEALED_CLASSES
// !WITH_CLASSES
/*
* KOTLIN DIAGNOSTICS SPEC TEST (POSITIVE)
@@ -9,43 +7,44 @@
* PLACE: when-expression -> paragraph 9 -> sentence 1
* NUMBER: 4
* DESCRIPTION: 'When' least upper bound of the types check (when exhaustive via sealed class).
* HELPERS: classes, sealedClasses
*/
// TESTCASE NUMBER: 1
fun case_1(value_1: _SealedClass): String {
fun case_1(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 2
fun case_2(value_1: _SealedClass?): String {
fun case_2(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> _ClassLevel2()
is _SealedChild2 -> _ClassLevel3()
is _SealedChild3 -> _ClassLevel4()
null -> _ClassLevel5()
is SealedChild1 -> ClassLevel2()
is SealedChild2 -> ClassLevel3()
is SealedChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 3
fun case_3(value_1: _SealedClass): String {
fun case_3(value_1: SealedClass): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -55,11 +54,11 @@ fun case_3(value_1: _SealedClass): String {
}
// TESTCASE NUMBER: 4
fun case_4(value_1: _SealedClass?): String {
fun case_4(value_1: SealedClass?): String {
val whenValue = when (value_1) {
is _SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is _SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is _SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
is SealedChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
is SealedChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
is SealedChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -70,40 +69,40 @@ fun case_4(value_1: _SealedClass?): String {
}
// TESTCASE NUMBER: 5
fun case_5(value_1: _SealedClassWithObjects): String {
fun case_5(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 6
fun case_6(value_1: _SealedClassWithObjects?): String {
fun case_6(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> _ClassLevel2()
_SealedWithObjectsChild2 -> _ClassLevel3()
_SealedWithObjectsChild3 -> _ClassLevel4()
null -> _ClassLevel5()
SealedWithObjectsChild1 -> ClassLevel2()
SealedWithObjectsChild2 -> ClassLevel3()
SealedWithObjectsChild3 -> ClassLevel4()
null -> ClassLevel5()
}
whenValue checkType { _<_ClassLevel2>() }
checkSubtype<_ClassLevel1>(whenValue)
whenValue checkType { _<ClassLevel2>() }
checkSubtype<ClassLevel1>(whenValue)
return ""
}
// TESTCASE NUMBER: 7
fun case_7(value_1: _SealedClassWithObjects): String {
fun case_7(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
}
whenValue checkType { _<Any>() }
@@ -113,11 +112,11 @@ fun case_7(value_1: _SealedClassWithObjects): String {
}
// TESTCASE NUMBER: 8
fun case_8(value_1: _SealedClassWithObjects?): String {
fun case_8(value_1: SealedClassWithObjects?): String {
val whenValue = when (value_1) {
_SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
_SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
_SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
SealedWithObjectsChild1 -> <!IMPLICIT_CAST_TO_ANY!>10<!>
SealedWithObjectsChild2 -> <!IMPLICIT_CAST_TO_ANY!>""<!>
SealedWithObjectsChild3 -> <!IMPLICIT_CAST_TO_ANY!>object<!> {}
null -> {<!IMPLICIT_CAST_TO_ANY!>{}<!>}
}
@@ -128,9 +127,9 @@ fun case_8(value_1: _SealedClassWithObjects?): String {
}
// TESTCASE NUMBER: 9
fun case_9(value_1: _SealedClassWithObjects): String {
fun case_9(value_1: SealedClassWithObjects): String {
val whenValue = when (value_1) {
<!USELESS_IS_CHECK!>is _SealedClassWithObjects<!> -> 10
<!USELESS_IS_CHECK!>is SealedClassWithObjects<!> -> 10
}
whenValue checkType { _<Int>() }