1 package com.android.settings.development; 2 3 import static org.mockito.ArgumentMatchers.any; 4 import static org.mockito.Mockito.doReturn; 5 import static org.mockito.Mockito.never; 6 import static org.mockito.Mockito.spy; 7 import static org.mockito.Mockito.verify; 8 import static org.mockito.Mockito.when; 9 10 import android.app.backup.IBackupManager; 11 import android.content.Context; 12 import android.os.RemoteException; 13 import android.os.UserManager; 14 import android.support.v7.preference.Preference; 15 import android.support.v7.preference.PreferenceScreen; 16 17 import com.android.settings.R; 18 import com.android.settings.testutils.SettingsRobolectricTestRunner; 19 20 import org.junit.Before; 21 import org.junit.Test; 22 import org.junit.runner.RunWith; 23 import org.mockito.Mock; 24 import org.mockito.MockitoAnnotations; 25 import org.robolectric.RuntimeEnvironment; 26 import org.robolectric.util.ReflectionHelpers; 27 28 @RunWith(SettingsRobolectricTestRunner.class) 29 public class LocalBackupPasswordPreferenceControllerTest { 30 31 @Mock 32 private Preference mPreference; 33 @Mock 34 private PreferenceScreen mScreen; 35 @Mock 36 private UserManager mUserManager; 37 @Mock 38 private IBackupManager mBackupManager; 39 40 private Context mContext; 41 private LocalBackupPasswordPreferenceController mController; 42 43 @Before 44 public void setup() { 45 MockitoAnnotations.initMocks(this); 46 mContext = RuntimeEnvironment.application; 47 mController = spy(new LocalBackupPasswordPreferenceController(mContext)); 48 ReflectionHelpers.setField(mController, "mUserManager", mUserManager); 49 when(mScreen.findPreference(mController.getPreferenceKey())) 50 .thenReturn(mPreference); 51 } 52 53 @Test 54 public void updateState_hasBackupPassword_preferenceShouldHavePasswordSetSummary() 55 throws RemoteException { 56 ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); 57 doReturn(true).when(mController).isAdminUser(); 58 when(mBackupManager.hasBackupPassword()).thenReturn(true); 59 mController.displayPreference(mScreen); 60 61 mController.updateState(mPreference); 62 63 verify(mPreference).setSummary(R.string.local_backup_password_summary_change); 64 } 65 66 @Test 67 public void updateState_noBackupPassword_preferenceShouldHaveNoPasswordSetSummary() 68 throws RemoteException { 69 ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); 70 doReturn(true).when(mController).isAdminUser(); 71 when(mBackupManager.hasBackupPassword()).thenReturn(false); 72 mController.displayPreference(mScreen); 73 74 mController.updateState(mPreference); 75 76 verify(mPreference).setSummary(R.string.local_backup_password_summary_none); 77 } 78 79 @Test 80 public void updateState_backupManagerIsNull_shouldDisablePreference() throws RemoteException { 81 ReflectionHelpers.setField(mController, "mBackupManager", null); 82 doReturn(true).when(mController).isAdminUser(); 83 when(mBackupManager.hasBackupPassword()).thenReturn(true); 84 mController.displayPreference(mScreen); 85 86 mController.updateState(mPreference); 87 88 verify(mPreference).setEnabled(false); 89 verify(mPreference, never()).setSummary(any()); 90 } 91 92 @Test 93 public void updateState_backupManagerIsNotNullAndNotAdminUser_shouldDisablePreference() 94 throws RemoteException { 95 ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); 96 doReturn(false).when(mController).isAdminUser(); 97 when(mBackupManager.hasBackupPassword()).thenReturn(true); 98 99 mController.updateState(mPreference); 100 101 verify(mPreference).setEnabled(false); 102 verify(mPreference, never()).setSummary(any()); 103 } 104 105 @Test 106 public void updateState_backupManagerIsNotNullAndAdminUser_shouldEnablePreference() 107 throws RemoteException { 108 ReflectionHelpers.setField(mController, "mBackupManager", mBackupManager); 109 doReturn(true).when(mController).isAdminUser(); 110 when(mBackupManager.hasBackupPassword()).thenReturn(true); 111 112 mController.updateState(mPreference); 113 114 verify(mPreference).setEnabled(true); 115 verify(mPreference, never()).setSummary(any()); 116 } 117 } 118