mirror of
https://github.com/bitwarden/android.git
synced 2026-04-27 03:18:30 -05:00
[PM-21703] Consolidate Robolectric and Compose test base classes (#5210)
This commit is contained in:
@@ -11,7 +11,7 @@ import androidx.compose.ui.test.performTouchInput
|
||||
import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.SharedCodesDisplayState
|
||||
import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VaultDropdownMenuAction
|
||||
import com.bitwarden.authenticator.ui.authenticator.feature.itemlisting.model.VerificationCodeDisplayItem
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.authenticator.ui.platform.manager.permissions.FakePermissionManager
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
@@ -27,7 +27,7 @@ import kotlinx.coroutines.flow.update
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class ItemListingScreenTest : BaseComposeTest() {
|
||||
class ItemListingScreenTest : AuthenticatorComposeTest() {
|
||||
|
||||
private var onNavigateBackCalled = false
|
||||
private var onNavigateToSearchCalled = false
|
||||
@@ -49,7 +49,7 @@ class ItemListingScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
ItemListingScreen(
|
||||
viewModel = viewModel,
|
||||
intentManager = intentManager,
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.bitwarden.authenticator.ui.authenticator.feature.manualcodeentry
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||
import com.bitwarden.authenticator.ui.platform.manager.permissions.FakePermissionManager
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
@@ -17,7 +17,7 @@ import kotlinx.coroutines.flow.update
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class ManualCodeEntryScreenTest : BaseComposeTest() {
|
||||
class ManualCodeEntryScreenTest : AuthenticatorComposeTest() {
|
||||
|
||||
private val mutableStateFlow = MutableStateFlow(DEFAULT_STATE)
|
||||
private val mutableEventFlow = bufferedMutableSharedFlow<ManualCodeEntryEvent>()
|
||||
@@ -33,7 +33,7 @@ class ManualCodeEntryScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
ManualCodeEntryScreen(
|
||||
onNavigateBack = {},
|
||||
onNavigateToQrCodeScreen = {},
|
||||
|
||||
@@ -6,7 +6,7 @@ import androidx.compose.ui.test.hasAnyAncestor
|
||||
import androidx.compose.ui.test.isDialog
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
@@ -19,7 +19,7 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
|
||||
class QrCodeScanScreenTest : BaseComposeTest() {
|
||||
class QrCodeScanScreenTest : AuthenticatorComposeTest() {
|
||||
|
||||
private var onNavigateBackCalled = false
|
||||
private var onNavigateToManualCodeEntryScreenCalled = false
|
||||
@@ -36,7 +36,7 @@ class QrCodeScanScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
QrCodeScanScreen(
|
||||
viewModel = viewModel,
|
||||
qrCodeAnalyzer = qrCodeAnalyzer,
|
||||
|
||||
@@ -4,7 +4,7 @@ import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performScrollTo
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.feature.tutorial.TutorialAction
|
||||
import com.bitwarden.authenticator.ui.platform.feature.tutorial.TutorialEvent
|
||||
import com.bitwarden.authenticator.ui.platform.feature.tutorial.TutorialScreen
|
||||
@@ -20,7 +20,7 @@ import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.jupiter.api.Assertions.assertTrue
|
||||
|
||||
class TutorialScreenTest : BaseComposeTest() {
|
||||
class TutorialScreenTest : AuthenticatorComposeTest() {
|
||||
private var onTutorialFinishedCalled = false
|
||||
private val mutableStateFlow = MutableStateFlow(DEFAULT_STATE)
|
||||
private val mutableEventFlow = bufferedMutableSharedFlow<TutorialEvent>()
|
||||
@@ -31,7 +31,7 @@ class TutorialScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
TutorialScreen(
|
||||
viewModel = viewModel,
|
||||
onTutorialFinished = { onTutorialFinishedCalled = true },
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.bitwarden.authenticator.ui.platform.base
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import com.bitwarden.authenticator.ui.platform.composition.LocalManagerProvider
|
||||
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
|
||||
import com.bitwarden.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||
|
||||
/**
|
||||
* A base class that can be used for performing Compose-layer testing using Robolectric, Compose
|
||||
* Testing, and JUnit 4.
|
||||
*/
|
||||
abstract class AuthenticatorComposeTest : BaseComposeTest() {
|
||||
|
||||
/**
|
||||
* Helper for testing a basic Composable function that only requires a Composable environment
|
||||
* with the [AuthenticatorTheme].
|
||||
*/
|
||||
protected fun setContent(
|
||||
theme: AppTheme = AppTheme.DEFAULT,
|
||||
test: @Composable () -> Unit,
|
||||
) {
|
||||
setTestContent {
|
||||
AuthenticatorTheme(theme = theme) {
|
||||
LocalManagerProvider { test() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
package com.bitwarden.authenticator.ui.platform.base
|
||||
|
||||
import androidx.activity.OnBackPressedDispatcher
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.activity.compose.LocalOnBackPressedDispatcherOwner
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import com.bitwarden.authenticator.ui.platform.theme.AuthenticatorTheme
|
||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||
import org.junit.Rule
|
||||
|
||||
/**
|
||||
* A base class that can be used for performing Compose-layer testing using Robolectric, Compose
|
||||
* Testing, and JUnit 4.
|
||||
*/
|
||||
abstract class BaseComposeTest : BaseRobolectricTest() {
|
||||
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
/**
|
||||
* instance of [OnBackPressedDispatcher] made available if testing using
|
||||
*
|
||||
* [setContentWithBackDispatcher] or [runTestWithTheme]
|
||||
*/
|
||||
var backDispatcher: OnBackPressedDispatcher? = null
|
||||
private set
|
||||
|
||||
/**
|
||||
* Helper for testing a basic Composable function that only requires a Composable environment
|
||||
* with the [BitwardenTheme].
|
||||
*/
|
||||
protected fun runTestWithTheme(
|
||||
theme: AppTheme,
|
||||
test: @Composable () -> Unit,
|
||||
) {
|
||||
composeTestRule.setContent {
|
||||
AuthenticatorTheme(
|
||||
theme = theme,
|
||||
) {
|
||||
backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
|
||||
test()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for testing a basic Composable function that provides access to a
|
||||
* [OnBackPressedDispatcher].
|
||||
*
|
||||
* Use if the [Composable] function being tested uses a [BackHandler]
|
||||
*/
|
||||
protected fun setContentWithBackDispatcher(test: @Composable () -> Unit) {
|
||||
composeTestRule.setContent {
|
||||
backDispatcher = LocalOnBackPressedDispatcherOwner.current?.onBackPressedDispatcher
|
||||
test()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package com.bitwarden.authenticator.ui.platform.base
|
||||
|
||||
import dagger.hilt.android.testing.HiltTestApplication
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.annotation.Config
|
||||
import org.robolectric.shadows.ShadowLog
|
||||
|
||||
/**
|
||||
* A base class that can be used for performing tests that use Robolectric and JUnit 4.
|
||||
*/
|
||||
@Config(
|
||||
application = HiltTestApplication::class,
|
||||
sdk = [Config.NEWEST_SDK],
|
||||
)
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
abstract class BaseRobolectricTest {
|
||||
init {
|
||||
ShadowLog.stream = System.out
|
||||
}
|
||||
}
|
||||
@@ -5,7 +5,7 @@ import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performScrollTo
|
||||
import com.bitwarden.authenticator.data.platform.manager.model.FlagKey
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||
import io.mockk.every
|
||||
import io.mockk.mockk
|
||||
@@ -15,7 +15,7 @@ import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class DebugMenuScreenTest : BaseComposeTest() {
|
||||
class DebugMenuScreenTest : AuthenticatorComposeTest() {
|
||||
private var onNavigateBackCalled = false
|
||||
private val mutableEventFlow = bufferedMutableSharedFlow<DebugMenuEvent>()
|
||||
private val mutableStateFlow = MutableStateFlow(DebugMenuState(featureFlags = emptyMap()))
|
||||
@@ -26,7 +26,7 @@ class DebugMenuScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
DebugMenuScreen(
|
||||
onNavigateBack = { onNavigateBackCalled = true },
|
||||
viewModel = viewModel,
|
||||
|
||||
@@ -12,7 +12,7 @@ import androidx.compose.ui.test.performScrollTo
|
||||
import androidx.core.net.toUri
|
||||
import com.bitwarden.authenticator.BuildConfig
|
||||
import com.bitwarden.authenticator.R
|
||||
import com.bitwarden.authenticator.ui.platform.base.BaseComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||
import com.bitwarden.authenticator.ui.platform.feature.settings.appearance.model.AppLanguage
|
||||
import com.bitwarden.authenticator.ui.platform.feature.settings.data.model.DefaultSaveOption
|
||||
import com.bitwarden.authenticator.ui.platform.manager.biometrics.BiometricsManager
|
||||
@@ -34,7 +34,7 @@ import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class SettingsScreenTest : BaseComposeTest() {
|
||||
class SettingsScreenTest : AuthenticatorComposeTest() {
|
||||
|
||||
private var onNavigateToTutorialCalled = false
|
||||
private var onNaviateToExportCalled = false
|
||||
@@ -56,7 +56,7 @@ class SettingsScreenTest : BaseComposeTest() {
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
composeTestRule.setContent {
|
||||
setContent {
|
||||
SettingsScreen(
|
||||
viewModel = viewModel,
|
||||
biometricsManager = biometricsManager,
|
||||
|
||||
Reference in New Issue
Block a user