Fix handling of Throwable in tryTest/catch
Throwable could be used as a type argument to catch(), but it would possibly never be caught, because the method only catches Exception. Notably, junit assertions fail with AssertionError, which is not a subclass of Exception. Due to that, tests or utilities like DeviceConfigRule that have failing assertions in catch() would not run the subsequent cleanup steps. Bug: 210377950 Test: atest CleanupTest Change-Id: I54e2922cb466f077ba4d219f8c3c6f885316296c
This commit is contained in:
@@ -174,6 +174,25 @@ class CleanupTest {
|
|||||||
assertTrue(thrown.suppressedExceptions.isEmpty())
|
assertTrue(thrown.suppressedExceptions.isEmpty())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun testAssertionErrorInCatch() {
|
||||||
|
var x = 1
|
||||||
|
val thrown = assertFailsWith<AssertionError> {
|
||||||
|
tryTest {
|
||||||
|
x = 2
|
||||||
|
throw TestException1()
|
||||||
|
}.catch<TestException1> {
|
||||||
|
x = 3
|
||||||
|
fail("Test failure in catch")
|
||||||
|
} cleanup {
|
||||||
|
assertTrue(x == 3)
|
||||||
|
x = 4
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(x == 4)
|
||||||
|
assertTrue(thrown.suppressedExceptions.isEmpty())
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun testMultipleCleanups() {
|
fun testMultipleCleanups() {
|
||||||
var x = 1
|
var x = 1
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ inline class TryExpr<T>(val result: Result<T>) {
|
|||||||
if (originalException !is E) return this
|
if (originalException !is E) return this
|
||||||
return TryExpr(try {
|
return TryExpr(try {
|
||||||
Result.success(block(originalException))
|
Result.success(block(originalException))
|
||||||
} catch (e: Exception) {
|
} catch (e: Throwable) {
|
||||||
Result.failure(e)
|
Result.failure(e)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user