Disable registerHandler_toleratesHandlersThatThrow

Bug: 253232275
Test: N/A
Change-Id: I97be896366bcc619d83190c702a671743dcd05ca
This commit is contained in:
Justin Weir
2022-10-12 11:31:21 -04:00
parent ed10f73b9d
commit aae9726073

View File

@@ -3,72 +3,72 @@ package com.android.systemui.shared.system
import androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase
import com.google.common.truth.Truth.assertThat
import java.lang.Thread.UncaughtExceptionHandler
import org.junit.Assert.assertThrows
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito.only
import org.mockito.Mockito.any
import org.mockito.Mockito.only
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.lang.Thread.UncaughtExceptionHandler
@SmallTest
class UncaughtExceptionPreHandlerTest : SysuiTestCase() {
private lateinit var preHandlerManager: UncaughtExceptionPreHandlerManager
private lateinit var preHandlerManager: UncaughtExceptionPreHandlerManager
@Mock
private lateinit var mockHandler: UncaughtExceptionHandler
@Mock private lateinit var mockHandler: UncaughtExceptionHandler
@Mock
private lateinit var mockHandler2: UncaughtExceptionHandler
@Mock private lateinit var mockHandler2: UncaughtExceptionHandler
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
Thread.setUncaughtExceptionPreHandler(null)
preHandlerManager = UncaughtExceptionPreHandlerManager()
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
Thread.setUncaughtExceptionPreHandler(null)
preHandlerManager = UncaughtExceptionPreHandlerManager()
}
@Test
fun registerHandler_registersOnceOnly() {
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
fun registerHandler_setsUncaughtExceptionPreHandler() {
Thread.setUncaughtExceptionPreHandler(null)
preHandlerManager.registerHandler(mockHandler)
assertThat(Thread.getUncaughtExceptionPreHandler()).isNotNull()
}
@Test
fun registerHandler_preservesOriginalHandler() {
Thread.setUncaughtExceptionPreHandler(mockHandler)
preHandlerManager.registerHandler(mockHandler2)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
@Ignore
fun registerHandler_toleratesHandlersThatThrow() {
`when`(mockHandler2.uncaughtException(any(), any())).thenThrow(RuntimeException())
preHandlerManager.registerHandler(mockHandler2)
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler2, only()).uncaughtException(any(), any())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
fun registerHandler_doesNotSetUpTwice() {
UncaughtExceptionPreHandlerManager().registerHandler(mockHandler2)
assertThrows(IllegalStateException::class.java) {
preHandlerManager.registerHandler(mockHandler)
}
@Test
fun registerHandler_registersOnceOnly() {
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
fun registerHandler_setsUncaughtExceptionPreHandler() {
Thread.setUncaughtExceptionPreHandler(null)
preHandlerManager.registerHandler(mockHandler)
assertThat(Thread.getUncaughtExceptionPreHandler()).isNotNull()
}
@Test
fun registerHandler_preservesOriginalHandler() {
Thread.setUncaughtExceptionPreHandler(mockHandler)
preHandlerManager.registerHandler(mockHandler2)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
fun registerHandler_toleratesHandlersThatThrow() {
`when`(mockHandler2.uncaughtException(any(), any())).thenThrow(RuntimeException())
preHandlerManager.registerHandler(mockHandler2)
preHandlerManager.registerHandler(mockHandler)
preHandlerManager.handleUncaughtException(Thread.currentThread(), Exception())
verify(mockHandler2, only()).uncaughtException(any(), any())
verify(mockHandler, only()).uncaughtException(any(), any())
}
@Test
fun registerHandler_doesNotSetUpTwice() {
UncaughtExceptionPreHandlerManager().registerHandler(mockHandler2)
assertThrows(IllegalStateException::class.java) {
preHandlerManager.registerHandler(mockHandler)
}
}
}
}
}