More tests for synchronized() {}

This commit is contained in:
Andrey Breslav
2014-07-03 18:39:57 +04:00
parent 90690e0711
commit 6422bafb7a
7 changed files with 96 additions and 2 deletions
@@ -0,0 +1,22 @@
fun box(): String {
var obj0 = "0" as java.lang.Object
var obj1 = "1" as java.lang.Object
var v = obj0
synchronized (v) {
v = obj1
}
assertThatThreadDoesNotOwnMonitor(obj0)
return "OK"
}
fun assertThatThreadDoesNotOwnMonitor(obj: java.lang.Object) {
try {
obj.wait(1)
throw IllegalStateException("Not owning a monitor!")
}
catch (e: IllegalMonitorStateException) {
// OK
}
}
@@ -0,0 +1,15 @@
fun box(): String {
val obj = "" as java.lang.Object
val e = IllegalArgumentException()
fun m() = throw e
try {
synchronized (m()) {
throw AssertionError("Should not have reached this point")
}
}
catch (caught: Throwable) {
if (!(caught identityEquals e)) return "Fail: $caught"
}
return "OK"
}
@@ -1,12 +1,14 @@
fun box(): String {
val obj = "" as java.lang.Object
val e = IllegalArgumentException()
try {
synchronized (obj) {
throw Throwable()
throw e
}
}
catch (e: Throwable) {
catch (caught: Throwable) {
if (!(caught identityEquals e)) return "Fail: $caught"
// If monitorexit didn't happen (a finally block failed), this assertion would fail
assertThatThreadDoesNotOwnMonitor(obj)
}
@@ -0,0 +1,10 @@
fun box(): String {
var obj = "0" as java.lang.Object
val result = synchronized (obj) {
239L
}
if (result != 239L) return "Fail: $result"
return "OK"
}
@@ -0,0 +1,10 @@
fun box(): String {
var obj = "0" as java.lang.Object
val result = synchronized (obj) {
"239"
}
if (result != "239") return "Fail: $result"
return "OK"
}
@@ -0,0 +1,10 @@
fun box(): String {
var obj = "0" as java.lang.Object
val result = synchronized (obj) {
239
}
if (result != 239) return "Fail: $result"
return "OK"
}