@@ -28,9 +28,11 @@ import android.os.Build
2828import androidx.appcompat.app.AppCompatActivity
2929import androidx.core.content.PermissionChecker.PERMISSION_DENIED
3030import androidx.core.content.PermissionChecker.PERMISSION_GRANTED
31+ import com.nhaarman.mockitokotlin2.anyArray
3132import org.junit.Before
3233import org.junit.Ignore
3334import org.junit.Test
35+ import org.mockito.AdditionalMatchers
3436import org.mockito.Mockito
3537import org.mockito.Mockito.*
3638import java.lang.reflect.Field
@@ -80,12 +82,21 @@ internal class SentryTest {
8082 val code = requestCode ? : it.getArgument<Int >(1 )
8183
8284 // Set the permission result to DENIED to validate the flow.
83- sentry .onRequestPermissionsResult(code, permissions, intArrayOf(permissionResult))
85+ activity .onRequestPermissionsResult(code, permissions, intArrayOf(permissionResult))
8486 }
8587 }
8688 }
8789
88- private val activity = mock(AppCompatActivity ::class .java)!!
90+ private val activity = mock(AppCompatActivity ::class .java)!! .also {
91+ // Provide a manual override of the result
92+ `when `(it.onRequestPermissionsResult(anyInt(), anyArray(), any<IntArray >())).then {
93+ val requestCode = it.getArgument<Int >(0 )
94+ val permissions = it.getArgument<Array <String >>(1 )
95+ val grantResults = it.getArgument<IntArray >(2 )
96+
97+ SentryPermissionHandler .onRequestPermissionsResult(requestCode, permissions, grantResults)
98+ }
99+ }
89100 private val permissionHelper = mock(IPermissionHelper ::class .java)!!
90101 private val callback = mockFrom< (Boolean ) -> Unit > ()
91102
@@ -136,10 +147,11 @@ internal class SentryTest {
136147 setupPermissionResult(activity, sentry, PERMISSION_GRANTED , - 1 )
137148
138149 // Perform action
139- sentry.requestPermission(ARBITRARY_PERMISSION , callback)
150+ val requestCode = sentry.requestPermission(ARBITRARY_PERMISSION , callback)
140151
141152 // Assert
142- verify(activity, times(1 )).requestPermissions(any(), eq(sentry.hashCode()))
153+ verify(activity, times(1 )).requestPermissions(any(), eq(requestCode))
154+ verify(activity, times(1 )).onRequestPermissionsResult(eq(- 1 ), anyArray(), any<IntArray >())
143155 verify(callback, never()).invoke(any(Boolean ::class .java))
144156
145157 verifyNoMoreInteractions(activity)
@@ -159,14 +171,15 @@ internal class SentryTest {
159171 val code = it.getArgument<Int >(1 )
160172
161173 // Set the permission result to an empty array.
162- sentry .onRequestPermissionsResult(code, permissions, intArrayOf())
174+ activity .onRequestPermissionsResult(code, permissions, intArrayOf())
163175 }
164176
165177 // Perform action
166- sentry.requestPermission(ARBITRARY_PERMISSION , callback)
178+ val requestCode = sentry.requestPermission(ARBITRARY_PERMISSION , callback)
167179
168180 // Assert
169- verify(activity, times(1 )).requestPermissions(any(), eq(sentry.hashCode()))
181+ verify(activity, times(1 )).requestPermissions(any(), eq(requestCode))
182+ verify(activity, times(1 )).onRequestPermissionsResult(eq(requestCode), anyArray(), AdditionalMatchers .aryEq(IntArray (0 )))
170183 verify(callback, never()).invoke(any(Boolean ::class .java))
171184
172185 verifyNoMoreInteractions(activity)
@@ -186,10 +199,10 @@ internal class SentryTest {
186199 setupPermissionResult(activity, sentry, PERMISSION_DENIED )
187200
188201 // Perform action
189- sentry.requestPermission(ARBITRARY_PERMISSION , callback)
202+ val requestCode = sentry.requestPermission(ARBITRARY_PERMISSION , callback)
190203
191204 // Assert
192- verify(activity, never()).requestPermissions(any(), eq(sentry.hashCode() ))
205+ verify(activity, never()).requestPermissions(any(), eq(requestCode ))
193206 verify(callback, times(1 )).invoke(eq(true ))
194207
195208 verifyNoMoreInteractions(activity)
@@ -206,10 +219,11 @@ internal class SentryTest {
206219 setupPermissionResult(activity, sentry, PERMISSION_GRANTED )
207220
208221 // Perform action
209- sentry.requestPermission(ARBITRARY_PERMISSION , callback)
222+ val requestCode = sentry.requestPermission(ARBITRARY_PERMISSION , callback)
210223
211224 // Assert
212- verify(activity, times(1 )).requestPermissions(any(), eq(sentry.hashCode()))
225+ verify(activity, times(1 )).requestPermissions(any(), eq(requestCode))
226+ verify(activity, times(1 )).onRequestPermissionsResult(eq(requestCode), AdditionalMatchers .aryEq(arrayOf(ARBITRARY_PERMISSION )), AdditionalMatchers .aryEq(intArrayOf(PERMISSION_GRANTED )))
213227 verify(callback, times(1 )).invoke(eq(true ))
214228
215229 verifyNoMoreInteractions(activity)
@@ -226,10 +240,11 @@ internal class SentryTest {
226240 setupPermissionResult(activity, sentry, PERMISSION_DENIED )
227241
228242 // Perform action
229- sentry.requestPermission(ARBITRARY_PERMISSION , callback)
243+ val requestCode = sentry.requestPermission(ARBITRARY_PERMISSION , callback)
230244
231245 // Assert
232- verify(activity, times(1 )).requestPermissions(any(), eq(sentry.hashCode()))
246+ verify(activity, times(1 )).requestPermissions(any(), eq(requestCode))
247+ verify(activity, times(1 )).onRequestPermissionsResult(eq(requestCode), AdditionalMatchers .aryEq(arrayOf(ARBITRARY_PERMISSION )), AdditionalMatchers .aryEq(intArrayOf(PERMISSION_DENIED )))
233248 verify(callback, times(1 )).invoke(eq(false ))
234249
235250 verifyNoMoreInteractions(activity)
0 commit comments