Front-end test data fixed to have no complex patterns

#KT-2359 In Progress
This commit is contained in:
Andrey Breslav
2012-09-05 13:03:14 +04:00
parent 1b65ba644e
commit a267f65fa1
8 changed files with 55 additions and 144 deletions
+5 -25
View File
@@ -12,18 +12,9 @@ fun foo() : Int {
1 + <!UNRESOLVED_REFERENCE!>a<!> -> 1 1 + <!UNRESOLVED_REFERENCE!>a<!> -> 1
in 1..<!UNRESOLVED_REFERENCE!>a<!> -> 1 in 1..<!UNRESOLVED_REFERENCE!>a<!> -> 1
!in 1..<!UNRESOLVED_REFERENCE!>a<!> -> 1 !in 1..<!UNRESOLVED_REFERENCE!>a<!> -> 1
// Commented for KT-621 .<!!UNRESOLVED_REFERENCE!>a<!!> => 1 else -> 1
// Commented for KT-621 .equals(1).<!!UNRESOLVED_REFERENCE!>a<!!> => 1
// Commented for KT-621 <!UNNECESSARY_SAFE_CALL!!>?.<!!>equals(1) => 1
is * -> 1
} }
// Commented for KT-621
// return when (<!!USELESS_ELVIS!>x<!!>?:null) {
// <!!UNSAFE_CALL!!>.<!!>foo() => 1
// .equals(1) => 1
// ?.equals(1).equals(2) => 1
// }
return 0 return 0
} }
@@ -35,27 +26,16 @@ fun test() {
<!NO_ELSE_IN_WHEN!>when<!> (x) { <!NO_ELSE_IN_WHEN!>when<!> (x) {
<!INCOMPATIBLE_TYPES!>s<!> -> 1 <!INCOMPATIBLE_TYPES!>s<!> -> 1
is <!INCOMPATIBLE_TYPES!>""<!> -> 1 <!INCOMPATIBLE_TYPES!>""<!> -> 1
x -> 1 x -> 1
is 1 -> 1 1 -> 1
is <!TYPE_MISMATCH_IN_TUPLE_PATTERN!>#(1, 1)<!> -> 1
} }
val z = #(1, 1) val z = 1
<!NO_ELSE_IN_WHEN!>when<!> (z) {
is #(*, *) -> 1
is #(*, 1) -> 1
is #(1, 1) -> 1
is #(1, <!INCOMPATIBLE_TYPES!>"1"<!>) -> 1
is <!TYPE_MISMATCH_IN_TUPLE_PATTERN!>#(1, "1", *)<!> -> 1
is boo #(1, <!INCOMPATIBLE_TYPES!>"a"<!>, *) -> 1
is boo <!TYPE_MISMATCH_IN_TUPLE_PATTERN!>#(1, *)<!> -> 1
}
when (z) { when (z) {
<!ELSE_MISPLACED_IN_WHEN!>else<!> -> 1 <!ELSE_MISPLACED_IN_WHEN!>else<!> -> 1
<!UNREACHABLE_CODE!>#(1, 1) -> 2<!> <!UNREACHABLE_CODE!>1 -> 2<!>
} }
when (z) { when (z) {
@@ -9,11 +9,8 @@ fun foo() =
<!TYPE_MISMATCH_IN_CONDITION!>#(1, 2)<!> -> 3 <!TYPE_MISMATCH_IN_CONDITION!>#(1, 2)<!> -> 3
<!EXPECTED_CONDITION!>in 1..10<!> -> 34 <!EXPECTED_CONDITION!>in 1..10<!> -> 34
<!TYPE_MISMATCH_IN_CONDITION!>4<!> -> 38 <!TYPE_MISMATCH_IN_CONDITION!>4<!> -> 38
<!EXPECTED_CONDITION!>is val a in 1..10<!> -> 23
<!EXPECTED_CONDITION!>is Int<!> -> 33 <!EXPECTED_CONDITION!>is Int<!> -> 33
<!EXPECTED_CONDITION!>is <!TYPE_MISMATCH_IN_TUPLE_PATTERN!>#(val a, 3)<!><!> -> 2 else -> 34
<!EXPECTED_CONDITION!>!is <!TYPE_MISMATCH_IN_TUPLE_PATTERN!>#(*, 1100)<!><!> -> 3
<!EXPECTED_CONDITION!>is *<!> -> 34
} }
fun cond1() = false fun cond1() = false
@@ -34,7 +34,7 @@ fun box() : Int {
val d = 2 val d = 2
var z = 0 var z = 0
when(d) { when(d) {
is 5, is 3 -> z++ 5, 3 -> z++
else -> z = -1000 else -> z = -1000
} }
return z return z
@@ -59,13 +59,13 @@ fun testCoercionToUnit() {
val i = 34 val i = 34
val <!UNUSED_VARIABLE!>withWhen<!> : () -> Unit = { val <!UNUSED_VARIABLE!>withWhen<!> : () -> Unit = {
when(i) { when(i) {
is 1 -> { 1 -> {
val d = 34 val d = 34
<!UNUSED_EXPRESSION!>"1"<!> <!UNUSED_EXPRESSION!>"1"<!>
doSmth(d) doSmth(d)
} }
is 2 -> '4' 2 -> '4'
else -> true else -> true
} }
} }
@@ -87,13 +87,13 @@ fun testImplicitCoercion() {
val d = 21 val d = 21
var z = 0 var z = 0
var <!UNUSED_VARIABLE!>i<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when(d) { var <!UNUSED_VARIABLE!>i<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when(d) {
is 3 -> null 3 -> null
is 4 -> { val <!NAME_SHADOWING, UNUSED_VARIABLE!>z<!> = 23 } 4 -> { val <!NAME_SHADOWING, UNUSED_VARIABLE!>z<!> = 23 }
else -> z = 20 else -> z = 20
}<!> }<!>
var <!UNUSED_VARIABLE!>u<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when(d) { var <!UNUSED_VARIABLE!>u<!> = <!IMPLICIT_CAST_TO_UNIT_OR_ANY!>when(d) {
is 3 -> { 3 -> {
z = <!UNUSED_VALUE!>34<!> z = <!UNUSED_VALUE!>34<!>
} }
else -> <!UNUSED_CHANGED_VALUE!>z--<!> else -> <!UNUSED_CHANGED_VALUE!>z--<!>
@@ -5,7 +5,7 @@ fun foo() : Int {
val d = 2 val d = 2
var z = 0 var z = 0
when(d) { when(d) {
is 5, is 3 -> <!UNUSED_CHANGED_VALUE!>z++<!> 5, 3 -> <!UNUSED_CHANGED_VALUE!>z++<!>
<!ELSE_MISPLACED_IN_WHEN!>else<!> -> { z = <!UNUSED_VALUE!>-1000<!> } <!ELSE_MISPLACED_IN_WHEN!>else<!> -> { z = <!UNUSED_VALUE!>-1000<!> }
<!UNREACHABLE_CODE!>return z -> 34<!> <!UNREACHABLE_CODE!>return z -> 34<!>
} }
@@ -15,7 +15,7 @@ fun foo() : Int {
fun fff(): Int { fun fff(): Int {
var d = 3 var d = 3
<!NO_ELSE_IN_WHEN!>when<!>(d) { <!NO_ELSE_IN_WHEN!>when<!>(d) {
is 4 -> 21 4 -> 21
return 2 -> <!UNREACHABLE_CODE!>return 47<!> return 2 -> <!UNREACHABLE_CODE!>return 47<!>
<!UNREACHABLE_CODE!>bar() -> 45<!> <!UNREACHABLE_CODE!>bar() -> 45<!>
<!UNREACHABLE_CODE!>444 -> true<!> <!UNREACHABLE_CODE!>444 -> true<!>
@@ -6,14 +6,14 @@ package kt234_kt973
fun test(t : #(Int, Int)) : Int { fun test(t : #(Int, Int)) : Int {
<!NO_ELSE_IN_WHEN!>when<!> (t) { <!NO_ELSE_IN_WHEN!>when<!> (t) {
is #(10, 10) -> return 1 #(10, 10) -> return 1
} }
return 0 // unreachable code return 0 // unreachable code
} }
fun test1(t : #(Int, Int)) : Int { fun test1(t : #(Int, Int)) : Int {
when (t) { when (t) {
is #(10, 10) -> return 1 #(10, 10) -> return 1
else -> return 2 else -> return 2
} }
<!UNREACHABLE_CODE!>return 0<!> // unreachable code <!UNREACHABLE_CODE!>return 0<!> // unreachable code
@@ -21,25 +21,11 @@ fun test1(t : #(Int, Int)) : Int {
//more tests //more tests
fun t1(x: Int) = when(x) { fun t1(x: Int) = when(x) {
is * -> 1 else -> 1
}
fun t2(x: Int) = when(x) {
is val a -> 1
}
fun t3(x: Int) = when (x) {
is * -> 1
<!UNREACHABLE_CODE!>2 -> 2<!>
}
fun t4(x: Int) = when (x) {
is val a -> 1
<!UNREACHABLE_CODE!>2 -> 2<!>
} }
fun t5(x: Int) = <!NO_ELSE_IN_WHEN!>when<!> (x) { fun t5(x: Int) = <!NO_ELSE_IN_WHEN!>when<!> (x) {
is val a : Int -> 1 is Int -> 1
2 -> 2 2 -> 2
} }
@@ -50,5 +36,5 @@ fun foo3(x: Int) = when(x) {
fun foo4(x: Int) = when(x) { fun foo4(x: Int) = when(x) {
2 -> x 2 -> x
is val a -> a else -> 3
} }
@@ -68,27 +68,23 @@ fun f12(a : A?) {
is A -> a.foo() is A -> a.foo()
is Any -> a.foo(); is Any -> a.foo();
is Any? -> a.<!UNRESOLVED_REFERENCE!>bar<!>() is Any? -> a.<!UNRESOLVED_REFERENCE!>bar<!>()
is val c : <!TYPE_MISMATCH_IN_BINDING_PATTERN!>B<!> -> c.foo() is C -> a.bar()
is val c is C -> c.bar()
is val c is C -> a.bar()
else -> a?.foo() else -> a?.foo()
} }
if (a is val b) { if (a is Any?) {
a?.<!UNRESOLVED_REFERENCE!>bar<!>() a?.<!UNRESOLVED_REFERENCE!>bar<!>()
b?.foo()
} }
if (a is val b is B) { if (a is B) {
b.foo() a.foo()
a.bar() a.bar()
b.bar()
} }
} }
fun f13(a : A?) { fun f13(a : A?) {
if (a is val c is B) { if (a is B) {
c.foo() a.foo()
c.bar() a.bar()
} }
else { else {
a?.foo() a?.foo()
@@ -96,7 +92,7 @@ fun f13(a : A?) {
} }
a?.foo() a?.foo()
if (!(a is val c is B)) { if (!(a is B)) {
a?.foo() a?.foo()
<!UNRESOLVED_REFERENCE!>c<!>.bar() <!UNRESOLVED_REFERENCE!>c<!>.bar()
} }
@@ -106,44 +102,36 @@ fun f13(a : A?) {
} }
a?.foo() a?.foo()
if (a is val c is B && a.foo() == #() && c.bar() == #()) { if (a is B && a.foo() == #()) {
c.foo() a.foo()
c.bar() a.bar()
} }
else { else {
a?.foo() a?.foo()
<!UNRESOLVED_REFERENCE!>c<!>.bar() <!UNRESOLVED_REFERENCE!>c<!>.bar()
} }
if (!(a is val c is B) || !(a is val x is C)) { if (!(a is B) || !(a is C)) {
<!UNRESOLVED_REFERENCE, UNUSED_EXPRESSION!>x<!>
<!UNRESOLVED_REFERENCE, UNUSED_EXPRESSION!>c<!>
} }
else { else {
<!UNRESOLVED_REFERENCE, UNUSED_EXPRESSION!>x<!>
<!UNRESOLVED_REFERENCE, UNUSED_EXPRESSION!>c<!>
} }
if (!(a is val c is B) || !(a is val c is C)) { if (!(a is B) || !(a is C)) {
} }
if (!(a is val c is B)) return if (!(a is B)) return
a.bar() a.bar()
<!UNRESOLVED_REFERENCE!>c<!>.foo()
<!UNRESOLVED_REFERENCE!>c<!>.bar()
} }
fun f14(a : A?) { fun f14(a : A?) {
while (!(a is val c is B)) { while (!(a is B)) {
} }
a.bar() a.bar()
<!UNRESOLVED_REFERENCE!>c<!>.bar()
} }
fun f15(a : A?) { fun f15(a : A?) {
do { do {
} while (!(a is val c is B)) } while (!(a is B))
a.bar() a.bar()
<!UNRESOLVED_REFERENCE!>c<!>.bar()
} }
fun getStringLength(obj : Any) : Char? { fun getStringLength(obj : Any) : Char? {
@@ -213,8 +201,6 @@ fun returnFunctionLiteral(a: Any?): Function0<Int> =
fun illegalTupleReturnType(a: Any): #(Any, String) = #(a, <!TYPE_MISMATCH!>a<!>) fun illegalTupleReturnType(a: Any): #(Any, String) = #(a, <!TYPE_MISMATCH!>a<!>)
fun declarationInsidePattern(x: #(Any, Any)): String = when(x) { is #(val a is String, *) -> a; else -> "something" }
fun mergeAutocasts(a: Any?) { fun mergeAutocasts(a: Any?) {
if (a is String || a is Int) { if (a is String || a is Int) {
a.<!UNRESOLVED_REFERENCE!>compareTo<!>("") a.<!UNRESOLVED_REFERENCE!>compareTo<!>("")
+5 -25
View File
@@ -12,17 +12,9 @@ fun foo() : Int {
1 + <error>a</error> -> 1 1 + <error>a</error> -> 1
in 1..<error>a</error> -> 1 in 1..<error>a</error> -> 1
!in 1..<error>a</error> -> 1 !in 1..<error>a</error> -> 1
// Commented for KT-621 .<!error>a</!error> -> 1 else -> 1
// Commented for KT-621 .equals(1).<!error>a</!error> -> 1
// Commented for KT-621 <!warning>?.</!warning>equals(1) -> 1
is * -> 1
} }
// Commented for KT-621
// return when (<!warning>x</!warning>?:null) {
// <!error>.</!error>foo() -> 1
// ?.equals(1).equals(2) -> 1
// }
return 0 return 0
} }
@@ -34,29 +26,17 @@ fun test() {
when (x) { when (x) {
<error>s</error> -> 1 <error>s</error> -> 1
is <error>""</error> -> 1 <error>""</error> -> 1
x -> 1 x -> 1
is 1 -> 1 1 -> 1
is <error>#(1, 1)</error> -> 1
else -> 1 else -> 1
} }
val z = #(1, 1) val z = 1
when (z) {
is #(*, *) -> 1
is #(*, 1) -> 1
is #(1, 1) -> 1
is #(1, <error>"1"</error>) -> 1
is <error>#(1, "1", *)</error> -> 1
is boo #(1, <error>"a"</error>, *) -> 1
is boo <error>#(1, *)</error> -> 1
else -> 1
}
when (z) { when (z) {
<error>else</error> -> 1 <error>else</error> -> 1
<error>#(1, 1) -> 2</error> <error>1 -> 2</error>
} }
when (z) { when (z) {
+15 -33
View File
@@ -66,27 +66,22 @@ fun f12(a : A?) {
is A -> <info descr="Automatically cast to A">a</info>.foo() is A -> <info descr="Automatically cast to A">a</info>.foo()
is Any -> <info descr="Automatically cast to A">a</info>.foo(); is Any -> <info descr="Automatically cast to A">a</info>.foo();
is Any? -> a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>() is Any? -> a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>()
is val c : <error descr="[TYPE_MISMATCH_IN_BINDING_PATTERN] B is not a supertype of A?. Use 'is' to match against B">B</error> -> c.foo() is C -> <info descr="Automatically cast to C">a</info>.bar()
is val c is C -> <info descr="Automatically cast to C">c</info>.bar()
is val c is C -> <info descr="Automatically cast to C">a</info>.bar()
else -> a<info>?.</info>foo() else -> a<info>?.</info>foo()
} }
if (a is val b) { if (a is Any?) {
a<info>?.</info><error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>() a<info>?.</info><error descr="[UNRESOLVED_REFERENCE] Unresolved reference: bar">bar</error>()
b<info>?.</info>foo()
} }
if (a is val b is B) { if (a is B) {
<info descr="Automatically cast to B">b</info>.foo()
<info descr="Automatically cast to B">a</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
<info descr="Automatically cast to B">b</info>.bar()
} }
} }
fun f13(a : A?) { fun f13(a : A?) {
if (a is val c is B) { if (a is B) {
<info descr="Automatically cast to B">c</info>.foo() <info descr="Automatically cast to B">a</info>.foo()
<info descr="Automatically cast to B">c</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
} }
else { else {
a<info>?.</info>foo() a<info>?.</info>foo()
@@ -94,54 +89,43 @@ fun f13(a : A?) {
} }
a<info>?.</info>foo() a<info>?.</info>foo()
if (!(a is val c is B)) { if (!(a is B)) {
a<info>?.</info>foo() a<info>?.</info>foo()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
else { else {
<info descr="Automatically cast to B">a</info>.foo() <info descr="Automatically cast to B">a</info>.foo()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
a<info>?.</info>foo() a<info>?.</info>foo()
if (a is val c is B && <info descr="Automatically cast to B">a</info>.foo() == #() && <info descr="Automatically cast to B">c</info>.bar() == #()) { if (a is B && <info descr="Automatically cast to B">a</info>.foo() == #()) {
<info descr="Automatically cast to B">c</info>.foo() <info descr="Automatically cast to B">a</info>.foo()
<info descr="Automatically cast to B">c</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
} }
else { else {
a<info>?.</info>foo() a<info>?.</info>foo()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
if (!(a is val c is B) || !(a is val x is C)) { if (!(a is B) || !(a is C)) {
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: x">x</error>
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>
} }
else { else {
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: x">x</error>
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>
} }
if (!(a is val c is B) || !(a is val c is C)) { if (!(a is B) || !(a is C)) {
} }
if (!(a is val c is B)) return if (!(a is B)) return
<info descr="Automatically cast to B">a</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.foo()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
fun f14(a : A?) { fun f14(a : A?) {
while (!(a is val c is B)) { while (!(a is B)) {
} }
<info descr="Automatically cast to B">a</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
fun f15(a : A?) { fun f15(a : A?) {
do { do {
} while (!(a is val c is B)) } while (!(a is B))
<info descr="Automatically cast to B">a</info>.bar() <info descr="Automatically cast to B">a</info>.bar()
<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: c">c</error>.bar()
} }
fun getStringLength(obj : Any) : Char? { fun getStringLength(obj : Any) : Char? {
@@ -213,8 +197,6 @@ fun returnFunctionLiteral(<info>a</info>: Any?): Function0<Int> =
fun illegalTupleReturnType(a: Any): #(Any, String) = #(a, <error descr="[TYPE_MISMATCH] Type mismatch: inferred type is jet.Any but jet.String was expected">a</error>) fun illegalTupleReturnType(a: Any): #(Any, String) = #(a, <error descr="[TYPE_MISMATCH] Type mismatch: inferred type is jet.Any but jet.String was expected">a</error>)
fun declarationInsidePattern(x: #(Any, Any)): String = when(x) { is #(val a is String, *) -> <info descr="Automatically cast to jet.String">a</info>; else -> "something" }
fun mergeAutocasts(a: Any?) { fun mergeAutocasts(a: Any?) {
if (a is String || a is Int) { if (a is String || a is Int) {
a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: compareTo">compareTo</error>("") a.<error descr="[UNRESOLVED_REFERENCE] Unresolved reference: compareTo">compareTo</error>("")