More tests for synchronized() {}
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
+15
@@ -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 {
|
fun box(): String {
|
||||||
val obj = "" as java.lang.Object
|
val obj = "" as java.lang.Object
|
||||||
|
|
||||||
|
val e = IllegalArgumentException()
|
||||||
try {
|
try {
|
||||||
synchronized (obj) {
|
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
|
// If monitorexit didn't happen (a finally block failed), this assertion would fail
|
||||||
assertThatThreadDoesNotOwnMonitor(obj)
|
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"
|
||||||
|
}
|
||||||
+25
@@ -954,11 +954,26 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized"), Pattern.compile("^(.+)\\.kt$"), true);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("changeMonitor.kt")
|
||||||
|
public void testChangeMonitor() throws Exception {
|
||||||
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/changeMonitor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("exceptionInMonitorExpression.kt")
|
||||||
|
public void testExceptionInMonitorExpression() throws Exception {
|
||||||
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/exceptionInMonitorExpression.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("finally.kt")
|
@TestMetadata("finally.kt")
|
||||||
public void testFinally() throws Exception {
|
public void testFinally() throws Exception {
|
||||||
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/finally.kt");
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/finally.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("longValue.kt")
|
||||||
|
public void testLongValue() throws Exception {
|
||||||
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/longValue.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("nestedDifferentObjects.kt")
|
@TestMetadata("nestedDifferentObjects.kt")
|
||||||
public void testNestedDifferentObjects() throws Exception {
|
public void testNestedDifferentObjects() throws Exception {
|
||||||
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/nestedDifferentObjects.kt");
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/nestedDifferentObjects.kt");
|
||||||
@@ -969,11 +984,21 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/nestedSameObject.kt");
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/nestedSameObject.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("objectValue.kt")
|
||||||
|
public void testObjectValue() throws Exception {
|
||||||
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/objectValue.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("sync.kt")
|
@TestMetadata("sync.kt")
|
||||||
public void testSync() throws Exception {
|
public void testSync() throws Exception {
|
||||||
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/sync.kt");
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/sync.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("value.kt")
|
||||||
|
public void testValue() throws Exception {
|
||||||
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/value.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("wait.kt")
|
@TestMetadata("wait.kt")
|
||||||
public void testWait() throws Exception {
|
public void testWait() throws Exception {
|
||||||
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/wait.kt");
|
doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/fullJdk/synchronized/wait.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user