Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0345218e authored by Beverly's avatar Beverly
Browse files

Cancel pending tasks by callling underTest.onPause to avoid mockito-npe

KeyguardPasswordViewController extends KeyguardAbsKeyInputViewController
which can have mPendingLockCheck. Call #onPause to cancel the pending
lock check so we don't have it running after we finish running
the test and the mocks are null (causing npe).

Also add mock for keyguardMessageArea.resources in case
the pending lock check occurs before the test ends.

Re-enables KeyguardPasswordViewControllerTest.

Flag: EXEMPT test only fix
Fixes: 423646800
Test: atest KeyguardPasswordViewControllerTest
Change-Id: Icc9765a55a2375ee59359fa940879ebc07be9cf4
parent d5f3da8f
Loading
Loading
Loading
Loading
+26 −21
Original line number Diff line number Diff line
@@ -45,8 +45,8 @@ import com.android.systemui.util.mockito.mock
import com.android.systemui.util.mockito.whenever
import junit.framework.Assert.assertFalse
import junit.framework.Assert.assertTrue
import org.junit.After
import org.junit.Before
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
@@ -61,7 +61,6 @@ import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations

@Ignore("b/423646800")
@SmallTest
@RunWith(AndroidJUnit4::class)
// collectFlow in KeyguardPinBasedInputViewController.onViewAttached calls JavaAdapter.CollectFlow,
@@ -82,13 +81,13 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
    @Mock lateinit var mainExecutor: DelayableExecutor
    @Mock lateinit var falsingCollector: FalsingCollector
    @Mock lateinit var keyguardViewController: KeyguardViewController
    @Mock lateinit var mSelectedUserInteractor: SelectedUserInteractor
    @Mock private lateinit var mKeyguardMessageArea: BouncerKeyguardMessageArea
    @Mock lateinit var selectedUserInteractor: SelectedUserInteractor
    @Mock private lateinit var keyguardMessageArea: BouncerKeyguardMessageArea
    @Mock
    private lateinit var mKeyguardMessageAreaController:
    private lateinit var keyguardMessageAreaController:
        KeyguardMessageAreaController<BouncerKeyguardMessageArea>
    @Mock private lateinit var postureController: DevicePostureController
    @Mock private lateinit var mUserActivityNotifier: UserActivityNotifier
    @Mock private lateinit var userActivityNotifier: UserActivityNotifier
    @Captor private lateinit var keyListenerArgumentCaptor: ArgumentCaptor<View.OnKeyListener>
    private val kosmos = testKosmos()

@@ -102,15 +101,16 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
                    R.id.bouncer_message_area
                )
            )
            .thenReturn(mKeyguardMessageArea)
        Mockito.`when`(messageAreaControllerFactory.create(mKeyguardMessageArea))
            .thenReturn(mKeyguardMessageAreaController)
        Mockito.`when`(keyguardPasswordView.passwordTextViewId).thenReturn(R.id.passwordEntry)
        Mockito.`when`(keyguardPasswordView.findViewById<EditText>(R.id.passwordEntry))
            .thenReturn(keyguardMessageArea)
        `when`(messageAreaControllerFactory.create(keyguardMessageArea))
            .thenReturn(keyguardMessageAreaController)
        `when`(keyguardPasswordView.passwordTextViewId).thenReturn(R.id.passwordEntry)
        `when`(keyguardPasswordView.findViewById<EditText>(R.id.passwordEntry))
            .thenReturn(passwordEntry)
        whenever(keyguardPasswordView.findViewById<ImageView>(R.id.switch_ime_button))
            .thenReturn(mock(ImageView::class.java))
        `when`(keyguardPasswordView.resources).thenReturn(context.resources)
        `when`(keyguardMessageArea.resources).thenReturn(context.resources)
        // TODO(b/362362385): No need to mock keyguardPasswordView.context once this bug is fixed.
        `when`(keyguardPasswordView.context).thenReturn(context)
        whenever(passwordEntry.layoutParams).thenReturn(passwordEntryLayoutParams)
@@ -135,17 +135,22 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
                keyguardViewController,
                postureController,
                fakeFeatureFlags,
                mSelectedUserInteractor,
                selectedUserInteractor,
                keyguardKeyboardInteractor,
                kosmos.bouncerHapticPlayer,
                mUserActivityNotifier,
                userActivityNotifier,
            )
    }

    @After
    fun tearDown() {
        keyguardPasswordViewController.onPause()
    }

    @Test
    fun testFocusWhenBouncerIsShown() {
        Mockito.`when`(keyguardViewController.isBouncerShowing).thenReturn(true)
        Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
        `when`(keyguardViewController.isBouncerShowing).thenReturn(true)
        `when`(keyguardPasswordView.isShown).thenReturn(true)
        keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
        keyguardPasswordView.post {
            verify(keyguardPasswordView).requestFocus()
@@ -155,8 +160,8 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {

    @Test
    fun testDoNotFocusWhenBouncerIsHidden() {
        Mockito.`when`(keyguardViewController.isBouncerShowing).thenReturn(false)
        Mockito.`when`(keyguardPasswordView.isShown).thenReturn(true)
        `when`(keyguardViewController.isBouncerShowing).thenReturn(false)
        `when`(keyguardPasswordView.isShown).thenReturn(true)
        keyguardPasswordViewController.onResume(KeyguardSecurityView.VIEW_REVEALED)
        verify(keyguardPasswordView, never()).requestFocus()
    }
@@ -173,21 +178,21 @@ class KeyguardPasswordViewControllerTest : SysuiTestCase() {
    @Test
    fun testOnViewAttached() {
        keyguardPasswordViewController.onViewAttached()
        verify(mKeyguardMessageAreaController)
        verify(keyguardMessageAreaController)
            .setMessage(context.resources.getString(R.string.keyguard_enter_your_password), false)
    }

    @Test
    fun testOnViewAttached_withExistingMessage() {
        `when`(mKeyguardMessageAreaController.message).thenReturn("Unlock to continue.")
        `when`(keyguardMessageAreaController.message).thenReturn("Unlock to continue.")
        keyguardPasswordViewController.onViewAttached()
        verify(mKeyguardMessageAreaController, never()).setMessage(anyString(), anyBoolean())
        verify(keyguardMessageAreaController, never()).setMessage(anyString(), anyBoolean())
    }

    @Test
    fun testMessageIsSetWhenReset() {
        keyguardPasswordViewController.resetState()
        verify(mKeyguardMessageAreaController).setMessage(R.string.keyguard_enter_your_password)
        verify(keyguardMessageAreaController).setMessage(R.string.keyguard_enter_your_password)
    }

    @Test