blob: da9b2a3323dc149abeb5ec5df1e52b9bab24b426 [file] [log] [blame]
package com.example.android.fingerprintdialog;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import android.content.res.Resources;
import android.hardware.fingerprint.FingerprintManager;
import android.os.CancellationSignal;
import android.os.Handler;
import android.widget.ImageView;
import android.widget.TextView;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.isA;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Unit tests for {@link FingerprintUiHelper}.
*/
@RunWith(MockitoJUnitRunner.class)
public class FingerprintUiHelperTest {
private static final int ERROR_MSG_ID = 1;
private static final CharSequence ERR_STRING = "ERROR_STRING";
private static final int HINT_COLOR = 10;
@Mock private FingerprintManager mockFingerprintManager;
@Mock private ImageView mockIcon;
@Mock private TextView mockTextView;
@Mock private FingerprintUiHelper.Callback mockCallback;
@Mock private FingerprintManager.CryptoObject mockCryptoObject;
@Mock private Resources mockResources;
@Captor private ArgumentCaptor<Runnable> mRunnableArgumentCaptor;
@InjectMocks private FingerprintUiHelper.FingerprintUiHelperBuilder mockBuilder;
private FingerprintUiHelper mFingerprintUiHelper;
@Before
public void setUp() {
mFingerprintUiHelper = mockBuilder.build(mockIcon, mockTextView, mockCallback);
when(mockFingerprintManager.isHardwareDetected()).thenReturn(true);
when(mockFingerprintManager.hasEnrolledFingerprints()).thenReturn(true);
when(mockTextView.getResources()).thenReturn(mockResources);
when(mockResources.getColor(R.color.hint_color, null)).thenReturn(HINT_COLOR);
}
@Test
public void testStartListening_fingerprintAuthAvailable() {
mFingerprintUiHelper.startListening(mockCryptoObject);
verify(mockFingerprintManager).authenticate(eq(mockCryptoObject),
isA(CancellationSignal.class), eq(0), eq(mFingerprintUiHelper),
any(Handler.class));
verify(mockIcon).setImageResource(R.drawable.ic_fp_40px);
}
@Test
public void testStartListening_fingerprintAuthNotAvailable() {
when(mockFingerprintManager.isHardwareDetected()).thenReturn(false);
mFingerprintUiHelper.startListening(mockCryptoObject);
verify(mockFingerprintManager, never()).authenticate(
any(FingerprintManager.CryptoObject.class), any(CancellationSignal.class), eq(0),
any(FingerprintUiHelper.class), any(Handler.class));
}
@Test
public void testOnAuthenticationError() {
mFingerprintUiHelper.mSelfCancelled = false;
mFingerprintUiHelper.onAuthenticationError(ERROR_MSG_ID, ERR_STRING);
verify(mockIcon).setImageResource(R.drawable.ic_fingerprint_error);
verify(mockTextView).removeCallbacks(mFingerprintUiHelper.mResetErrorTextRunnable);
verify(mockTextView).postDelayed(mFingerprintUiHelper.mResetErrorTextRunnable,
FingerprintUiHelper.ERROR_TIMEOUT_MILLIS);
verify(mockIcon).postDelayed(mRunnableArgumentCaptor.capture(),
eq(FingerprintUiHelper.ERROR_TIMEOUT_MILLIS));
mRunnableArgumentCaptor.getValue().run();
verify(mockCallback).onError();
}
@Test
public void testOnAuthenticationSucceeded() {
mFingerprintUiHelper.onAuthenticationSucceeded(null);
verify(mockIcon).setImageResource(R.drawable.ic_fingerprint_success);
verify(mockTextView).removeCallbacks(mFingerprintUiHelper.mResetErrorTextRunnable);
verify(mockIcon).postDelayed(mRunnableArgumentCaptor.capture(),
eq(FingerprintUiHelper.SUCCESS_DELAY_MILLIS));
mRunnableArgumentCaptor.getValue().run();
verify(mockCallback).onAuthenticated();
}
}