1 package org.robolectric.integrationtests.axt; 2 3 import static org.junit.Assert.fail; 4 5 import androidx.annotation.NonNull; 6 import androidx.biometric.BiometricPrompt; 7 import androidx.biometric.BiometricPrompt.PromptInfo; 8 import androidx.fragment.app.FragmentActivity; 9 import androidx.test.ext.junit.runners.AndroidJUnit4; 10 import java.security.NoSuchAlgorithmException; 11 import java.util.concurrent.Executor; 12 import javax.crypto.Cipher; 13 import javax.crypto.NoSuchPaddingException; 14 import org.junit.Before; 15 import org.junit.Test; 16 import org.junit.runner.RunWith; 17 import org.robolectric.android.controller.ActivityController; 18 19 /** Test intercepting classes not present in OpenJDK. */ 20 @RunWith(AndroidJUnit4.class) 21 public class CryptoObjectTest { 22 23 private FragmentActivity fragmentActivity; 24 25 @Before setUp()26 public void setUp() { 27 fragmentActivity = 28 ActivityController.of(new FragmentActivity()).create().resume().start().get(); 29 } 30 31 @Test biometricPromptAuthenticateShouldNotCrashWithNoSuchMethodError()32 public void biometricPromptAuthenticateShouldNotCrashWithNoSuchMethodError() 33 throws NoSuchPaddingException, NoSuchAlgorithmException { 34 BiometricPrompt biometricPrompt = 35 new BiometricPrompt( 36 fragmentActivity, 37 new Executor() { 38 @Override 39 public void execute(Runnable command) {} 40 }, 41 new BiometricPrompt.AuthenticationCallback() { 42 @Override 43 public void onAuthenticationError(int errorCode, @NonNull CharSequence errString) {} 44 45 @Override 46 public void onAuthenticationSucceeded( 47 @NonNull BiometricPrompt.AuthenticationResult result) {} 48 49 @Override 50 public void onAuthenticationFailed() {} 51 }); 52 53 PromptInfo promptInfo = 54 new PromptInfo.Builder() 55 .setTitle("Set and not empty") 56 .setNegativeButtonText("Set and not empty") 57 .build(); 58 try { 59 biometricPrompt.authenticate( 60 promptInfo, new BiometricPrompt.CryptoObject(Cipher.getInstance("RSA"))); 61 } catch (NoSuchMethodError e) { 62 fail(); 63 } 64 } 65 } 66