• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of 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,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.spa.app.appinfo
18 
19 import android.app.usage.StorageStats
20 import android.app.usage.StorageStatsManager
21 import android.content.Context
22 import android.content.pm.ApplicationInfo
23 import androidx.compose.runtime.CompositionLocalProvider
24 import androidx.compose.ui.platform.LocalContext
25 import androidx.compose.ui.test.assertIsDisplayed
26 import androidx.compose.ui.test.assertIsNotDisplayed
27 import androidx.compose.ui.test.hasText
28 import androidx.compose.ui.test.junit4.createComposeRule
29 import androidx.compose.ui.test.onNodeWithText
30 import androidx.compose.ui.test.onRoot
31 import androidx.test.core.app.ApplicationProvider
32 import androidx.test.ext.junit.runners.AndroidJUnit4
33 import com.android.settings.R
34 import com.android.settingslib.spa.testutils.waitUntilExists
35 import com.android.settingslib.spaprivileged.framework.common.storageStatsManager
36 import java.util.UUID
37 import org.junit.Before
38 import org.junit.Rule
39 import org.junit.Test
40 import org.junit.runner.RunWith
41 import org.mockito.Mock
42 import org.mockito.Spy
43 import org.mockito.junit.MockitoJUnit
44 import org.mockito.junit.MockitoRule
45 import org.mockito.Mockito.any
46 import org.mockito.Mockito.eq
47 import org.mockito.Mockito.`when` as whenever
48 
49 @RunWith(AndroidJUnit4::class)
50 class AppStoragePreferenceTest {
51     @get:Rule
52     val mockito: MockitoRule = MockitoJUnit.rule()
53 
54     @get:Rule
55     val composeTestRule = createComposeRule()
56 
57     @Spy
58     private val context: Context = ApplicationProvider.getApplicationContext()
59 
60     @Mock
61     private lateinit var storageStatsManager: StorageStatsManager
62 
63     @Before
setUpnull64     fun setUp() {
65         whenever(context.storageStatsManager).thenReturn(storageStatsManager)
66         whenever(
67             storageStatsManager.queryStatsForPackage(eq(STORAGE_UUID), eq(PACKAGE_NAME), any())
68         ).thenReturn(STATS)
69     }
70 
71     @Test
notInstalledApp_notDisplayednull72     fun notInstalledApp_notDisplayed() {
73         val notInstalledApp = ApplicationInfo()
74 
75         setContent(notInstalledApp)
76 
77         composeTestRule.onRoot().assertIsNotDisplayed()
78     }
79 
80     @Test
internalApp_displayednull81     fun internalApp_displayed() {
82         val internalApp = ApplicationInfo().apply {
83             packageName = PACKAGE_NAME
84             flags = ApplicationInfo.FLAG_INSTALLED
85             storageUuid = STORAGE_UUID
86         }
87 
88         setContent(internalApp)
89 
90         composeTestRule.onNodeWithText(context.getString(R.string.storage_settings_for_app))
91             .assertIsDisplayed()
92         composeTestRule.waitUntilExists(hasText("120 B used in internal storage"))
93     }
94 
95     @Test
externalApp_displayednull96     fun externalApp_displayed() {
97         val externalApp = ApplicationInfo().apply {
98             packageName = PACKAGE_NAME
99             flags = ApplicationInfo.FLAG_INSTALLED or ApplicationInfo.FLAG_EXTERNAL_STORAGE
100             storageUuid = STORAGE_UUID
101         }
102 
103         setContent(externalApp)
104 
105         composeTestRule.onNodeWithText(context.getString(R.string.storage_settings_for_app))
106             .assertIsDisplayed()
107         composeTestRule.waitUntilExists(hasText("120 B used in external storage"))
108     }
109 
setContentnull110     private fun setContent(app: ApplicationInfo) {
111         composeTestRule.setContent {
112             CompositionLocalProvider(LocalContext provides context) {
113                 AppStoragePreference(app)
114             }
115         }
116     }
117 
118     companion object {
119         private const val PACKAGE_NAME = "package name"
120         private val STORAGE_UUID = UUID.randomUUID()
121 
<lambda>null122         private val STATS = StorageStats().apply {
123             codeBytes = 100
124             dataBytes = 20
125             cacheBytes = 3
126         }
127     }
128 }
129