blob: b5e7737e6413049a4fb64b67d8410a2f7a29b297 [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.automatic;
import android.os.Bundle;
import android.os.Environment;
import com.android.storagemanager.deletionhelper.DeletionHelperSettings;
import com.android.storagemanager.deletionhelper.DeletionType;
import com.android.storagemanager.deletionhelper.DeletionType.LoadingStatus;
import com.android.storagemanager.deletionhelper.DownloadsDeletionType;
import com.android.storagemanager.deletionhelper.FetchDownloadsLoader.DownloadsResult;
import com.android.storagemanager.testing.TestingConstants;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.io.File;
import java.io.FileWriter;
import java.util.Set;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(RobolectricTestRunner.class)
@Config(manifest= TestingConstants.MANIFEST, sdk=23)
public class DownloadsDeletionTypeTest {
private DownloadsDeletionType mDeletion;
private File mDownloadsDirectory;
@Before
public void setUp() {
mDeletion = new DownloadsDeletionType(RuntimeEnvironment.application, null);
mDownloadsDirectory =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
}
@Test
public void testInitializeWithUncheckedFiles() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
File temp2 = new File(mDownloadsDirectory, "temp2");
String[] filePaths = new String[2];
filePaths[0] = temp.getPath();
filePaths[1] = temp2.getPath();
mDeletion = new DownloadsDeletionType(RuntimeEnvironment.application, filePaths);
assertThat(mDeletion.isChecked(temp)).isFalse();
assertThat(mDeletion.isChecked(temp2)).isFalse();
}
@Test
public void testFetchDownloads() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
File temp2 = new File(mDownloadsDirectory, "temp2");
DownloadsResult result = new DownloadsResult();
result.files.add(temp);
result.files.add(temp2);
mDeletion.onLoadFinished(null, result);
Set<File> fileSet = mDeletion.getFiles();
assertThat(fileSet.contains(temp)).isTrue();
assertThat(fileSet.contains(temp2)).isTrue();
}
@Test
public void testSetChecked() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
DownloadsResult result = new DownloadsResult();
result.files.add(temp);
mDeletion.onLoadFinished(null, result);
// Downloads files are default checked.
assertThat(mDeletion.isChecked(temp)).isTrue();
mDeletion.setFileChecked(temp, false);
assertThat(mDeletion.isChecked(temp)).isFalse();
mDeletion.setFileChecked(temp, true);
assertThat(mDeletion.isChecked(temp)).isTrue();
}
@Test
public void testUncheckedFilesDoNotCountForSize() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
FileWriter fileWriter = new FileWriter(temp);
fileWriter.write("test");
fileWriter.close();
DownloadsResult result = new DownloadsResult();
result.files.add(temp);
mDeletion.onLoadFinished(null, result);
// Downloads files are default checked.
assertThat(mDeletion.isChecked(temp)).isTrue();
assertThat(mDeletion.getFreeableBytes(DeletionHelperSettings.COUNT_CHECKED_ONLY))
.isEqualTo(4);
mDeletion.setFileChecked(temp, false);
assertThat(mDeletion.getFreeableBytes(DeletionHelperSettings.COUNT_CHECKED_ONLY))
.isEqualTo(0);
}
@Test
public void testSaveAndRestoreRemembersUncheckedFiles() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
File temp2 = new File(mDownloadsDirectory, "temp2");
DownloadsResult result = new DownloadsResult();
result.files.add(temp);
result.files.add(temp2);
mDeletion.onLoadFinished(null, result);
mDeletion.setFileChecked(temp, false);
Bundle savedBundle = new Bundle();
mDeletion.onSaveInstanceStateBundle(savedBundle);
mDeletion = new DownloadsDeletionType(RuntimeEnvironment.application,
savedBundle.getStringArray(DownloadsDeletionType.EXTRA_UNCHECKED_DOWNLOADS));
assertThat(mDeletion.isChecked(temp)).isFalse();
assertThat(mDeletion.isChecked(temp2)).isTrue();
}
@Test
public void testCallbackOnFileLoad() throws Exception {
File temp = new File(mDownloadsDirectory, "temp");
File temp2 = new File(mDownloadsDirectory, "temp2");
DownloadsResult result = new DownloadsResult();
result.files.add(temp);
result.files.add(temp2);
result.totalSize = 101L;
DeletionType.FreeableChangedListener mockListener =
mock(DeletionType.FreeableChangedListener.class);
mDeletion.registerFreeableChangedListener(mockListener);
// Calls back immediately when we add a listener with its most current info.
verify(mockListener).onFreeableChanged(eq(0), eq(0L));
// Callback when the load finishes.
mDeletion.onLoadFinished(null, result);
verify(mockListener).onFreeableChanged(eq(2), eq(101L));
}
@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 was found
DownloadsResult result = new DownloadsResult();
mDeletion.onLoadFinished(null, result);
assertThat(mDeletion.isEmpty()).isTrue();
}
@Test
public void testLoadingState_completeOnDeletableContentFound() {
// We should be in COMPLETE if downloads were found
DownloadsResult result = new DownloadsResult();
File temp = new File(mDownloadsDirectory, "temp");
File temp2 = new File(mDownloadsDirectory, "temp2");
result.files.add(temp);
result.files.add(temp2);
mDeletion.onLoadFinished(null, result);
assertThat(mDeletion.isComplete()).isTrue();
}
}