14f9e8d4a14be35caa551236c207f48c6855172edFan Zhang/* 24f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * Copyright (C) 2017 The Android Open Source Project 34f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * 44f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 54f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * you may not use this file except in compliance with the License. 64f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * You may obtain a copy of the License at 74f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * 84f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * http://www.apache.org/licenses/LICENSE-2.0 94f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * 104f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * Unless required by applicable law or agreed to in writing, software 114f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * distributed under the License is distributed on an "AS IS" BASIS, 124f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * See the License for the specific language governing permissions and 144f9e8d4a14be35caa551236c207f48c6855172edFan Zhang * limitations under the License. 154f9e8d4a14be35caa551236c207f48c6855172edFan Zhang */ 164f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 174f9e8d4a14be35caa551236c207f48c6855172edFan Zhangpackage com.android.settings.deviceinfo; 184f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 194f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 204f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport android.app.Activity; 2138a2a5f425d31916427550ec038dcff569d339e4Daniel Nishiimport android.app.usage.StorageStatsManager; 224f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport android.icu.text.NumberFormat; 234f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport android.os.storage.VolumeInfo; 244f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport android.text.format.Formatter; 254f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 264f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport com.android.settings.R; 274f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport com.android.settings.SettingsRobolectricTestRunner; 284f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport com.android.settings.TestConfig; 294f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport com.android.settings.dashboard.SummaryLoader; 304f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport com.android.settingslib.deviceinfo.StorageManagerVolumeProvider; 314f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 324f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.junit.Before; 334f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.junit.Test; 344f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.junit.runner.RunWith; 354f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.mockito.Mock; 364f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.mockito.MockitoAnnotations; 374f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.robolectric.RuntimeEnvironment; 384f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.robolectric.annotation.Config; 394f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport org.robolectric.util.ReflectionHelpers; 404f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 414f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport java.util.ArrayList; 424f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport java.util.List; 434f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 4438a2a5f425d31916427550ec038dcff569d339e4Daniel Nishiimport static org.mockito.Matchers.any; 454f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport static org.mockito.Mockito.RETURNS_DEEP_STUBS; 464f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport static org.mockito.Mockito.mock; 474f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport static org.mockito.Mockito.verify; 484f9e8d4a14be35caa551236c207f48c6855172edFan Zhangimport static org.mockito.Mockito.when; 494f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 504f9e8d4a14be35caa551236c207f48c6855172edFan Zhang@RunWith(SettingsRobolectricTestRunner.class) 514f9e8d4a14be35caa551236c207f48c6855172edFan Zhang@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 524f9e8d4a14be35caa551236c207f48c6855172edFan Zhangpublic class StorageSettingsTest { 534f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 544f9e8d4a14be35caa551236c207f48c6855172edFan Zhang @Mock 554f9e8d4a14be35caa551236c207f48c6855172edFan Zhang private StorageManagerVolumeProvider mStorageManagerVolumeProvider; 564f9e8d4a14be35caa551236c207f48c6855172edFan Zhang @Mock 574f9e8d4a14be35caa551236c207f48c6855172edFan Zhang private Activity mActivity; 584f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 594f9e8d4a14be35caa551236c207f48c6855172edFan Zhang private List<VolumeInfo> mVolumes; 604f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 614f9e8d4a14be35caa551236c207f48c6855172edFan Zhang private StorageSettings mSettings; 624f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 634f9e8d4a14be35caa551236c207f48c6855172edFan Zhang @Before 644f9e8d4a14be35caa551236c207f48c6855172edFan Zhang public void setUp() { 654f9e8d4a14be35caa551236c207f48c6855172edFan Zhang MockitoAnnotations.initMocks(this); 664f9e8d4a14be35caa551236c207f48c6855172edFan Zhang mVolumes = new ArrayList<>(); 674f9e8d4a14be35caa551236c207f48c6855172edFan Zhang mVolumes.add(mock(VolumeInfo.class, RETURNS_DEEP_STUBS)); 684f9e8d4a14be35caa551236c207f48c6855172edFan Zhang mSettings = new StorageSettings(); 694f9e8d4a14be35caa551236c207f48c6855172edFan Zhang when(mStorageManagerVolumeProvider.getVolumes()).thenReturn(mVolumes); 704f9e8d4a14be35caa551236c207f48c6855172edFan Zhang } 714f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 724f9e8d4a14be35caa551236c207f48c6855172edFan Zhang @Test 73b80f1ddaf04d07d47cead4de2422c4627573ea50Jeff Sharkey public void updateSummary_shouldDisplayUsedPercentAndFreeSpace() throws Exception { 744f9e8d4a14be35caa551236c207f48c6855172edFan Zhang final SummaryLoader loader = mock(SummaryLoader.class); 754f9e8d4a14be35caa551236c207f48c6855172edFan Zhang final SummaryLoader.SummaryProvider provider = 764f9e8d4a14be35caa551236c207f48c6855172edFan Zhang StorageSettings.SUMMARY_PROVIDER_FACTORY.createSummaryProvider(mActivity, loader); 774f9e8d4a14be35caa551236c207f48c6855172edFan Zhang final VolumeInfo volumeInfo = mVolumes.get(0); 7838a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi when(volumeInfo.isMountedReadable()).thenReturn(true); 794f9e8d4a14be35caa551236c207f48c6855172edFan Zhang when(volumeInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE); 8038a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi when(mStorageManagerVolumeProvider.getTotalBytes( 8138a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi any(StorageStatsManager.class), any(VolumeInfo.class))) 8238a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi .thenReturn(500L); 8338a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi when(mStorageManagerVolumeProvider.getFreeBytes( 8438a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi any(StorageStatsManager.class), any(VolumeInfo.class))) 8538a2a5f425d31916427550ec038dcff569d339e4Daniel Nishi .thenReturn(0L); 864f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 874f9e8d4a14be35caa551236c207f48c6855172edFan Zhang ReflectionHelpers.setField( 884f9e8d4a14be35caa551236c207f48c6855172edFan Zhang provider, "mStorageManagerVolumeProvider", mStorageManagerVolumeProvider); 894f9e8d4a14be35caa551236c207f48c6855172edFan Zhang ReflectionHelpers.setField(provider, "mContext", RuntimeEnvironment.application); 904f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 914f9e8d4a14be35caa551236c207f48c6855172edFan Zhang provider.setListening(true); 924f9e8d4a14be35caa551236c207f48c6855172edFan Zhang 934f9e8d4a14be35caa551236c207f48c6855172edFan Zhang final String percentage = NumberFormat.getPercentInstance().format(1); 944f9e8d4a14be35caa551236c207f48c6855172edFan Zhang final String freeSpace = Formatter.formatFileSize(RuntimeEnvironment.application, 0); 954f9e8d4a14be35caa551236c207f48c6855172edFan Zhang verify(loader).setSummary(provider, 964f9e8d4a14be35caa551236c207f48c6855172edFan Zhang RuntimeEnvironment.application.getString( 974f9e8d4a14be35caa551236c207f48c6855172edFan Zhang R.string.storage_summary, percentage, freeSpace)); 984f9e8d4a14be35caa551236c207f48c6855172edFan Zhang } 994f9e8d4a14be35caa551236c207f48c6855172edFan Zhang} 100