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())
|
||||
}
|
||||
|
||||
@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
|
||||
fun testMultipleCleanups() {
|
||||
var x = 1
|
||||
|
||||
@@ -90,7 +90,7 @@ inline class TryExpr<T>(val result: Result<T>) {
|
||||
if (originalException !is E) return this
|
||||
return TryExpr(try {
|
||||
Result.success(block(originalException))
|
||||
} catch (e: Exception) {
|
||||
} catch (e: Throwable) {
|
||||
Result.failure(e)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user