blob: 2345c9d3ee9ce36624aff0ada633108603c8167a [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.storagemanager.deletionhelper;
import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.util.ArrayList;
import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricTestRunner.class)
public class AppDeletionTypeTest {
private static String PACKAGE_NAME = "com.package.package";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private DeletionHelperSettings mFragment;
@Mock private AppDeletionPreferenceGroup mGroup;
private AppDeletionType mDeletion;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mDeletion = new AppDeletionType(mFragment, null, AppsAsyncLoader.NO_THRESHOLD);
mDeletion.registerView(mGroup);
mDeletion.registerFreeableChangedListener(mFragment);
}
@Test
public void uncheckedAppNotReported() {
List<AppsAsyncLoader.PackageInfo> loadedPackages = new ArrayList<>();
loadedPackages.add(
new AppsAsyncLoader.PackageInfo.Builder()
.setDaysSinceLastUse(100)
.setDaysSinceFirstInstall(101)
.setUserId(0)
.setPackageName(PACKAGE_NAME)
.setSize(1000)
.setFlags(0)
.build());
// By default, no packages are checked, so these will be unchecked.
mDeletion.onLoadFinished(null, loadedPackages);
verify(mFragment).onFreeableChanged(eq(1), eq(0L));
}
@Test
public void checkedAppIsReported() {
List<AppsAsyncLoader.PackageInfo> loadedPackages = new ArrayList<>();
loadedPackages.add(
new AppsAsyncLoader.PackageInfo.Builder()
.setDaysSinceLastUse(100)
.setDaysSinceFirstInstall(101)
.setUserId(0)
.setPackageName(PACKAGE_NAME)
.setSize(1000)
.setFlags(0)
.build());
// By default, no packages are checked, so these will be unchecked.
mDeletion.onLoadFinished(null, loadedPackages);
mDeletion.setChecked(PACKAGE_NAME, true);
verify(mFragment).onFreeableChanged(eq(1), eq(1000L));
}
@Test
public void dontCrashWhenClearingAndAppsArentLoaded() {
mDeletion.clearFreeableData(mFragment.getActivity());
}
@Test
public void testLoadingState_initiallyIncomplete() {
// We should always be in the incomplete state when we start out
assertThat(mDeletion.getLoadingStatus()).isEqualTo(LoadingStatus.LOADING);
}
@Test
public void testLoadingState_completeEmptyOnNothingFound() {
// We should be in EMPTY if nothing is found
List<AppsAsyncLoader.PackageInfo> apps = new ArrayList<>();
mDeletion.onLoadFinished(null, apps);
assertThat(mDeletion.isEmpty()).isTrue();
}
@Test
public void testLoadingState_completeOnDeletableContentFound() {
// We should be in COMPLETE if apps were found
List<AppsAsyncLoader.PackageInfo> apps = new ArrayList<>();
apps.add(
new AppsAsyncLoader.PackageInfo.Builder()
.setDaysSinceLastUse(100)
.setDaysSinceFirstInstall(101)
.setUserId(0)
.setPackageName(PACKAGE_NAME)
.setSize(1000)
.setFlags(0)
.build());
mDeletion.onLoadFinished(null, apps);
assertThat(mDeletion.isComplete()).isTrue();
}
}