Move ComposeContentTestRuleExt to SpaLibTestUtils

Also fix some failed tests.

Bug: 259520506
Test: Unit test
Change-Id: I0eaf00defdad2b90bf4e67476e33a86751488bc0
This commit is contained in:
Chaohui Wang
2022-11-21 19:34:35 +08:00
parent d89bb9d7c8
commit 3d10bebe06
10 changed files with 20 additions and 71 deletions

View File

@@ -30,13 +30,11 @@ android_test {
static_libs: [
"Settings-core",
"SpaLibTestUtils",
"androidx.compose.runtime_runtime",
"androidx.compose.ui_ui-test-junit4",
"androidx.compose.ui_ui-test-manifest",
"androidx.test.ext.junit",
"androidx.test.runner",
"mockito-target-extended-minus-junit4",
"truth-prebuilt",
],
jni_libs: [
"libdexmakerjvmtiagent",

View File

@@ -31,8 +31,8 @@ import androidx.compose.ui.test.onRoot
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.settings.testutils.delay
import com.android.settingslib.applications.AppUtils
import com.android.settingslib.spa.testutils.delay
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.stateIn
import org.junit.After

View File

@@ -30,7 +30,6 @@ import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.printToLog
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
@@ -39,9 +38,9 @@ import com.android.settings.R
import com.android.settings.Utils
import com.android.settings.applications.appinfo.AppInfoDashboardFragment
import com.android.settings.datausage.AppDataUsage
import com.android.settings.testutils.waitUntilExists
import com.android.settingslib.net.NetworkCycleDataForUid
import com.android.settingslib.net.NetworkCycleDataForUidLoader
import com.android.settingslib.spa.testutils.waitUntilExists
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -134,9 +133,7 @@ class AppDataUsagePreferenceTest {
setContent()
composeTestRule.onRoot().printToLog("AAA")
composeTestRule.onNodeWithText(context.getString(R.string.no_data_usage))
.assertIsDisplayed()
composeTestRule.waitUntilExists(hasText(context.getString(R.string.no_data_usage)))
}
@Test

View File

@@ -61,7 +61,7 @@ class AppDisableButtonTest {
private lateinit var devicePolicyManager: DevicePolicyManager
private val fakeFeatureFactory = FakeFeatureFactory()
private val appFeatureProvider = fakeFeatureFactory.applicationFeatureProvider
private val appFeatureProvider = fakeFeatureFactory.mockApplicationFeatureProvider
private lateinit var appDisableButton: AppDisableButton

View File

@@ -38,8 +38,8 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession
import com.android.settings.R
import com.android.settings.Utils
import com.android.settings.applications.AppStoreUtil
import com.android.settings.testutils.waitUntilExists
import com.android.settingslib.applications.AppUtils
import com.android.settingslib.spa.testutils.waitUntilExists
import com.android.settingslib.spaprivileged.framework.common.userManager
import com.android.settingslib.spaprivileged.model.app.userHandle
import org.junit.After

View File

@@ -29,18 +29,13 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsEnabled
import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.assertIsNotEnabled
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.onRoot
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.printToLog
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.R
import com.android.settings.testutils.waitUntilExists
import com.android.settingslib.applications.AppUtils
import com.android.settingslib.spaprivileged.model.app.userHandle
import com.android.settingslib.spaprivileged.model.app.userId
import com.google.common.truth.Truth.assertThat
@@ -49,7 +44,6 @@ import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers
import org.mockito.Mock
import org.mockito.Mockito.any
import org.mockito.Mockito.eq

View File

@@ -63,7 +63,7 @@ class AppTimeSpentPreferenceTest {
private lateinit var packageManager: PackageManager
private val fakeFeatureFactory = FakeFeatureFactory()
private val appFeatureProvider = fakeFeatureFactory.applicationFeatureProvider
private val appFeatureProvider = fakeFeatureFactory.mockApplicationFeatureProvider
@Before
fun setUp() {

View File

@@ -24,10 +24,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertIsEnabled
import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.filterToOne
import androidx.compose.ui.test.hasAnyAncestor
import androidx.compose.ui.test.hasText
import androidx.compose.ui.test.isDialog
import androidx.compose.ui.test.junit4.createComposeRule
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.onRoot
@@ -37,7 +33,8 @@ import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
import com.android.settings.R
import com.android.settings.Utils
import com.android.settings.testutils.delay
import com.android.settingslib.spa.testutils.delay
import com.android.settingslib.spa.testutils.onDialogText
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -141,18 +138,14 @@ class InstantAppDomainsPreferenceTest {
composeTestRule.onRoot().performClick()
composeTestRule.delay()
assertDialogHasText(context.getString(R.string.app_launch_supported_domain_urls_title))
assertDialogHasText("abc")
assertDialogHasText("def")
composeTestRule.onDialogText(
context.getString(R.string.app_launch_supported_domain_urls_title)
).assertIsDisplayed()
composeTestRule.onDialogText("abc").assertIsDisplayed()
composeTestRule.onDialogText("def").assertIsDisplayed()
}
private fun assertDialogHasText(text: String) {
composeTestRule.onAllNodes(hasAnyAncestor(isDialog()))
.filterToOne(hasText(text))
.assertIsDisplayed()
}
private fun setContent(app:ApplicationInfo = INSTANT_APP) {
private fun setContent(app: ApplicationInfo = INSTANT_APP) {
composeTestRule.setContent {
CompositionLocalProvider(LocalContext provides context) {
InstantAppDomainsPreference(app)

View File

@@ -1,33 +0,0 @@
/*
* Copyright (C) 2022 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.settings.testutils
import androidx.compose.ui.test.ComposeTimeoutException
import androidx.compose.ui.test.SemanticsMatcher
import androidx.compose.ui.test.junit4.ComposeContentTestRule
/** Blocks until the found a semantics node that match the given condition. */
fun ComposeContentTestRule.waitUntilExists(matcher: SemanticsMatcher) = waitUntil {
onAllNodes(matcher).fetchSemanticsNodes().isNotEmpty()
}
/** Blocks until the timeout is reached. */
fun ComposeContentTestRule.delay(timeoutMillis: Long = 1_000) = try {
waitUntil(timeoutMillis) { false }
} catch (_: ComposeTimeoutException) {
// Expected
}

View File

@@ -51,7 +51,9 @@ import org.mockito.Mockito.mock
class FakeFeatureFactory : FeatureFactory() {
val applicationFeatureProvider: ApplicationFeatureProvider =
private val mockMetricsFeatureProvider: MetricsFeatureProvider =
mock(MetricsFeatureProvider::class.java)
val mockApplicationFeatureProvider: ApplicationFeatureProvider =
mock(ApplicationFeatureProvider::class.java)
init {
@@ -70,9 +72,7 @@ class FakeFeatureFactory : FeatureFactory() {
TODO("Not yet implemented")
}
override fun getMetricsFeatureProvider(): MetricsFeatureProvider {
TODO("Not yet implemented")
}
override fun getMetricsFeatureProvider(): MetricsFeatureProvider = mockMetricsFeatureProvider
override fun getPowerUsageFeatureProvider(context: Context?): PowerUsageFeatureProvider {
TODO("Not yet implemented")
@@ -96,7 +96,7 @@ class FakeFeatureFactory : FeatureFactory() {
TODO("Not yet implemented")
}
override fun getApplicationFeatureProvider(context: Context?) = applicationFeatureProvider
override fun getApplicationFeatureProvider(context: Context?) = mockApplicationFeatureProvider
override fun getLocaleFeatureProvider(): LocaleFeatureProvider {
TODO("Not yet implemented")