Refactor PrintSettings (2/n)

The "Add service" button.

Bug: 320076351
Flag: com.android.settings.flags.refactor_print_settings
Test: manual
Test: unit test
Change-Id: I624293edcbfe9ef8388d48759611aeac522352a4
This commit is contained in:
Chaohui Wang
2024-06-17 17:56:45 +08:00
parent 3576f4840d
commit 9e88efecdf
2 changed files with 149 additions and 60 deletions

View File

@@ -17,6 +17,7 @@
package com.android.settings.print
import android.content.Context
import android.net.Uri
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.test.isDisplayed
@@ -31,7 +32,9 @@ import com.android.settings.print.PrintRepository.PrintServiceDisplayInfo
import com.android.settings.print.PrintSettingsFragment.EXTRA_CHECKED
import com.android.settings.print.PrintSettingsFragment.EXTRA_SERVICE_COMPONENT_NAME
import com.android.settings.print.PrintSettingsFragment.EXTRA_TITLE
import com.android.settings.print.PrintSettingsPageProvider.AddPrintService
import com.android.settings.print.PrintSettingsPageProvider.PrintService
import kotlinx.coroutines.flow.flowOf
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -44,35 +47,32 @@ import org.mockito.kotlin.whenever
@RunWith(AndroidJUnit4::class)
class PrintSettingsPageProviderTest {
@get:Rule
val composeTestRule = createComposeRule()
@get:Rule val composeTestRule = createComposeRule()
private val context: Context = spy(ApplicationProvider.getApplicationContext()) {
doNothing().whenever(mock).startActivity(any())
}
private val context: Context =
spy(ApplicationProvider.getApplicationContext()) {
doNothing().whenever(mock).startActivity(any())
}
private val displayInfo = PrintServiceDisplayInfo(
title = TITLE,
isEnabled = true,
summary = SUMMARY,
icon = context.getDrawable(R.drawable.ic_settings_print)!!,
componentName = "ComponentName",
)
private val displayInfo =
PrintServiceDisplayInfo(
title = TITLE,
isEnabled = true,
summary = SUMMARY,
icon = context.getDrawable(R.drawable.ic_settings_print)!!,
componentName = "ComponentName",
)
@Test
fun printService_titleDisplayed() {
composeTestRule.setContent {
PrintService(displayInfo)
}
composeTestRule.setContent { PrintService(displayInfo) }
composeTestRule.onNodeWithText(TITLE).isDisplayed()
}
@Test
fun printService_summaryDisplayed() {
composeTestRule.setContent {
PrintService(displayInfo)
}
composeTestRule.setContent { PrintService(displayInfo) }
composeTestRule.onNodeWithText(SUMMARY).isDisplayed()
}
@@ -80,25 +80,43 @@ class PrintSettingsPageProviderTest {
@Test
fun printService_onClick() {
composeTestRule.setContent {
CompositionLocalProvider(LocalContext provides context) {
PrintService(displayInfo)
}
CompositionLocalProvider(LocalContext provides context) { PrintService(displayInfo) }
}
composeTestRule.onNodeWithText(TITLE).performClick()
verify(context).startActivity(argThat {
val fragment = getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)
val arguments = getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)!!
fragment == PrintServiceSettingsFragment::class.qualifiedName &&
arguments.getBoolean(EXTRA_CHECKED) == displayInfo.isEnabled &&
arguments.getString(EXTRA_TITLE) == displayInfo.title &&
arguments.getString(EXTRA_SERVICE_COMPONENT_NAME) == displayInfo.componentName
})
verify(context)
.startActivity(
argThat {
val fragment = getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)
val arguments = getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)!!
fragment == PrintServiceSettingsFragment::class.qualifiedName &&
arguments.getBoolean(EXTRA_CHECKED) == displayInfo.isEnabled &&
arguments.getString(EXTRA_TITLE) == displayInfo.title &&
arguments.getString(EXTRA_SERVICE_COMPONENT_NAME) ==
displayInfo.componentName
}
)
}
@Test
fun addPrintService_onClick() {
composeTestRule.setContent {
CompositionLocalProvider(LocalContext provides context) {
AddPrintService(flowOf(SEARCH_URI))
}
}
composeTestRule
.onNodeWithText(context.getString(R.string.print_menu_item_add_service))
.performClick()
verify(context).startActivity(argThat { data == Uri.parse(SEARCH_URI) })
}
private companion object {
const val TITLE = "Title"
const val SUMMARY = "Summary"
const val SEARCH_URI = "search.uri"
}
}