Home | History | Annotate | Download | only in deletionhelper
      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