Loading src/com/android/settings/MasterClear.java +44 −18 Original line number Diff line number Diff line Loading @@ -123,24 +123,34 @@ public class MasterClear extends InstrumentedPreferenceFragment { return !((requestCode != KEYGUARD_REQUEST) && (requestCode != CREDENTIAL_CONFIRM_REQUEST)); } @VisibleForTesting boolean isShowFinalConfirmation(int requestCode, int resultCode) { return (resultCode == Activity.RESULT_OK) || (requestCode == CREDENTIAL_CONFIRM_REQUEST); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); onActivityResultInternal(requestCode, resultCode, data); } /* * Internal method that allows easy testing without dealing with super references. */ @VisibleForTesting void onActivityResultInternal(int requestCode, int resultCode, Intent data) { if (!isValidRequestCode(requestCode)) { return; } // If the user entered a valid keyguard trace, present the final // confirmation prompt; otherwise, go back to the initial state. if (isShowFinalConfirmation(requestCode, resultCode)) { showFinalConfirmation(); } else { if (resultCode != Activity.RESULT_OK) { establishInitialState(); return; } Intent intent = null; // If returning from a Keyguard request, try to show an account confirmation request if // applciable. if (CREDENTIAL_CONFIRM_REQUEST != requestCode && (intent = getAccountConfirmationIntent()) != null) { showAccountCredentialConfirmation(intent); } else { showFinalConfirmation(); } } Loading @@ -155,7 +165,12 @@ public class MasterClear extends InstrumentedPreferenceFragment { } @VisibleForTesting boolean tryShowAccountConfirmation() { void showAccountCredentialConfirmation(Intent intent) { startActivityForResult(intent, CREDENTIAL_CONFIRM_REQUEST); } @VisibleForTesting Intent getAccountConfirmationIntent() { final Context context = getActivity(); final String accountType = context.getString(R.string.account_type); final String packageName = context.getString(R.string.account_confirmation_package); Loading @@ -163,7 +178,8 @@ public class MasterClear extends InstrumentedPreferenceFragment { if (TextUtils.isEmpty(accountType) || TextUtils.isEmpty(packageName) || TextUtils.isEmpty(className)) { return false; Log.i(TAG, "Resources not set for account confirmation."); return null; } final AccountManager am = AccountManager.get(context); Account[] accounts = am.getAccountsByType(accountType); Loading @@ -179,12 +195,14 @@ public class MasterClear extends InstrumentedPreferenceFragment { && packageName.equals(resolution.activityInfo.packageName)) { // Note that we need to check the packagename to make sure that an Activity resolver // wasn't returned. startActivityForResult( requestAccountConfirmation, CREDENTIAL_CONFIRM_REQUEST); return true; return requestAccountConfirmation; } else { Log.i(TAG, "Unable to resolve Activity: " + packageName + "/" + className); } } else { Log.d(TAG, "No " + accountType + " accounts installed!"); } return false; return null; } /** Loading @@ -210,7 +228,14 @@ public class MasterClear extends InstrumentedPreferenceFragment { return; } if (!tryShowAccountConfirmation() && !runKeyguardConfirmation(KEYGUARD_REQUEST)) { if (runKeyguardConfirmation(KEYGUARD_REQUEST)) { return; } Intent intent = getAccountConfirmationIntent(); if (intent != null) { showAccountCredentialConfirmation(intent); } else { showFinalConfirmation(); } } Loading @@ -228,7 +253,8 @@ public class MasterClear extends InstrumentedPreferenceFragment { * time, then simply reuse the inflated views directly whenever we need * to change contents. */ private void establishInitialState() { @VisibleForTesting void establishInitialState() { mInitiateButton = (Button) mContentView.findViewById(R.id.initiate_master_clear); mInitiateButton.setOnClickListener(mInitiateListener); mExternalStorageContainer = mContentView.findViewById(R.id.erase_external_container); Loading tests/robotests/src/com/android/settings/MasterClearTest.java +109 −16 Original line number Diff line number Diff line Loading @@ -18,11 +18,14 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; Loading Loading @@ -86,6 +89,9 @@ public class MasterClearTest { @Mock private Activity mMockActivity; @Mock private Intent mMockIntent; private ShadowActivity mShadowActivity; private ShadowAccountManager mShadowAccountManager; private Activity mActivity; Loading @@ -110,7 +116,7 @@ public class MasterClearTest { MockitoAnnotations.initMocks(this); mMasterClear = spy(new MasterClear()); mActivity = Robolectric.setupActivity(Activity.class); mShadowActivity = shadowOf(mActivity); mShadowActivity = shadowOf(mActivity);https://stackoverflow.com/questions/14889951/how-to-verify-a-method-is-called-two-times-with-mockito-verify // mShadowAccountManager = shadowOf(AccountManager.get(mActivity)); mContentView = LayoutInflater.from(mActivity).inflate(R.layout.master_clear, null); Loading Loading @@ -213,38 +219,115 @@ public class MasterClearTest { } @Test public void testTryShowAccountConfirmation_unsupported() { public void testOnActivityResultInternal_invalideRequest() { int invalidRequestCode = -1; doReturn(false).when(mMasterClear).isValidRequestCode(eq(invalidRequestCode)); mMasterClear.onActivityResultInternal(invalidRequestCode, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(invalidRequestCode)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(0)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_resultCanceled() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doNothing().when(mMasterClear).establishInitialState(); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_CANCELED, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(1)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(0)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_keyguardRequestTriggeringConfirmAccount() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doReturn(mMockIntent).when(mMasterClear).getAccountConfirmationIntent(); doNothing().when(mMasterClear).showAccountCredentialConfirmation(eq(mMockIntent)); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(1)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showAccountCredentialConfirmation(eq(mMockIntent)); } @Test public void testOnActivityResultInternal_keyguardRequestTriggeringShowFinal() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doReturn(null).when(mMasterClear).getAccountConfirmationIntent(); doNothing().when(mMasterClear).showFinalConfirmation(); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(1)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_confirmRequestTriggeringShowFinal() { doReturn(true).when(mMasterClear) .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); doNothing().when(mMasterClear).showFinalConfirmation(); mMasterClear.onActivityResultInternal( MasterClear.CREDENTIAL_CONFIRM_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)) .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showFinalConfirmation(); } @Test public void testGetAccountConfirmationIntent_unsupported() { when(mMasterClear.getActivity()).thenReturn(mActivity); /* Using the default resources, account confirmation shouldn't trigger */ assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test public void testTryShowAccountConfirmation_no_relevant_accounts() { public void testGetAccountConfirmationIntent_no_relevant_accounts() { when(mMasterClear.getActivity()).thenReturn(mMockActivity); when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); Account[] accounts = new Account[0]; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts); assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test public void testTryShowAccountConfirmation_unresolved() { public void testGetAccountConfirmationIntent_unresolved() { when(mMasterClear.getActivity()).thenReturn(mMockActivity); when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) }; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts); // The package manager should not resolve the confirmation intent targeting the non-existent // confirmation package. when(mMockActivity.getPackageManager()).thenReturn(mPackageManager); assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test Loading @@ -252,8 +335,10 @@ public class MasterClearTest { when(mMasterClear.getActivity()).thenReturn(mMockActivity); // Only try to show account confirmation if the appropriate resource overlays are available. when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); // Add accounts to trigger the search for a resolving intent. Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) }; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); Loading @@ -268,10 +353,18 @@ public class MasterClearTest { resolveInfo.activityInfo = activityInfo; when(mPackageManager.resolveActivity(any(), eq(0))).thenReturn(resolveInfo); // Finally mock out the startActivityForResultCall doNothing().when(mMasterClear).startActivityForResult(any(), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); Intent actualIntent = mMasterClear.getAccountConfirmationIntent(); assertEquals(TEST_CONFIRMATION_PACKAGE, actualIntent.getComponent().getPackageName()); assertEquals(TEST_CONFIRMATION_CLASS, actualIntent.getComponent().getClassName()); } assertThat(mMasterClear.tryShowAccountConfirmation()).isTrue(); public void testShowAccountCredentialConfirmation() { // Finally mock out the startActivityForResultCall doNothing().when(mMasterClear) .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); mMasterClear.showAccountCredentialConfirmation(mMockIntent); verify(mMasterClear, times(1)) .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); } @Test Loading Loading
src/com/android/settings/MasterClear.java +44 −18 Original line number Diff line number Diff line Loading @@ -123,24 +123,34 @@ public class MasterClear extends InstrumentedPreferenceFragment { return !((requestCode != KEYGUARD_REQUEST) && (requestCode != CREDENTIAL_CONFIRM_REQUEST)); } @VisibleForTesting boolean isShowFinalConfirmation(int requestCode, int resultCode) { return (resultCode == Activity.RESULT_OK) || (requestCode == CREDENTIAL_CONFIRM_REQUEST); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); onActivityResultInternal(requestCode, resultCode, data); } /* * Internal method that allows easy testing without dealing with super references. */ @VisibleForTesting void onActivityResultInternal(int requestCode, int resultCode, Intent data) { if (!isValidRequestCode(requestCode)) { return; } // If the user entered a valid keyguard trace, present the final // confirmation prompt; otherwise, go back to the initial state. if (isShowFinalConfirmation(requestCode, resultCode)) { showFinalConfirmation(); } else { if (resultCode != Activity.RESULT_OK) { establishInitialState(); return; } Intent intent = null; // If returning from a Keyguard request, try to show an account confirmation request if // applciable. if (CREDENTIAL_CONFIRM_REQUEST != requestCode && (intent = getAccountConfirmationIntent()) != null) { showAccountCredentialConfirmation(intent); } else { showFinalConfirmation(); } } Loading @@ -155,7 +165,12 @@ public class MasterClear extends InstrumentedPreferenceFragment { } @VisibleForTesting boolean tryShowAccountConfirmation() { void showAccountCredentialConfirmation(Intent intent) { startActivityForResult(intent, CREDENTIAL_CONFIRM_REQUEST); } @VisibleForTesting Intent getAccountConfirmationIntent() { final Context context = getActivity(); final String accountType = context.getString(R.string.account_type); final String packageName = context.getString(R.string.account_confirmation_package); Loading @@ -163,7 +178,8 @@ public class MasterClear extends InstrumentedPreferenceFragment { if (TextUtils.isEmpty(accountType) || TextUtils.isEmpty(packageName) || TextUtils.isEmpty(className)) { return false; Log.i(TAG, "Resources not set for account confirmation."); return null; } final AccountManager am = AccountManager.get(context); Account[] accounts = am.getAccountsByType(accountType); Loading @@ -179,12 +195,14 @@ public class MasterClear extends InstrumentedPreferenceFragment { && packageName.equals(resolution.activityInfo.packageName)) { // Note that we need to check the packagename to make sure that an Activity resolver // wasn't returned. startActivityForResult( requestAccountConfirmation, CREDENTIAL_CONFIRM_REQUEST); return true; return requestAccountConfirmation; } else { Log.i(TAG, "Unable to resolve Activity: " + packageName + "/" + className); } } else { Log.d(TAG, "No " + accountType + " accounts installed!"); } return false; return null; } /** Loading @@ -210,7 +228,14 @@ public class MasterClear extends InstrumentedPreferenceFragment { return; } if (!tryShowAccountConfirmation() && !runKeyguardConfirmation(KEYGUARD_REQUEST)) { if (runKeyguardConfirmation(KEYGUARD_REQUEST)) { return; } Intent intent = getAccountConfirmationIntent(); if (intent != null) { showAccountCredentialConfirmation(intent); } else { showFinalConfirmation(); } } Loading @@ -228,7 +253,8 @@ public class MasterClear extends InstrumentedPreferenceFragment { * time, then simply reuse the inflated views directly whenever we need * to change contents. */ private void establishInitialState() { @VisibleForTesting void establishInitialState() { mInitiateButton = (Button) mContentView.findViewById(R.id.initiate_master_clear); mInitiateButton.setOnClickListener(mInitiateListener); mExternalStorageContainer = mContentView.findViewById(R.id.erase_external_container); Loading
tests/robotests/src/com/android/settings/MasterClearTest.java +109 −16 Original line number Diff line number Diff line Loading @@ -18,11 +18,14 @@ package com.android.settings; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.any; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.robolectric.Shadows.shadowOf; Loading Loading @@ -86,6 +89,9 @@ public class MasterClearTest { @Mock private Activity mMockActivity; @Mock private Intent mMockIntent; private ShadowActivity mShadowActivity; private ShadowAccountManager mShadowAccountManager; private Activity mActivity; Loading @@ -110,7 +116,7 @@ public class MasterClearTest { MockitoAnnotations.initMocks(this); mMasterClear = spy(new MasterClear()); mActivity = Robolectric.setupActivity(Activity.class); mShadowActivity = shadowOf(mActivity); mShadowActivity = shadowOf(mActivity);https://stackoverflow.com/questions/14889951/how-to-verify-a-method-is-called-two-times-with-mockito-verify // mShadowAccountManager = shadowOf(AccountManager.get(mActivity)); mContentView = LayoutInflater.from(mActivity).inflate(R.layout.master_clear, null); Loading Loading @@ -213,38 +219,115 @@ public class MasterClearTest { } @Test public void testTryShowAccountConfirmation_unsupported() { public void testOnActivityResultInternal_invalideRequest() { int invalidRequestCode = -1; doReturn(false).when(mMasterClear).isValidRequestCode(eq(invalidRequestCode)); mMasterClear.onActivityResultInternal(invalidRequestCode, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(invalidRequestCode)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(0)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_resultCanceled() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doNothing().when(mMasterClear).establishInitialState(); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_CANCELED, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(1)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(0)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_keyguardRequestTriggeringConfirmAccount() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doReturn(mMockIntent).when(mMasterClear).getAccountConfirmationIntent(); doNothing().when(mMasterClear).showAccountCredentialConfirmation(eq(mMockIntent)); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(1)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showAccountCredentialConfirmation(eq(mMockIntent)); } @Test public void testOnActivityResultInternal_keyguardRequestTriggeringShowFinal() { doReturn(true).when(mMasterClear).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); doReturn(null).when(mMasterClear).getAccountConfirmationIntent(); doNothing().when(mMasterClear).showFinalConfirmation(); mMasterClear.onActivityResultInternal( MasterClear.KEYGUARD_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)).isValidRequestCode(eq(MasterClear.KEYGUARD_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(1)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showFinalConfirmation(); } @Test public void testOnActivityResultInternal_confirmRequestTriggeringShowFinal() { doReturn(true).when(mMasterClear) .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); doNothing().when(mMasterClear).showFinalConfirmation(); mMasterClear.onActivityResultInternal( MasterClear.CREDENTIAL_CONFIRM_REQUEST, Activity.RESULT_OK, null); verify(mMasterClear, times(1)) .isValidRequestCode(eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); verify(mMasterClear, times(0)).establishInitialState(); verify(mMasterClear, times(0)).getAccountConfirmationIntent(); verify(mMasterClear, times(1)).showFinalConfirmation(); } @Test public void testGetAccountConfirmationIntent_unsupported() { when(mMasterClear.getActivity()).thenReturn(mActivity); /* Using the default resources, account confirmation shouldn't trigger */ assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test public void testTryShowAccountConfirmation_no_relevant_accounts() { public void testGetAccountConfirmationIntent_no_relevant_accounts() { when(mMasterClear.getActivity()).thenReturn(mMockActivity); when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); Account[] accounts = new Account[0]; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts); assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test public void testTryShowAccountConfirmation_unresolved() { public void testGetAccountConfirmationIntent_unresolved() { when(mMasterClear.getActivity()).thenReturn(mMockActivity); when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) }; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); when(mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE)).thenReturn(accounts); // The package manager should not resolve the confirmation intent targeting the non-existent // confirmation package. when(mMockActivity.getPackageManager()).thenReturn(mPackageManager); assertThat(mMasterClear.tryShowAccountConfirmation()).isFalse(); assertThat(mMasterClear.getAccountConfirmationIntent()).isNull(); } @Test Loading @@ -252,8 +335,10 @@ public class MasterClearTest { when(mMasterClear.getActivity()).thenReturn(mMockActivity); // Only try to show account confirmation if the appropriate resource overlays are available. when(mMockActivity.getString(R.string.account_type)).thenReturn(TEST_ACCOUNT_TYPE); when(mMockActivity.getString(R.string.account_confirmation_package)).thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)).thenReturn(TEST_CONFIRMATION_CLASS); when(mMockActivity.getString(R.string.account_confirmation_package)) .thenReturn(TEST_CONFIRMATION_PACKAGE); when(mMockActivity.getString(R.string.account_confirmation_class)) .thenReturn(TEST_CONFIRMATION_CLASS); // Add accounts to trigger the search for a resolving intent. Account[] accounts = new Account[] { new Account(TEST_ACCOUNT_NAME, TEST_ACCOUNT_TYPE) }; when(mMockActivity.getSystemService(Context.ACCOUNT_SERVICE)).thenReturn(mAccountManager); Loading @@ -268,10 +353,18 @@ public class MasterClearTest { resolveInfo.activityInfo = activityInfo; when(mPackageManager.resolveActivity(any(), eq(0))).thenReturn(resolveInfo); // Finally mock out the startActivityForResultCall doNothing().when(mMasterClear).startActivityForResult(any(), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); Intent actualIntent = mMasterClear.getAccountConfirmationIntent(); assertEquals(TEST_CONFIRMATION_PACKAGE, actualIntent.getComponent().getPackageName()); assertEquals(TEST_CONFIRMATION_CLASS, actualIntent.getComponent().getClassName()); } assertThat(mMasterClear.tryShowAccountConfirmation()).isTrue(); public void testShowAccountCredentialConfirmation() { // Finally mock out the startActivityForResultCall doNothing().when(mMasterClear) .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); mMasterClear.showAccountCredentialConfirmation(mMockIntent); verify(mMasterClear, times(1)) .startActivityForResult(eq(mMockIntent), eq(MasterClear.CREDENTIAL_CONFIRM_REQUEST)); } @Test Loading