@@ -4,6 +4,7 @@ import com.google.common.truth.Truth.assertThat
44import com.nhaarman.mockitokotlin2.any
55import com.nhaarman.mockitokotlin2.mock
66import com.nhaarman.mockitokotlin2.verify
7+ import com.nhaarman.mockitokotlin2.verifyZeroInteractions
78import com.nhaarman.mockitokotlin2.whenever
89import okhttp3.OkHttpClient
910import okhttp3.Response
@@ -12,13 +13,14 @@ import org.junit.Before
1213import org.junit.Test
1314import org.mockito.Mock
1415import org.mockito.MockitoAnnotations
16+ import java.io.EOFException
17+ import java.net.SocketException
1518import java.net.URL
1619
1720class WebSocketTransportTest {
1821
1922 @Mock lateinit var mockClient: OkHttpClient
2023 @Mock lateinit var mockWebSocket: WebSocket
21- @Mock lateinit var mockChannel: Channel
2224 @Mock lateinit var mockResponse: Response
2325
2426 lateinit var transport: WebSocketTransport
@@ -72,6 +74,8 @@ class WebSocketTransportTest {
7274 @Test
7375 fun `onFailure sets ready state to CLOSED and invokes onError callback` () {
7476 val mockClosure = mock< (Throwable , Response ? ) -> Unit > ()
77+ val mockOnClose = mock< (Int ) -> Unit > ()
78+ transport.onClose = mockOnClose
7579 transport.onError = mockClosure
7680
7781 transport.readyState = Transport .ReadyState .CONNECTING
@@ -80,6 +84,33 @@ class WebSocketTransportTest {
8084 transport.onFailure(mockWebSocket, throwable, mockResponse)
8185 assertThat(transport.readyState).isEqualTo(Transport .ReadyState .CLOSED )
8286 verify(mockClosure).invoke(throwable, mockResponse)
87+ verifyZeroInteractions(mockOnClose)
88+ }
89+
90+ @Test
91+ fun `onFailure also triggers onClose for SocketException` () {
92+ val mockOnError = mock< (Throwable , Response ? ) -> Unit > ()
93+ val mockOnClose = mock< (Int ) -> Unit > ()
94+ transport.onClose = mockOnClose
95+ transport.onError = mockOnError
96+
97+ val throwable = SocketException ()
98+ transport.onFailure(mockWebSocket, throwable, mockResponse)
99+ verify(mockOnError).invoke(throwable, mockResponse)
100+ verify(mockOnClose).invoke(4000 )
101+ }
102+
103+ @Test
104+ fun `onFailure also triggers onClose for EOFException` () {
105+ val mockOnError = mock< (Throwable , Response ? ) -> Unit > ()
106+ val mockOnClose = mock< (Int ) -> Unit > ()
107+ transport.onClose = mockOnClose
108+ transport.onError = mockOnError
109+
110+ val throwable = EOFException ()
111+ transport.onFailure(mockWebSocket, throwable, mockResponse)
112+ verify(mockOnError).invoke(throwable, mockResponse)
113+ verify(mockOnClose).invoke(4001 )
83114 }
84115
85116 @Test
0 commit comments