From 3d10bebe06378be8c5ccd5a7dc721ff0b5fc88d2 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Mon, 21 Nov 2022 19:34:35 +0800 Subject: [PATCH] Move ComposeContentTestRuleExt to SpaLibTestUtils Also fix some failed tests. Bug: 259520506 Test: Unit test Change-Id: I0eaf00defdad2b90bf4e67476e33a86751488bc0 --- tests/spa_unit/Android.bp | 4 +-- .../spa/app/appinfo/AppButtonsTest.kt | 2 +- .../app/appinfo/AppDataUsagePreferenceTest.kt | 7 ++-- .../spa/app/appinfo/AppDisableButtonTest.kt | 2 +- .../appinfo/AppInstallerInfoPreferenceTest.kt | 2 +- .../app/appinfo/AppSettingsPreferenceTest.kt | 6 ---- .../app/appinfo/AppTimeSpentPreferenceTest.kt | 2 +- .../InstantAppDomainsPreferenceTest.kt | 23 +++++-------- .../testutils/ComposeContentTestRuleExt.kt | 33 ------------------- .../settings/testutils/FakeFeatureFactory.kt | 10 +++--- 10 files changed, 20 insertions(+), 71 deletions(-) delete mode 100644 tests/spa_unit/src/com/android/settings/testutils/ComposeContentTestRuleExt.kt diff --git a/tests/spa_unit/Android.bp b/tests/spa_unit/Android.bp index da334116004..0bd561348ef 100644 --- a/tests/spa_unit/Android.bp +++ b/tests/spa_unit/Android.bp @@ -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", diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt index d71b4eeceb4..0ca4f67f800 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppButtonsTest.kt @@ -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 diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDataUsagePreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDataUsagePreferenceTest.kt index 174f5085864..b6816e65242 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDataUsagePreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDataUsagePreferenceTest.kt @@ -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 diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDisableButtonTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDisableButtonTest.kt index f35810ff858..beb6abc592d 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDisableButtonTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppDisableButtonTest.kt @@ -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 diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt index b66967a96c2..53a18683a7d 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppInstallerInfoPreferenceTest.kt @@ -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 diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppSettingsPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppSettingsPreferenceTest.kt index 1184ee7270a..a1fb367d1df 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppSettingsPreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppSettingsPreferenceTest.kt @@ -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 diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppTimeSpentPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppTimeSpentPreferenceTest.kt index e3fcdd904ae..b2ff4f2e8a8 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppTimeSpentPreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppTimeSpentPreferenceTest.kt @@ -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() { diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/InstantAppDomainsPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/InstantAppDomainsPreferenceTest.kt index 9782817f742..1a78c4974e3 100644 --- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/InstantAppDomainsPreferenceTest.kt +++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/InstantAppDomainsPreferenceTest.kt @@ -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) diff --git a/tests/spa_unit/src/com/android/settings/testutils/ComposeContentTestRuleExt.kt b/tests/spa_unit/src/com/android/settings/testutils/ComposeContentTestRuleExt.kt deleted file mode 100644 index 82df9cff4dd..00000000000 --- a/tests/spa_unit/src/com/android/settings/testutils/ComposeContentTestRuleExt.kt +++ /dev/null @@ -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 -} diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt index 054b4150e8e..a544f533dbe 100644 --- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt +++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt @@ -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")