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 androidx.test.filters.SmallTest
import com.android.systemui.SysuiTestCase import com.android.systemui.SysuiTestCase
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import java.lang.Thread.UncaughtExceptionHandler
import org.junit.Assert.assertThrows import org.junit.Assert.assertThrows
import org.junit.Before import org.junit.Before
import org.junit.Ignore
import org.junit.Test import org.junit.Test
import org.mockito.Mock import org.mockito.Mock
import org.mockito.Mockito.only
import org.mockito.Mockito.any import org.mockito.Mockito.any
import org.mockito.Mockito.only
import org.mockito.Mockito.verify import org.mockito.Mockito.verify
import org.mockito.Mockito.`when` import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
import java.lang.Thread.UncaughtExceptionHandler
@SmallTest @SmallTest
class UncaughtExceptionPreHandlerTest : SysuiTestCase() { class UncaughtExceptionPreHandlerTest : SysuiTestCase() {
private lateinit var preHandlerManager: UncaughtExceptionPreHandlerManager private lateinit var preHandlerManager: UncaughtExceptionPreHandlerManager
@Mock @Mock private lateinit var mockHandler: UncaughtExceptionHandler
private lateinit var mockHandler: UncaughtExceptionHandler
@Mock @Mock private lateinit var mockHandler2: UncaughtExceptionHandler
private lateinit var mockHandler2: UncaughtExceptionHandler
@Before @Before
fun setUp() { fun setUp() {
MockitoAnnotations.initMocks(this) MockitoAnnotations.initMocks(this)
Thread.setUncaughtExceptionPreHandler(null) Thread.setUncaughtExceptionPreHandler(null)
preHandlerManager = UncaughtExceptionPreHandlerManager() 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)
}
}
}