19be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipackage com.android.settings.applications; 29be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 39be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static com.google.common.truth.Truth.assertThat; 49be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 59be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Matchers.nullable; 69be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Mockito.verify; 79be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport static org.mockito.Mockito.when; 89be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 99be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.app.Fragment; 109be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Context; 119be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.content.Intent; 129be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.os.UserHandle; 139be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.os.storage.VolumeInfo; 149be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport android.view.LayoutInflater; 159be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 169be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.TestConfig; 179be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settings.testutils.SettingsRobolectricTestRunner; 189be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settingslib.applications.StorageStatsSource; 199be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport com.android.settingslib.deviceinfo.StorageVolumeProvider; 209be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 219be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.Before; 229be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.Test; 239be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.junit.runner.RunWith; 249be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.Answers; 259be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.ArgumentCaptor; 269be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.Mock; 279be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.mockito.MockitoAnnotations; 289be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.robolectric.RuntimeEnvironment; 299be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishiimport org.robolectric.annotation.Config; 309be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 319be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi@RunWith(SettingsRobolectricTestRunner.class) 329be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 339be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishipublic class PhotosViewHolderControllerTest { 349be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Mock(answer = Answers.RETURNS_DEEP_STUBS) 359be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private Fragment mFragment; 369be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 379be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Mock private StorageVolumeProvider mSvp; 389be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Mock private StorageStatsSource mSource; 399be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 409be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private Context mContext; 419be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private PhotosViewHolderController mController; 429be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private VolumeInfo mVolume; 439be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi private AppViewHolder mHolder; 449be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 459be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Before 469be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void setUp() throws Exception { 479be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi MockitoAnnotations.initMocks(this); 489be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mContext = RuntimeEnvironment.application; 499be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mVolume = new VolumeInfo("id", 0, null, "id"); 509be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mController = 519be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi new PhotosViewHolderController( 529be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mContext, mSource, mVolume.fsUuid, new UserHandle(0)); 539be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 549be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi LayoutInflater inflater = LayoutInflater.from(mContext); 559be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mHolder = AppViewHolder.createOrRecycle(inflater, null); 569be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 579be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 589be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Test 599be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() { 609be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mController.setupView(mHolder); 619be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 629be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(mHolder.summary.getText().toString()).isEqualTo("0.00B"); 639be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 649be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 659be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Test 669be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void storageShouldRepresentStorageStatsQuery() throws Exception { 679be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi when(mSource.getExternalStorageStats(nullable(String.class), nullable(UserHandle.class))) 689be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi .thenReturn(new StorageStatsSource.ExternalStorageStats(1, 0, 1, 10, 0)); 699be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 709be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mController.queryStats(); 719be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mController.setupView(mHolder); 729be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 739be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(mHolder.summary.getText().toString()).isEqualTo("11.00B"); 749be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 759be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 769be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi @Test 779be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi public void clickingShouldIntentIntoFilesApp() { 789be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi mController.onClick(mFragment); 799be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 809be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi final ArgumentCaptor<Intent> argumentCaptor = ArgumentCaptor.forClass(Intent.class); 819be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi verify(mFragment).startActivity(argumentCaptor.capture()); 829be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi Intent intent = argumentCaptor.getValue(); 839be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi 849be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getType()).isEqualTo("image/*"); 859be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getAction()).isEqualTo(android.content.Intent.ACTION_VIEW); 869be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi assertThat(intent.getBooleanExtra(Intent.EXTRA_FROM_STORAGE, false)).isTrue(); 879be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi } 889be0ce09c9b3eb2e2d0bac038a3f469f087af652Daniel Nishi} 89