backend: add tests for try-catch-finally and throwing exceptions

also add some tests for bugs with unreachable code handling and variables
This commit is contained in:
Svyatoslav Scherbina
2016-11-28 18:19:06 +07:00
parent 70fa3ba56a
commit e2dbeae85e
24 changed files with 462 additions and 0 deletions
@@ -0,0 +1,8 @@
fun main(args: Array<String>) {
println(foo())
}
fun foo(): Int {
return 1
println("After return")
}
@@ -0,0 +1,9 @@
var b = true
fun main(args: Array<String>) {
var x = 1
if (b) {
var x = 2
}
println(x)
}
@@ -0,0 +1,11 @@
fun main(args : Array<String>) {
try {
println("Before")
throw Error("Error happens")
println("After")
} catch (e: Throwable) {
println("Caught Throwable")
}
println("Done")
}
@@ -0,0 +1,15 @@
fun main(args : Array<String>) {
try {
println("Before")
throw Error("Error happens")
println("After")
} catch (e: Exception) {
println("Caught Exception")
} catch (e: Error) {
println("Caught Error")
} catch (e: Throwable) {
println("Caught Throwable")
}
println("Done")
}
@@ -0,0 +1,25 @@
fun main(args : Array<String>) {
try {
try {
println("Before")
foo()
println("After")
} catch (e: Exception) {
println("Caught Exception")
}
println("After nested try")
} catch (e: Error) {
println("Caught Error")
} catch (e: Throwable) {
println("Caught Throwable")
}
println("Done")
}
fun foo() {
throw Error("Error happens")
println("After in foo()")
}
@@ -0,0 +1,22 @@
fun main(args : Array<String>) {
try {
println("Before")
foo()
println("After")
} catch (e: Exception) {
println("Caught Exception")
} catch (e: Error) {
println("Caught Error")
}
println("Done")
}
fun foo() {
try {
throw Error("Error happens")
} catch (e: Exception) {
println("Caught Exception")
}
}
@@ -0,0 +1,10 @@
fun main(args : Array<String>) {
try {
throw Error("Error happens")
} catch (e: Throwable) {
val message = e.message
if (message != null) {
println(message)
}
}
}
@@ -0,0 +1,10 @@
fun main(args : Array<String>) {
try {
println("Try")
} finally {
println("Finally")
}
println("Done")
}
@@ -0,0 +1,14 @@
fun main(args : Array<String>) {
try {
println("Try")
throw Error("Error happens")
println("After throw")
} catch (e: Error) {
println("Caught Error")
} finally {
println("Finally")
}
println("Done")
}
@@ -0,0 +1,19 @@
fun main(args : Array<String>) {
try {
try {
println("Try")
throw Error("Error happens")
println("After throw")
} finally {
println("Finally")
}
println("After nested try")
} catch (e: Error) {
println("Caught Error")
}
println("Done")
}
@@ -0,0 +1,25 @@
fun main(args : Array<String>) {
try {
try {
println("Try")
throw Error("Error happens")
println("After throw")
} catch (e: Error) {
println("Catch")
throw Exception()
println("After throw")
} finally {
println("Finally")
}
println("After nested try")
} catch (e: Error) {
println("Caught Error")
} catch (e: Exception) {
println("Caught Exception")
}
println("Done")
}
@@ -0,0 +1,15 @@
fun main(args : Array<String>) {
println(foo())
}
fun foo(): Int {
try {
println("Done")
return 0
} finally {
println("Finally")
}
println("After")
return 1
}
@@ -0,0 +1,16 @@
fun main(args : Array<String>) {
println(foo())
}
fun foo(): Int {
try {
println("Done")
return 0
} finally {
println("Finally")
return 1
}
println("After")
return 2
}
@@ -0,0 +1,16 @@
fun main(args : Array<String>) {
println(foo())
}
fun foo(): Int {
try {
println("Done")
throw Error()
} finally {
println("Finally")
return 1
}
println("After")
return 2
}
@@ -0,0 +1,18 @@
fun main(args : Array<String>) {
println(foo())
}
fun foo(): Int {
try {
try {
return 42
} finally {
println("Finally 1")
}
} finally {
println("Finally 2")
}
println("After")
return 2
}
@@ -0,0 +1,21 @@
fun main(args : Array<String>) {
do {
try {
break
} finally {
println("Finally 1")
}
} while (false)
var stop = false
while (!stop) {
try {
stop = true
continue
} finally {
println("Finally 2")
}
}
println("After")
}
+9
View File
@@ -0,0 +1,9 @@
fun main(args : Array<String>) {
val x = try {
5
} catch (e: Throwable) {
6
}
println(x)
}
+10
View File
@@ -0,0 +1,10 @@
fun main(args : Array<String>) {
val x = try {
throw Error()
5
} catch (e: Throwable) {
6
}
println(x)
}
+9
View File
@@ -0,0 +1,9 @@
fun main(args : Array<String>) {
val x = try {
throw Error()
} catch (e: Throwable) {
6
}
println(x)
}
+10
View File
@@ -0,0 +1,10 @@
fun main(args : Array<String>) {
val x = try {
println("Try")
5
} catch (e: Throwable) {
throw e
}
println(x)
}