1226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi/*
2226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * Copyright (C) 2017 The Android Open Source Project
3226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi *
4226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * use this file except in compliance with the License. You may obtain a copy of
6226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * the License at
7226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi *
8226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0
9226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi *
10226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * Unless required by applicable law or agreed to in writing, software
11226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * License for the specific language governing permissions and limitations under
14226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi * the License.
15226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi */
16226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
17226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishipackage com.android.storagemanager.deletionhelper;
18226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
19226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport static com.google.common.truth.Truth.assertThat;
20226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
21226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport static org.mockito.Mockito.mock;
22226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport static org.mockito.Mockito.spy;
23226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport static org.mockito.Mockito.when;
24226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
25226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport android.content.Context;
26226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport android.graphics.Bitmap;
27226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport android.graphics.drawable.BitmapDrawable;
28226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport android.support.v7.preference.PreferenceManager;
29226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
30226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport com.android.storagemanager.testing.StorageManagerRobolectricTestRunner;
31226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport com.android.storagemanager.testing.TestingConstants;
32226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport com.android.storagemanager.utils.IconProvider;
33226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
34226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.junit.Before;
35226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.junit.Rule;
36226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.junit.Test;
37226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.junit.rules.TemporaryFolder;
38226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.junit.runner.RunWith;
39226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.mockito.Mock;
40226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.mockito.MockitoAnnotations;
41226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.robolectric.RuntimeEnvironment;
42226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport org.robolectric.annotation.Config;
43226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
44226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishiimport java.io.File;
45226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
46226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi@RunWith(StorageManagerRobolectricTestRunner.class)
47226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi@Config(manifest = TestingConstants.MANIFEST, sdk = TestingConstants.SDK_VERSION)
48226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishipublic class DownloadsDeletionPreferenceGroupTest {
49226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
50226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
51226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    @Mock private IconProvider mIconProvider;
52226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
53226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    private Context mContext;
54226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    private DownloadsDeletionPreferenceGroup mGroup;
55226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    private DownloadsDeletionType mType;
56226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    private File mTempDir;
57226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
58226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    @Before
59226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    public void setUp() throws Exception {
60226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        MockitoAnnotations.initMocks(this);
61226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mContext = RuntimeEnvironment.application;
62226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
63226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mGroup = spy(new DownloadsDeletionPreferenceGroup(mContext));
64226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        final PreferenceManager preferenceManager = mock(PreferenceManager.class);
65226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        when(mGroup.getPreferenceManager()).thenReturn(preferenceManager);
66226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mType = new DownloadsDeletionType(mContext, new String[0]);
67226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
68226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mTempDir = temporaryFolder.newFolder();
69226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
70226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mGroup.registerDeletionService(mType);
71226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mGroup.injectIconProvider(mIconProvider);
72226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    }
73226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
74226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    @Test
75226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    public void thumbnailsArePopulated() {
76226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        FetchDownloadsLoader.DownloadsResult result = new FetchDownloadsLoader.DownloadsResult();
77226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        File imageFile = new File(mTempDir, "test.bmp");
78226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        result.files.add(imageFile);
79226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        result.thumbnails.put(imageFile, Bitmap.createBitmap(1, 1, Bitmap.Config.RGB_565));
80226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        File nonImageFile = new File(mTempDir, "test.txt");
81226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        result.files.add(nonImageFile);
82226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
83226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        mType.onLoadFinished(null, result);
84226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi
85226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        assertThat(mGroup.getPreferenceCount()).isEqualTo(2);
86226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        assertThat(mGroup.getPreference(0).getIcon() instanceof BitmapDrawable).isTrue();
87226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi        assertThat(mGroup.getPreference(1).getIcon() instanceof BitmapDrawable).isFalse();
88226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi    }
89226b81d78ef325e18e6cb202856040d34cda0058Daniel Nishi}
90