Home | History | Annotate | Download | only in fingerprintdialog
      1 package com.example.android.fingerprintdialog;
      2 
      3 import org.junit.Before;
      4 import org.junit.Test;
      5 import org.junit.runner.RunWith;
      6 import org.mockito.ArgumentCaptor;
      7 import org.mockito.Captor;
      8 import org.mockito.InjectMocks;
      9 import org.mockito.Mock;
     10 import org.mockito.runners.MockitoJUnitRunner;
     11 
     12 import android.content.res.Resources;
     13 import android.hardware.fingerprint.FingerprintManager;
     14 import android.os.CancellationSignal;
     15 import android.os.Handler;
     16 import android.widget.ImageView;
     17 import android.widget.TextView;
     18 
     19 import static org.mockito.Matchers.any;
     20 import static org.mockito.Matchers.eq;
     21 import static org.mockito.Matchers.isA;
     22 import static org.mockito.Mockito.never;
     23 import static org.mockito.Mockito.verify;
     24 import static org.mockito.Mockito.when;
     25 
     26 /**
     27  * Unit tests for {@link FingerprintUiHelper}.
     28  */
     29 @RunWith(MockitoJUnitRunner.class)
     30 public class FingerprintUiHelperTest {
     31 
     32     private static final int ERROR_MSG_ID = 1;
     33     private static final CharSequence ERR_STRING = "ERROR_STRING";
     34     private static final int HINT_COLOR = 10;
     35 
     36     @Mock private FingerprintManager mockFingerprintManager;
     37     @Mock private ImageView mockIcon;
     38     @Mock private TextView mockTextView;
     39     @Mock private FingerprintUiHelper.Callback mockCallback;
     40     @Mock private FingerprintManager.CryptoObject mockCryptoObject;
     41     @Mock private Resources mockResources;
     42 
     43     @Captor private ArgumentCaptor<Runnable> mRunnableArgumentCaptor;
     44 
     45     @InjectMocks private FingerprintUiHelper.FingerprintUiHelperBuilder mockBuilder;
     46 
     47     private FingerprintUiHelper mFingerprintUiHelper;
     48 
     49     @Before
     50     public void setUp() {
     51         mFingerprintUiHelper = mockBuilder.build(mockIcon, mockTextView, mockCallback);
     52 
     53         when(mockFingerprintManager.isHardwareDetected()).thenReturn(true);
     54         when(mockFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
     55         when(mockTextView.getResources()).thenReturn(mockResources);
     56         when(mockResources.getColor(R.color.hint_color, null)).thenReturn(HINT_COLOR);
     57     }
     58 
     59     @Test
     60     public void testStartListening_fingerprintAuthAvailable() {
     61         mFingerprintUiHelper.startListening(mockCryptoObject);
     62 
     63         verify(mockFingerprintManager).authenticate(eq(mockCryptoObject),
     64                 isA(CancellationSignal.class), eq(0), eq(mFingerprintUiHelper),
     65                 any(Handler.class));
     66         verify(mockIcon).setImageResource(R.drawable.ic_fp_40px);
     67     }
     68 
     69     @Test
     70     public void testStartListening_fingerprintAuthNotAvailable() {
     71         when(mockFingerprintManager.isHardwareDetected()).thenReturn(false);
     72 
     73         mFingerprintUiHelper.startListening(mockCryptoObject);
     74 
     75         verify(mockFingerprintManager, never()).authenticate(
     76                 any(FingerprintManager.CryptoObject.class), any(CancellationSignal.class), eq(0),
     77                 any(FingerprintUiHelper.class), any(Handler.class));
     78     }
     79 
     80     @Test
     81     public void testOnAuthenticationError() {
     82         mFingerprintUiHelper.mSelfCancelled = false;
     83 
     84         mFingerprintUiHelper.onAuthenticationError(ERROR_MSG_ID, ERR_STRING);
     85 
     86         verify(mockIcon).setImageResource(R.drawable.ic_fingerprint_error);
     87         verify(mockTextView).removeCallbacks(mFingerprintUiHelper.mResetErrorTextRunnable);
     88         verify(mockTextView).postDelayed(mFingerprintUiHelper.mResetErrorTextRunnable,
     89                 FingerprintUiHelper.ERROR_TIMEOUT_MILLIS);
     90         verify(mockIcon).postDelayed(mRunnableArgumentCaptor.capture(),
     91                 eq(FingerprintUiHelper.ERROR_TIMEOUT_MILLIS));
     92 
     93         mRunnableArgumentCaptor.getValue().run();
     94 
     95         verify(mockCallback).onError();
     96     }
     97 
     98     @Test
     99     public void testOnAuthenticationSucceeded() {
    100         mFingerprintUiHelper.onAuthenticationSucceeded(null);
    101 
    102         verify(mockIcon).setImageResource(R.drawable.ic_fingerprint_success);
    103         verify(mockTextView).removeCallbacks(mFingerprintUiHelper.mResetErrorTextRunnable);
    104         verify(mockIcon).postDelayed(mRunnableArgumentCaptor.capture(),
    105                 eq(FingerprintUiHelper.SUCCESS_DELAY_MILLIS));
    106 
    107         mRunnableArgumentCaptor.getValue().run();
    108 
    109         verify(mockCallback).onAuthenticated();
    110     }
    111 }
    112