1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5 * use this file except in compliance with the License. You may obtain a copy of 6 * the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations under 14 * the License. 15 */ 16 17 package com.android.storagemanager.deletionhelper; 18 19 import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus; 20 import com.android.storagemanager.testing.TestingConstants; 21 import org.junit.Before; 22 import org.junit.Test; 23 import org.junit.runner.RunWith; 24 import org.mockito.Answers; 25 import org.mockito.Mock; 26 import org.mockito.MockitoAnnotations; 27 import org.robolectric.RobolectricTestRunner; 28 import org.robolectric.annotation.Config; 29 30 import java.util.ArrayList; 31 import java.util.List; 32 33 import static com.google.common.truth.Truth.assertThat; 34 import static org.mockito.Matchers.eq; 35 import static org.mockito.Mockito.verify; 36 37 @RunWith(RobolectricTestRunner.class) 38 @Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION) 39 public class AppDeletionTypeTest { 40 private static String PACKAGE_NAME = "com.package.package"; 41 42 @Mock(answer = Answers.RETURNS_DEEP_STUBS) 43 private DeletionHelperSettings mFragment; 44 45 @Mock private AppDeletionPreferenceGroup mGroup; 46 private AppDeletionType mDeletion; 47 48 @Before 49 public void setUp() { 50 MockitoAnnotations.initMocks(this); 51 mDeletion = new AppDeletionType(mFragment, null, AppsAsyncLoader.NO_THRESHOLD); 52 mDeletion.registerView(mGroup); 53 mDeletion.registerFreeableChangedListener(mFragment); 54 } 55 56 @Test 57 public void uncheckedAppNotReported() { 58 List<AppsAsyncLoader.PackageInfo> loadedPackages = new ArrayList<>(); 59 loadedPackages.add( 60 new AppsAsyncLoader.PackageInfo.Builder() 61 .setDaysSinceLastUse(100) 62 .setDaysSinceFirstInstall(101) 63 .setUserId(0) 64 .setPackageName(PACKAGE_NAME) 65 .setSize(1000) 66 .setFlags(0) 67 .build()); 68 69 // By default, no packages are checked, so these will be unchecked. 70 mDeletion.onLoadFinished(null, loadedPackages); 71 72 verify(mFragment).onFreeableChanged(eq(1), eq(0L)); 73 } 74 75 @Test 76 public void checkedAppIsReported() { 77 List<AppsAsyncLoader.PackageInfo> loadedPackages = new ArrayList<>(); 78 loadedPackages.add( 79 new AppsAsyncLoader.PackageInfo.Builder() 80 .setDaysSinceLastUse(100) 81 .setDaysSinceFirstInstall(101) 82 .setUserId(0) 83 .setPackageName(PACKAGE_NAME) 84 .setSize(1000) 85 .setFlags(0) 86 .build()); 87 88 // By default, no packages are checked, so these will be unchecked. 89 mDeletion.onLoadFinished(null, loadedPackages); 90 mDeletion.setChecked(PACKAGE_NAME, true); 91 92 verify(mFragment).onFreeableChanged(eq(1), eq(1000L)); 93 } 94 95 @Test 96 public void dontCrashWhenClearingAndAppsArentLoaded() { 97 mDeletion.clearFreeableData(mFragment.getActivity()); 98 } 99 100 @Test 101 public void testLoadingState_initiallyIncomplete() { 102 // We should always be in the incomplete state when we start out 103 assertThat(mDeletion.getLoadingStatus()).isEqualTo(LoadingStatus.LOADING); 104 } 105 106 @Test 107 public void testLoadingState_completeEmptyOnNothingFound() { 108 // We should be in EMPTY if nothing is found 109 List<AppsAsyncLoader.PackageInfo> apps = new ArrayList<>(); 110 mDeletion.onLoadFinished(null, apps); 111 assertThat(mDeletion.isEmpty()).isTrue(); 112 } 113 114 @Test 115 public void testLoadingState_completeOnDeletableContentFound() { 116 // We should be in COMPLETE if apps were found 117 List<AppsAsyncLoader.PackageInfo> apps = new ArrayList<>(); 118 apps.add( 119 new AppsAsyncLoader.PackageInfo.Builder() 120 .setDaysSinceLastUse(100) 121 .setDaysSinceFirstInstall(101) 122 .setUserId(0) 123 .setPackageName(PACKAGE_NAME) 124 .setSize(1000) 125 .setFlags(0) 126 .build()); 127 mDeletion.onLoadFinished(null, apps); 128 assertThat(mDeletion.isComplete()).isTrue(); 129 } 130 } 131