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:
@@ -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")
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fun main(args : Array<String>) {
|
||||
val x = try {
|
||||
5
|
||||
} catch (e: Throwable) {
|
||||
6
|
||||
}
|
||||
|
||||
println(x)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fun main(args : Array<String>) {
|
||||
val x = try {
|
||||
throw Error()
|
||||
5
|
||||
} catch (e: Throwable) {
|
||||
6
|
||||
}
|
||||
|
||||
println(x)
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fun main(args : Array<String>) {
|
||||
val x = try {
|
||||
throw Error()
|
||||
} catch (e: Throwable) {
|
||||
6
|
||||
}
|
||||
|
||||
println(x)
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
fun main(args : Array<String>) {
|
||||
val x = try {
|
||||
println("Try")
|
||||
5
|
||||
} catch (e: Throwable) {
|
||||
throw e
|
||||
}
|
||||
|
||||
println(x)
|
||||
}
|
||||
Reference in New Issue
Block a user