diff --git a/app/build.gradle b/app/build.gradle index 21b4716c0..ba6c4155c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -237,18 +237,6 @@ android { } -// ------------------------------------------------------------------------------------------------- -// Set up kotlin-allopen plugin for writing tests -// ------------------------------------------------------------------------------------------------- - -boolean hasTest = gradle.startParameter.taskNames.find { it.contains("test") || it.contains("Test") } != null -if (hasTest) { - apply plugin: 'kotlin-allopen' - allOpen { - annotation("org.mozilla.fenix.utils.OpenClass") - } -} - android.applicationVariants.all { variant -> // ------------------------------------------------------------------------------------------------- diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt index 27b3b5180..1615ec2c0 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt @@ -379,8 +379,9 @@ abstract class BaseBrowserFragment : ) _browserToolbarView = BrowserToolbarView( + context = context, container = binding.browserLayout, - toolbarPosition = context.settings().toolbarPosition, + settings = context.settings(), interactor = browserToolbarInteractor, customTabSession = customTabSessionId?.let { store.state.findCustomTab(it) }, lifecycleOwner = viewLifecycleOwner diff --git a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt index c61785669..3bb5758a1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Analytics.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Analytics.kt @@ -26,7 +26,6 @@ import org.mozilla.fenix.experiments.NimbusFeatures import org.mozilla.fenix.experiments.createNimbus import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.lazyMonitored -import org.mozilla.fenix.utils.Mockable import org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID import org.mozilla.geckoview.BuildConfig.MOZ_APP_VENDOR import org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION @@ -35,7 +34,6 @@ import org.mozilla.geckoview.BuildConfig.MOZ_UPDATE_CHANNEL /** * Component group for all functionality related to analytics e.g. crash reporting and telemetry. */ -@Mockable class Analytics( private val context: Context ) { diff --git a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt index be3dd348b..0360ab69d 100644 --- a/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt +++ b/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -45,14 +45,12 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.sync.SyncedTabsIntegration -import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.Settings /** * Component group for background services. These are the components that need to be accessed from within a * background worker. */ -@Mockable @Suppress("LongParameterList") class BackgroundServices( private val context: Context, diff --git a/app/src/main/java/org/mozilla/fenix/components/Components.kt b/app/src/main/java/org/mozilla/fenix/components/Components.kt index a5ca68552..51327822e 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Components.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Components.kt @@ -35,7 +35,6 @@ import org.mozilla.fenix.perf.StartupStateProvider import org.mozilla.fenix.perf.StrictModeManager import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.utils.ClipboardHandler -import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.wifi.WifiConnectionMonitor import java.util.concurrent.TimeUnit @@ -49,7 +48,6 @@ private const val AMO_COLLECTION_MAX_CACHE_AGE = 2 * 24 * 60L // Two days in min * Note: these aren't just "components" from "android-components": they're any "component" that * can be considered a building block of our app. */ -@Mockable class Components(private val context: Context) { val backgroundServices by lazyMonitored { BackgroundServices( diff --git a/app/src/main/java/org/mozilla/fenix/components/Core.kt b/app/src/main/java/org/mozilla/fenix/components/Core.kt index 75dd75692..35761acac 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Core.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Core.kt @@ -83,7 +83,6 @@ import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.advanced.getSelectedLocale import org.mozilla.fenix.telemetry.TelemetryMiddleware -import org.mozilla.fenix.utils.Mockable import org.mozilla.fenix.utils.getUndoDelay import org.mozilla.geckoview.GeckoRuntime import java.util.concurrent.TimeUnit @@ -91,7 +90,6 @@ import java.util.concurrent.TimeUnit /** * Component group for all core browser functionality. */ -@Mockable @Suppress("LargeClass") class Core( private val context: Context, diff --git a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt index 4b8442458..1f1d34182 100644 --- a/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt +++ b/app/src/main/java/org/mozilla/fenix/components/FenixSnackbar.kt @@ -22,9 +22,7 @@ import org.mozilla.fenix.R import org.mozilla.fenix.databinding.FenixSnackbarBinding import org.mozilla.fenix.ext.increaseTapArea import org.mozilla.fenix.ext.settings -import org.mozilla.fenix.utils.Mockable -@Mockable class FenixSnackbar private constructor( parent: ViewGroup, private val binding: FenixSnackbarBinding, diff --git a/app/src/main/java/org/mozilla/fenix/components/FindInPageIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/FindInPageIntegration.kt index 642e65a41..c99cecf05 100644 --- a/app/src/main/java/org/mozilla/fenix/components/FindInPageIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/components/FindInPageIntegration.kt @@ -17,7 +17,6 @@ import mozilla.components.feature.findinpage.FindInPageFeature import mozilla.components.feature.findinpage.view.FindInPageView import mozilla.components.support.base.feature.LifecycleAwareFeature import org.mozilla.fenix.components.FindInPageIntegration.ToolbarInfo -import org.mozilla.fenix.utils.Mockable /** * BrowserFragment delegate to handle all layout updates needed to show or hide the find in page bar. @@ -28,7 +27,6 @@ import org.mozilla.fenix.utils.Mockable * to suit the find in page bar. * @param toolbarInfo [ToolbarInfo] used to configure the [BrowserToolbar] while the find in page bar is shown. */ -@Mockable class FindInPageIntegration( private val store: BrowserStore, private val sessionId: String? = null, diff --git a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt index 9dfef2913..a14c1a9ed 100644 --- a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt +++ b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt @@ -22,12 +22,10 @@ import mozilla.components.support.migration.state.MigrationStore import org.mozilla.fenix.customtabs.FennecWebAppIntentProcessor import org.mozilla.fenix.home.intent.FennecBookmarkShortcutsIntentProcessor import org.mozilla.fenix.perf.lazyMonitored -import org.mozilla.fenix.utils.Mockable /** * Component group for miscellaneous components. */ -@Mockable @Suppress("LongParameterList") class IntentProcessors( private val context: Context, diff --git a/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt b/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt index c9d1d3e38..426eab91c 100644 --- a/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/PermissionStorage.kt @@ -12,10 +12,8 @@ import kotlinx.coroutines.withContext import mozilla.components.concept.engine.permission.SitePermissions import mozilla.components.concept.engine.permission.SitePermissionsStorage import org.mozilla.fenix.ext.components -import org.mozilla.fenix.utils.Mockable import kotlin.coroutines.CoroutineContext -@Mockable class PermissionStorage( private val context: Context, @VisibleForTesting internal val dispatcher: CoroutineContext = Dispatchers.IO, diff --git a/app/src/main/java/org/mozilla/fenix/components/Services.kt b/app/src/main/java/org/mozilla/fenix/components/Services.kt index d8922d0b4..fcc0392d1 100644 --- a/app/src/main/java/org/mozilla/fenix/components/Services.kt +++ b/app/src/main/java/org/mozilla/fenix/components/Services.kt @@ -16,12 +16,10 @@ import org.mozilla.fenix.R import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.perf.lazyMonitored import org.mozilla.fenix.settings.SupportUtils -import org.mozilla.fenix.utils.Mockable /** * Component group which encapsulates foreground-friendly services. */ -@Mockable class Services( private val context: Context, private val accountManager: FxaAccountManager diff --git a/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt b/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt index 4950feb9e..20d669131 100644 --- a/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt +++ b/app/src/main/java/org/mozilla/fenix/components/TabCollectionStorage.kt @@ -23,9 +23,7 @@ import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.toShortUrl import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder import org.mozilla.fenix.perf.StrictModeManager -import org.mozilla.fenix.utils.Mockable -@Mockable class TabCollectionStorage( private val context: Context, strictMode: StrictModeManager, diff --git a/app/src/main/java/org/mozilla/fenix/components/UseCases.kt b/app/src/main/java/org/mozilla/fenix/components/UseCases.kt index efd7bbd52..8dd7b6802 100644 --- a/app/src/main/java/org/mozilla/fenix/components/UseCases.kt +++ b/app/src/main/java/org/mozilla/fenix/components/UseCases.kt @@ -25,13 +25,11 @@ import mozilla.components.feature.top.sites.TopSitesUseCases import mozilla.components.support.locale.LocaleUseCases import org.mozilla.fenix.components.bookmarks.BookmarksUseCase import org.mozilla.fenix.perf.lazyMonitored -import org.mozilla.fenix.utils.Mockable /** * Component group for all use cases. Use cases are provided by feature * modules and can be triggered by UI interactions. */ -@Mockable @Suppress("LongParameterList") class UseCases( private val context: Context, diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt index 154e71739..08660015c 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarView.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.components.toolbar +import android.content.Context import android.graphics.Color import android.view.HapticFeedbackConstants import android.view.LayoutInflater @@ -28,30 +29,29 @@ import org.mozilla.fenix.customtabs.CustomTabToolbarIntegration import org.mozilla.fenix.customtabs.CustomTabToolbarMenu import org.mozilla.fenix.ext.bookmarkStorage import org.mozilla.fenix.ext.components -import org.mozilla.fenix.ext.settings import org.mozilla.fenix.theme.ThemeManager +import org.mozilla.fenix.utils.Settings import org.mozilla.fenix.utils.ToolbarPopupWindow import java.lang.ref.WeakReference import mozilla.components.browser.toolbar.behavior.ToolbarPosition as MozacToolbarPosition @SuppressWarnings("LargeClass") class BrowserToolbarView( - private val container: ViewGroup, - private val toolbarPosition: ToolbarPosition, + context: Context, + container: ViewGroup, + private val settings: Settings, private val interactor: BrowserToolbarInteractor, private val customTabSession: CustomTabSessionState?, private val lifecycleOwner: LifecycleOwner ) { - private val settings = container.context.settings() - @LayoutRes private val toolbarLayout = when (settings.toolbarPosition) { ToolbarPosition.BOTTOM -> R.layout.component_bottom_browser_toolbar ToolbarPosition.TOP -> R.layout.component_browser_top_toolbar } - private val layout = LayoutInflater.from(container.context) + private val layout = LayoutInflater.from(context) .inflate(toolbarLayout, container, true) @VisibleForTesting @@ -78,7 +78,7 @@ class BrowserToolbarView( true } - with(container.context) { + with(context) { val isPinningSupported = components.useCases.webAppUseCases.isPinningSupported() view.apply { @@ -94,22 +94,22 @@ class BrowserToolbarView( false } - display.progressGravity = when (toolbarPosition) { + display.progressGravity = when (settings.toolbarPosition) { ToolbarPosition.BOTTOM -> DisplayToolbar.Gravity.TOP ToolbarPosition.TOP -> DisplayToolbar.Gravity.BOTTOM } val primaryTextColor = ContextCompat.getColor( - container.context, - ThemeManager.resolveAttribute(R.attr.primaryText, container.context) + context, + ThemeManager.resolveAttribute(R.attr.primaryText, context) ) val secondaryTextColor = ContextCompat.getColor( - container.context, - ThemeManager.resolveAttribute(R.attr.secondaryText, container.context) + context, + ThemeManager.resolveAttribute(R.attr.secondaryText, context) ) val separatorColor = ContextCompat.getColor( - container.context, - ThemeManager.resolveAttribute(R.attr.toolbarDivider, container.context) + context, + ThemeManager.resolveAttribute(R.attr.toolbarDivider, context) ) display.urlFormatter = { url -> URLStringUtils.toDisplayUrl(url) } @@ -137,7 +137,7 @@ class BrowserToolbarView( context = this, store = components.core.store, sessionId = customTabSession?.id, - shouldReverseItems = toolbarPosition == ToolbarPosition.TOP, + shouldReverseItems = settings.toolbarPosition == ToolbarPosition.TOP, onItemTapped = { it.performHapticIfNeeded(view) interactor.onBrowserToolbarMenuItemTapped(it) diff --git a/app/src/main/java/org/mozilla/fenix/perf/StrictModeManager.kt b/app/src/main/java/org/mozilla/fenix/perf/StrictModeManager.kt index 1068f40eb..46845cba8 100644 --- a/app/src/main/java/org/mozilla/fenix/perf/StrictModeManager.kt +++ b/app/src/main/java/org/mozilla/fenix/perf/StrictModeManager.kt @@ -21,7 +21,6 @@ import mozilla.components.support.ktx.android.os.resetAfter import org.mozilla.fenix.Config import org.mozilla.fenix.components.Components import org.mozilla.fenix.utils.ManufacturerCodes -import org.mozilla.fenix.utils.Mockable import java.util.concurrent.Executors import java.util.concurrent.atomic.AtomicLong @@ -33,8 +32,7 @@ private val mainLooper = Looper.getMainLooper() /** * Manages strict mode settings for the application. */ -@Mockable -class StrictModeManager( +open class StrictModeManager( config: Config, // Ideally, we'd pass in a more specific value but there is a circular dependency: StrictMode @@ -112,7 +110,7 @@ class StrictModeManager( * * @return the value returned by [functionBlock]. */ - fun resetAfter(policy: StrictMode.ThreadPolicy, functionBlock: () -> R): R { + open fun resetAfter(policy: StrictMode.ThreadPolicy, functionBlock: () -> R): R { fun instrumentedFunctionBlock(): R { val startProfilerTime = components.core.engine.profiler?.getProfilerTime() diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index 44d819ef2..95c5caf56 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -190,6 +190,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { toolbarView = ToolbarView( requireContext(), + requireContext().settings(), interactor, historyStorageProvider(), isPrivate, diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt index 3bee9bc61..06007afe8 100644 --- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt +++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt @@ -19,8 +19,8 @@ import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.ktx.android.content.res.resolveAttribute import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.R -import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.SearchFragmentState +import org.mozilla.fenix.utils.Settings /** * Interface for the Toolbar Interactor. This interface is implemented by objects that want @@ -53,6 +53,7 @@ interface ToolbarInteractor { @Suppress("LongParameterList") class ToolbarView( private val context: Context, + settings: Settings, private val interactor: ToolbarInteractor, private val historyStorage: HistoryStorage?, private val isPrivate: Boolean, @@ -115,7 +116,7 @@ class ToolbarView( val engineForSpeculativeConnects = if (!isPrivate) engine else null - if (context.settings().shouldAutocompleteInAwesomebar) { + if (settings.shouldAutocompleteInAwesomebar) { ToolbarAutocompleteFeature( view, engineForSpeculativeConnects diff --git a/app/src/main/java/org/mozilla/fenix/utils/OpenClass.kt b/app/src/main/java/org/mozilla/fenix/utils/OpenClass.kt deleted file mode 100644 index bcb6f59c6..000000000 --- a/app/src/main/java/org/mozilla/fenix/utils/OpenClass.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.utils - -// Annotations for testing. - -/** - * Annotate a class with [OpenClass] to open a class for mocking purposes while keeping it final in release builds - */ -@Target(AnnotationTarget.ANNOTATION_CLASS) -annotation class OpenClass - -/** - * Annotate a class with [Mockable] to make it extensible in debug builds - */ -@OpenClass -@Target(AnnotationTarget.CLASS) -annotation class Mockable diff --git a/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt b/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt index a09600ea7..0afce86de 100644 --- a/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/AppRequestInterceptorTest.kt @@ -22,6 +22,8 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.AppRequestInterceptor.Companion.HIGH_RISK_ERROR_PAGES import org.mozilla.fenix.AppRequestInterceptor.Companion.LOW_AND_MEDIUM_RISK_ERROR_PAGES +import org.mozilla.fenix.components.Services +import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.isOnline import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @@ -64,6 +66,7 @@ class AppRequestInterceptorTest { @Test fun `GIVEN request to install add-on WHEN on a different domain THEN no add-on installation is started`() { + every { testContext.components.services } returns Services(testContext, mockk(relaxed = true)) val result = interceptor.onLoadRequest( engineSession = mockk(), uri = "https://addons.mozilla.org/android/downloads/file/12345678/test.xpi", @@ -81,6 +84,7 @@ class AppRequestInterceptorTest { @Test fun `GIVEN invalid request to install add-on WHEN on same domain and triggered by user THEN no add-on installation is started`() { + every { testContext.components.services } returns Services(testContext, mockk(relaxed = true)) val result = interceptor.onLoadRequest( engineSession = mockk(), uri = "https://addons.mozilla.org/android/downloads/file/12345678/test.invalid", @@ -98,6 +102,7 @@ class AppRequestInterceptorTest { @Test fun `GIVEN request to install add-on WHEN not triggered by user THEN no add-on installation is started`() { + every { testContext.components.services } returns Services(testContext, mockk(relaxed = true)) val result = interceptor.onLoadRequest( engineSession = mockk(), uri = "https://addons.mozilla.org/android/downloads/file/12345678/test.xpi", @@ -115,6 +120,7 @@ class AppRequestInterceptorTest { @Test fun `GIVEN any request WHEN on same domain and triggered by user THEN no add-on installation is started`() { + every { testContext.components.services } returns Services(testContext, mockk(relaxed = true)) val result = interceptor.onLoadRequest( engineSession = mockk(), uri = "https://blog.mozilla.org/blog/2020/10/20/mozilla-reaction-to-u-s-v-google/", @@ -132,6 +138,7 @@ class AppRequestInterceptorTest { @Test fun `onErrorRequest results in correct error page for low risk level error`() { + every { testContext.components.analytics } returns mockk(relaxed = true) setOf( ErrorType.UNKNOWN, ErrorType.ERROR_NET_INTERRUPT, @@ -165,6 +172,7 @@ class AppRequestInterceptorTest { @Test fun `onErrorRequest results in correct error page for medium risk level error`() { + every { testContext.components.analytics } returns mockk(relaxed = true) setOf( ErrorType.ERROR_SECURITY_BAD_CERT, ErrorType.ERROR_SECURITY_SSL, @@ -182,6 +190,7 @@ class AppRequestInterceptorTest { @Test fun `onErrorRequest results in correct error page for high risk level error`() { + every { testContext.components.analytics } returns mockk(relaxed = true) setOf( ErrorType.ERROR_SAFEBROWSING_HARMFUL_URI, ErrorType.ERROR_SAFEBROWSING_MALWARE_URI, diff --git a/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt b/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt index 1f02b7562..31e3b18da 100644 --- a/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/HomeActivityTest.kt @@ -30,6 +30,7 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) @@ -60,6 +61,7 @@ class HomeActivityTest { @Test fun `getModeFromIntentOrLastKnown returns mode from settings when intent does not set`() { + every { testContext.settings() } returns Settings(testContext) every { activity.applicationContext } returns testContext testContext.settings().lastKnownMode = BrowsingMode.Private @@ -68,6 +70,7 @@ class HomeActivityTest { @Test fun `getModeFromIntentOrLastKnown returns mode from intent when set`() { + every { testContext.settings() } returns Settings(testContext) testContext.settings().lastKnownMode = BrowsingMode.Normal val intent = Intent() @@ -139,6 +142,7 @@ class HomeActivityTest { @Test fun `GIVEN the user has been away for a long time WHEN the user opens the app THEN do start on home`() { + every { testContext.components.strictMode } returns TestStrictModeManager() val settings: Settings = mockk() val startingIntent = Intent().apply { action = Intent.ACTION_MAIN @@ -153,6 +157,7 @@ class HomeActivityTest { @Test fun `GIVEN the user has been away for a long time WHEN opening a link THEN do not start on home`() { + every { testContext.components.strictMode } returns TestStrictModeManager() val settings: Settings = mockk() val startingIntent = Intent().apply { action = Intent.ACTION_VIEW diff --git a/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt b/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt index 015bdd437..b7e7b46a9 100644 --- a/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/IntentReceiverActivityTest.kt @@ -16,7 +16,6 @@ import io.mockk.unmockkStatic import io.mockk.verify import kotlinx.coroutines.test.runBlockingTest import mozilla.components.feature.intent.processing.IntentProcessor -import mozilla.components.support.test.robolectric.testContext import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -28,6 +27,7 @@ import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.shortcut.NewTabShortcutIntentProcessor import org.mozilla.fenix.utils.Settings import org.robolectric.Robolectric @@ -201,10 +201,7 @@ class IntentReceiverActivityTest { every { activity.settings() } returns settings every { activity.components.analytics } returns mockk(relaxed = true) every { activity.components.intentProcessors } returns intentProcessors - - // For some reason, activity.components doesn't return application.components, which is the - // globally defined TestComponents, so we redirect it. - every { activity.components.strictMode } returns testContext.components.strictMode + every { activity.components.strictMode } returns TestStrictModeManager() } private inline fun mockIntentProcessor(): T { diff --git a/app/src/test/java/org/mozilla/fenix/browser/BaseBrowserFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/browser/BaseBrowserFragmentTest.kt index 4370091c7..6beccb31f 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/BaseBrowserFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/BaseBrowserFragmentTest.kt @@ -26,20 +26,24 @@ import mozilla.components.ui.widgets.VerticalSwipeRefreshLayout import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class BaseBrowserFragmentTest { private lateinit var fragment: TestBaseBrowserFragment private lateinit var swipeRefreshLayout: VerticalSwipeRefreshLayout private lateinit var engineView: EngineView + private lateinit var settings: Settings @Before fun setup() { fragment = spyk(TestBaseBrowserFragment()) swipeRefreshLayout = mockk(relaxed = true) engineView = mockk(relaxed = true) + settings = mockk(relaxed = true) + every { testContext.components.settings } returns settings every { fragment.isAdded } returns true every { fragment.activity } returns mockk() every { fragment.requireContext() } returns testContext @@ -50,8 +54,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should setDynamicToolbarMaxHeight to 0 if top toolbar is forced for a11y`() { - every { testContext.settings().shouldUseBottomToolbar } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseBottomToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns true fragment.initializeEngineView(13) @@ -60,8 +64,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should setDynamicToolbarMaxHeight to 0 if bottom toolbar is forced for a11y`() { - every { testContext.settings().shouldUseBottomToolbar } returns true - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseBottomToolbar } returns true + every { settings.shouldUseFixedTopToolbar } returns true fragment.initializeEngineView(13) @@ -70,8 +74,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should setDynamicToolbarMaxHeight to toolbar height if dynamic toolbar is enabled`() { - every { testContext.settings().shouldUseFixedTopToolbar } returns false - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.shouldUseFixedTopToolbar } returns false + every { settings.isDynamicToolbarEnabled } returns true fragment.initializeEngineView(13) @@ -80,8 +84,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should setDynamicToolbarMaxHeight to 0 if dynamic toolbar is disabled`() { - every { testContext.settings().shouldUseFixedTopToolbar } returns false - every { testContext.settings().isDynamicToolbarEnabled } returns false + every { settings.shouldUseFixedTopToolbar } returns false + every { settings.isDynamicToolbarEnabled } returns false fragment.initializeEngineView(13) @@ -90,8 +94,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should set EngineViewBrowserToolbarBehavior when dynamic toolbar is enabled`() { - every { testContext.settings().shouldUseFixedTopToolbar } returns false - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.shouldUseFixedTopToolbar } returns false + every { settings.isDynamicToolbarEnabled } returns true val params: CoordinatorLayout.LayoutParams = mockk(relaxed = true) every { params.behavior } returns mockk(relaxed = true) every { swipeRefreshLayout.layoutParams } returns params @@ -106,8 +110,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should set toolbar height as EngineView parent's bottom margin when using bottom toolbar`() { - every { testContext.settings().isDynamicToolbarEnabled } returns false - every { testContext.settings().shouldUseBottomToolbar } returns true + every { settings.isDynamicToolbarEnabled } returns false + every { settings.shouldUseBottomToolbar } returns true fragment.initializeEngineView(13) @@ -116,8 +120,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should set toolbar height as EngineView parent's bottom margin if top toolbar is forced for a11y`() { - every { testContext.settings().shouldUseBottomToolbar } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseBottomToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns true fragment.initializeEngineView(13) @@ -126,8 +130,8 @@ class BaseBrowserFragmentTest { @Test fun `initializeEngineView should set toolbar height as EngineView parent's bottom margin if bottom toolbar is forced for a11y`() { - every { testContext.settings().shouldUseBottomToolbar } returns true - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseBottomToolbar } returns true + every { settings.shouldUseFixedTopToolbar } returns true fragment.initializeEngineView(13) diff --git a/app/src/test/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBannerTest.kt b/app/src/test/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBannerTest.kt index 3c2677c93..073101851 100644 --- a/app/src/test/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBannerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBannerTest.kt @@ -5,18 +5,22 @@ package org.mozilla.fenix.browser.infobanner import androidx.coordinatorlayout.widget.CoordinatorLayout +import io.mockk.every +import io.mockk.mockk import io.mockk.spyk import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class DynamicInfoBannerTest { @Test fun `showBanner should set DynamicInfoBannerBehavior as behavior if scrollWithTopToolbar`() { + every { testContext.components.settings } returns mockk(relaxed = true) val banner = spyk( DynamicInfoBanner( testContext, CoordinatorLayout(testContext), true, "", "" @@ -30,6 +34,7 @@ class DynamicInfoBannerTest { @Test fun `showBanner should not set a behavior if not scrollWithTopToolbar`() { + every { testContext.components.settings } returns mockk(relaxed = true) val banner = spyk( DynamicInfoBanner( testContext, CoordinatorLayout(testContext), false, "", "" diff --git a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt index f28ff98d6..edfd5ece7 100644 --- a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationFragmentTest.kt @@ -6,10 +6,11 @@ package org.mozilla.fenix.collections import io.mockk.MockKAnnotations import io.mockk.every -import io.mockk.impl.annotations.MockK +import io.mockk.mockk import kotlinx.coroutines.CompletableDeferred import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.createAddedTestFragment import mozilla.components.support.test.robolectric.testContext @@ -18,8 +19,10 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.components.TabCollectionStorage import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager private const val URL_MOZILLA = "www.mozilla.org" private const val SESSION_ID_MOZILLA = "0" @@ -29,7 +32,7 @@ private const val SESSION_ID_BCC = "1" @RunWith(FenixRobolectricTestRunner::class) class CollectionCreationFragmentTest { - @MockK(relaxed = true) private lateinit var publicSuffixList: PublicSuffixList + private val publicSuffixList = mockk(relaxed = true) private val sessionMozilla = createTab(URL_MOZILLA, id = SESSION_ID_MOZILLA) private val sessionBcc = createTab(URL_BCC, id = SESSION_ID_BCC) @@ -42,13 +45,16 @@ class CollectionCreationFragmentTest { MockKAnnotations.init(this) every { publicSuffixList.stripPublicSuffix(URL_MOZILLA) } returns CompletableDeferred(URL_MOZILLA) every { publicSuffixList.stripPublicSuffix(URL_BCC) } returns CompletableDeferred(URL_BCC) + every { testContext.components.publicSuffixList } returns publicSuffixList } @Test fun `creation dialog shows and can be dismissed`() { - val store = testContext.components.core.store - every { store.state } returns state - + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.core.store } returns BrowserStore(state) + every { testContext.components.core.tabCollectionStorage } returns TabCollectionStorage( + testContext, TestStrictModeManager() + ) val fragment = createAddedTestFragment { CollectionCreationFragment().apply { arguments = CollectionCreationFragmentArgs( diff --git a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapterTest.kt index 83a169faa..491b0c137 100644 --- a/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/collections/CollectionCreationTabListAdapterTest.kt @@ -12,6 +12,7 @@ import io.mockk.every import io.mockk.just import io.mockk.mockk import io.mockk.verify +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -20,6 +21,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.CollectionTabListRowBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.Tab @@ -59,6 +61,7 @@ class CollectionCreationTabListAdapterTest { @Test fun `creates and binds viewholder`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) adapter.updateData( tabs = listOf(mozillaTab), selectedTabs = emptySet(), @@ -87,6 +90,7 @@ class CollectionCreationTabListAdapterTest { @Test fun `creates and binds viewholder for selected tab`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) every { interactor.addTabToSelection(mozillaTab) } just Runs adapter.updateData( diff --git a/app/src/test/java/org/mozilla/fenix/collections/SaveCollectionListAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/collections/SaveCollectionListAdapterTest.kt index 88ea459d4..b7383f98b 100644 --- a/app/src/test/java/org/mozilla/fenix/collections/SaveCollectionListAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/collections/SaveCollectionListAdapterTest.kt @@ -12,12 +12,14 @@ import io.mockk.just import io.mockk.mockk import io.mockk.verify import mozilla.components.feature.tab.collections.TabCollection +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.CollectionsListItemBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -51,6 +53,7 @@ class SaveCollectionListAdapterTest { @Test fun `creates and binds viewholder`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val collection = mockk { every { id } returns 0L every { title } returns "Collection" diff --git a/app/src/test/java/org/mozilla/fenix/components/IntentProcessorTypeTest.kt b/app/src/test/java/org/mozilla/fenix/components/IntentProcessorTypeTest.kt index 76523c7ea..a4f98ce61 100644 --- a/app/src/test/java/org/mozilla/fenix/components/IntentProcessorTypeTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/IntentProcessorTypeTest.kt @@ -13,6 +13,7 @@ import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue +import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.HomeActivity @@ -22,6 +23,10 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) class IntentProcessorTypeTest { + @Before + fun setup() { + every { testContext.components.intentProcessors } returns mockk(relaxed = true) + } @Test fun `should open intent with flag launched from history`() { @@ -72,6 +77,7 @@ class IntentProcessorTypeTest { @Test fun `get type for private custom tab intent processor`() { + every { testContext.components.intentProcessors } returns mockk(relaxed = true) val processor = testContext.components.intentProcessors.privateCustomTabIntentProcessor val type = testContext.components.intentProcessors.getType(processor) diff --git a/app/src/test/java/org/mozilla/fenix/components/TestComponents.kt b/app/src/test/java/org/mozilla/fenix/components/TestComponents.kt deleted file mode 100644 index 3529c3519..000000000 --- a/app/src/test/java/org/mozilla/fenix/components/TestComponents.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.components - -import android.content.Context -import io.mockk.mockk -import org.mozilla.fenix.helpers.perf.TestStrictModeManager -import org.mozilla.fenix.utils.ClipboardHandler -import org.mozilla.fenix.utils.Settings - -class TestComponents(private val context: Context) : Components(context) { - override val backgroundServices by lazy { - mockk(relaxed = true) - } - override val services by lazy { Services(context, backgroundServices.accountManager) } - override val core by lazy { TestCore(context, analytics.crashReporter) } - @Suppress("Deprecation") - override val useCases by lazy { - UseCases( - context, - core.engine, - core.store, - core.webAppShortcutManager, - core.topSitesStorage, - core.bookmarksStorage, - core.historyStorage - ) - } - override val intentProcessors by lazy { mockk(relaxed = true) } - override val analytics by lazy { Analytics(context) } - - override val clipboardHandler by lazy { ClipboardHandler(context) } - - override val settings by lazy { mockk(relaxed = true) } - - override val strictMode by lazy { TestStrictModeManager() } -} diff --git a/app/src/test/java/org/mozilla/fenix/components/TestCore.kt b/app/src/test/java/org/mozilla/fenix/components/TestCore.kt deleted file mode 100644 index b25a15a12..000000000 --- a/app/src/test/java/org/mozilla/fenix/components/TestCore.kt +++ /dev/null @@ -1,37 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.components - -import android.content.Context -import io.mockk.every -import io.mockk.mockk -import mozilla.components.browser.state.store.BrowserStore -import mozilla.components.browser.storage.sync.PlacesBookmarksStorage -import mozilla.components.browser.storage.sync.PlacesHistoryStorage -import mozilla.components.browser.thumbnails.storage.ThumbnailStorage -import mozilla.components.concept.base.crash.CrashReporting -import mozilla.components.concept.engine.Engine -import mozilla.components.concept.engine.Settings -import mozilla.components.concept.fetch.Client -import mozilla.components.feature.pwa.WebAppShortcutManager -import mozilla.components.feature.top.sites.DefaultTopSitesStorage - -class TestCore(context: Context, crashReporter: CrashReporting) : Core( - context, - crashReporter, - mockk() -) { - - override val engine = mockk(relaxed = true) { - every { this@mockk getProperty "settings" } returns mockk(relaxed = true) - } - override val store = mockk() - override val client = mockk() - override val webAppShortcutManager = mockk() - override val thumbnailStorage = mockk() - override val topSitesStorage = mockk() - override val bookmarksStorage = mockk() - override val historyStorage = mockk() -} diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarViewTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarViewTest.kt index 467f28d0e..97bdf6d9c 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarViewTest.kt @@ -16,11 +16,13 @@ import org.junit.Test import org.junit.runner.RunWith import mozilla.components.browser.toolbar.BrowserToolbar import mozilla.components.browser.toolbar.behavior.BrowserToolbarBehavior +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before -import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings import mozilla.components.browser.toolbar.behavior.ToolbarPosition as MozacToolbarPosition @RunWith(FenixRobolectricTestRunner::class) @@ -28,17 +30,23 @@ class BrowserToolbarViewTest { private lateinit var toolbarView: BrowserToolbarView private lateinit var toolbar: BrowserToolbar private lateinit var behavior: BrowserToolbarBehavior + private lateinit var settings: Settings @Before - fun `setup`() { + fun setup() { toolbar = BrowserToolbar(testContext) toolbar.layoutParams = CoordinatorLayout.LayoutParams(100, 100) behavior = spyk(BrowserToolbarBehavior(testContext, null, MozacToolbarPosition.BOTTOM)) (toolbar.layoutParams as CoordinatorLayout.LayoutParams).behavior = behavior + settings = mockk(relaxed = true) + every { testContext.components.useCases } returns mockk(relaxed = true) + every { testContext.components.core } returns mockk(relaxed = true) + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) toolbarView = BrowserToolbarView( + context = testContext, + settings = settings, container = CoordinatorLayout(testContext), - toolbarPosition = ToolbarPosition.BOTTOM, interactor = mockk(), customTabSession = mockk(relaxed = true), lifecycleOwner = mockk() @@ -50,10 +58,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(false) should setDynamicToolbarBehavior if no a11y, bottom toolbar is dynamic and the tab is not for a PWA or TWA`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -63,10 +71,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(false) should expandToolbarAndMakeItFixed if bottom toolbar is not set as dynamic`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns false + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns false every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -76,10 +84,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(false) should expandToolbarAndMakeItFixed if bottom toolbar is dynamic but the tab is for a PWA or TWA`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns true - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -89,10 +97,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(false) should expandToolbarAndMakeItFixed if bottom toolbar is dynamic tab is not for a PWA or TWA but a11y is enabled`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseFixedTopToolbar } returns true toolbarViewSpy.setToolbarBehavior(false) @@ -104,10 +112,10 @@ class BrowserToolbarViewTest { // All intrinsic checks are met but the method was called with `shouldDisableScroll` = true val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -117,10 +125,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed if bottom toolbar is not set as dynamic`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns false + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns false every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -130,10 +138,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed if bottom toolbar is dynamic but the tab is for a PWA or TWA`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns true - every { testContext.settings().shouldUseFixedTopToolbar } returns false + every { settings.shouldUseFixedTopToolbar } returns false toolbarViewSpy.setToolbarBehavior(false) @@ -143,10 +151,10 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed if bottom toolbar is dynamic, the tab is for a PWA or TWA and a11 is enabled`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.BOTTOM - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.BOTTOM + every { settings.isDynamicToolbarEnabled } returns true every { toolbarViewSpy.isPwaTabOrTwaTab } returns false - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.shouldUseFixedTopToolbar } returns true toolbarViewSpy.setToolbarBehavior(false) @@ -156,8 +164,8 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed for top toolbar if shouldUseFixedTopToolbar`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.TOP - every { testContext.settings().shouldUseFixedTopToolbar } returns true + every { settings.toolbarPosition } returns ToolbarPosition.TOP + every { settings.shouldUseFixedTopToolbar } returns true toolbarViewSpy.setToolbarBehavior(true) @@ -167,8 +175,8 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed for top toolbar if it is not dynamic`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.TOP - every { testContext.settings().isDynamicToolbarEnabled } returns false + every { settings.toolbarPosition } returns ToolbarPosition.TOP + every { settings.isDynamicToolbarEnabled } returns false toolbarViewSpy.setToolbarBehavior(true) @@ -178,7 +186,7 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(true) should expandToolbarAndMakeItFixed for top toolbar if shouldDisableScroll`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.TOP + every { settings.toolbarPosition } returns ToolbarPosition.TOP toolbarViewSpy.setToolbarBehavior(true) @@ -188,9 +196,9 @@ class BrowserToolbarViewTest { @Test fun `setToolbarBehavior(false) should setDynamicToolbarBehavior for top toolbar`() { val toolbarViewSpy = spyk(toolbarView) - every { testContext.settings().toolbarPosition } returns ToolbarPosition.TOP - every { testContext.settings().shouldUseFixedTopToolbar } returns true - every { testContext.settings().isDynamicToolbarEnabled } returns true + every { settings.toolbarPosition } returns ToolbarPosition.TOP + every { settings.shouldUseFixedTopToolbar } returns true + every { settings.isDynamicToolbarEnabled } returns true toolbarViewSpy.setToolbarBehavior(true) diff --git a/app/src/test/java/org/mozilla/fenix/exceptions/login/LoginExceptionsAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/exceptions/login/LoginExceptionsAdapterTest.kt index 0b0265c0f..05551bb0e 100644 --- a/app/src/test/java/org/mozilla/fenix/exceptions/login/LoginExceptionsAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/exceptions/login/LoginExceptionsAdapterTest.kt @@ -9,6 +9,7 @@ import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import io.mockk.every import io.mockk.mockk +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -21,6 +22,7 @@ import org.mozilla.fenix.exceptions.ExceptionsAdapter import org.mozilla.fenix.exceptions.viewholders.ExceptionsDeleteButtonViewHolder import org.mozilla.fenix.exceptions.viewholders.ExceptionsHeaderViewHolder import org.mozilla.fenix.exceptions.viewholders.ExceptionsListItemViewHolder +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -39,6 +41,7 @@ class LoginExceptionsAdapterTest { @Test fun `creates correct view holder type`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) val parent = FrameLayout(context) adapter.updateData(listOf(mockk(), mockk())) assertEquals(4, adapter.itemCount) diff --git a/app/src/test/java/org/mozilla/fenix/exceptions/trackingprotection/TrackingProtectionExceptionsAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/exceptions/trackingprotection/TrackingProtectionExceptionsAdapterTest.kt index 959884833..f7c007d88 100644 --- a/app/src/test/java/org/mozilla/fenix/exceptions/trackingprotection/TrackingProtectionExceptionsAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/exceptions/trackingprotection/TrackingProtectionExceptionsAdapterTest.kt @@ -9,6 +9,7 @@ import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import io.mockk.every import io.mockk.mockk +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -21,6 +22,7 @@ import org.mozilla.fenix.exceptions.ExceptionsAdapter import org.mozilla.fenix.exceptions.viewholders.ExceptionsDeleteButtonViewHolder import org.mozilla.fenix.exceptions.viewholders.ExceptionsHeaderViewHolder import org.mozilla.fenix.exceptions.viewholders.ExceptionsListItemViewHolder +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -39,6 +41,7 @@ class TrackingProtectionExceptionsAdapterTest { @Test fun `creates correct view holder type`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) val parent = FrameLayout(context) adapter.updateData(listOf(mockk(), mockk())) assertEquals(4, adapter.itemCount) diff --git a/app/src/test/java/org/mozilla/fenix/ext/ContextTest.kt b/app/src/test/java/org/mozilla/fenix/ext/ContextTest.kt index f0806672f..cc3b754a5 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/ContextTest.kt +++ b/app/src/test/java/org/mozilla/fenix/ext/ContextTest.kt @@ -91,6 +91,7 @@ class ContextTest { @Test fun `GIVEN context WHEN getting metrics controller THEN send back metrics`() { + every { testContext.components.analytics } returns mockk(relaxed = true) val expectedMetricsValue = ApplicationProvider.getApplicationContext().components.analytics.metrics assertEquals(expectedMetricsValue, testContext.metrics) } diff --git a/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt b/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt index 1b6a39c4b..0450ee030 100644 --- a/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt +++ b/app/src/test/java/org/mozilla/fenix/ext/StringTest.kt @@ -4,6 +4,7 @@ package org.mozilla.fenix.ext +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -19,7 +20,7 @@ const val IDN = "台灣" @RunWith(FenixRobolectricTestRunner::class) class StringTest { - private val publicSuffixList = testContext.components.publicSuffixList + private val publicSuffixList = PublicSuffixList(testContext) @Test fun `Url To Trimmed Host`() { diff --git a/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt b/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt index e1a108743..733ad5380 100644 --- a/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt +++ b/app/src/test/java/org/mozilla/fenix/helpers/FenixRobolectricTestApplication.kt @@ -4,9 +4,10 @@ package org.mozilla.fenix.helpers +import io.mockk.mockk import org.mozilla.fenix.FenixApplication import org.mozilla.fenix.R -import org.mozilla.fenix.components.TestComponents +import org.mozilla.fenix.components.Components /** * An override of our application for use in Robolectric-based unit tests. We're forced to override @@ -20,7 +21,7 @@ class FenixRobolectricTestApplication : FenixApplication() { setApplicationTheme() } - override val components = TestComponents(this) + override val components = mockk() override fun initializeGlean() = Unit diff --git a/app/src/test/java/org/mozilla/fenix/home/intent/SpeechProcessingIntentProcessorTest.kt b/app/src/test/java/org/mozilla/fenix/home/intent/SpeechProcessingIntentProcessorTest.kt index 6524ffc41..a74bd4235 100644 --- a/app/src/test/java/org/mozilla/fenix/home/intent/SpeechProcessingIntentProcessorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/intent/SpeechProcessingIntentProcessorTest.kt @@ -15,13 +15,16 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.SearchState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.search.ext.createSearchEngine +import mozilla.components.support.test.robolectric.testContext import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.components.metrics.MetricController +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.widget.VoiceSearchActivity.Companion.SPEECH_PROCESSING @RunWith(FenixRobolectricTestRunner::class) @@ -84,6 +87,7 @@ class SpeechProcessingIntentProcessorTest { @Test fun `reads the speech processing extra`() { + every { testContext.components.strictMode } returns TestStrictModeManager() val intent = Intent().apply { putExtra(HomeActivity.OPEN_TO_BROWSER_AND_LOAD, true) putExtra(SPEECH_PROCESSING, "hello world") diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/SessionControlViewTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/SessionControlViewTest.kt index bccb74584..a9f214f43 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/SessionControlViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/SessionControlViewTest.kt @@ -17,6 +17,7 @@ import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.HomeFragmentState import org.mozilla.fenix.home.recentbookmarks.RecentBookmark @@ -89,6 +90,7 @@ class SessionControlViewTest { @Test fun `GIVENs updates WHEN sections recentTabs, recentBookmarks, historyMetadata or pocketArticles are available THEN show the dialog`() { + every { testContext.components.settings } returns mockk(relaxed = true) val interactor = mockk(relaxed = true) val view = RecyclerView(testContext) val controller = SessionControlView( @@ -110,6 +112,7 @@ class SessionControlViewTest { @Test fun `GIVENs updates WHEN sections recentTabs, recentBookmarks, historyMetadata or pocketArticles are NOT available THEN DO NOT show the dialog`() { + every { testContext.components.settings } returns mockk(relaxed = true) val interactor = mockk(relaxed = true) val view = RecyclerView(testContext) val controller = SessionControlView( diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolderTest.kt index 900b3e461..2dac1b5a7 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingFinishViewHolderTest.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.LayoutInflater +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext @@ -12,6 +13,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.OnboardingFinishBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor @@ -29,6 +31,7 @@ class OnboardingFinishViewHolderTest { @Test fun `call interactor on click`() { + every { testContext.components.analytics } returns mockk(relaxed = true) OnboardingFinishViewHolder(binding.root, interactor) binding.finishButton.performClick() diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolderTest.kt index f016a3425..abb66aff0 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingManualSignInViewHolderTest.kt @@ -21,6 +21,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.databinding.OnboardingManualSigninBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.HomeFragmentDirections @@ -59,6 +60,7 @@ class OnboardingManualSignInViewHolderTest { @Test fun `navigate on click`() { + every { testContext.components.analytics } returns mockk(relaxed = true) OnboardingManualSignInViewHolder(binding.root) binding.fxaSignInButton.performClick() diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolderTest.kt index 395536992..4a594e449 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingPrivacyNoticeViewHolderTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.LayoutInflater import androidx.appcompat.view.ContextThemeWrapper +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext @@ -14,6 +15,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.databinding.OnboardingPrivacyNoticeBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.sessioncontrol.OnboardingInteractor @@ -32,6 +34,7 @@ class OnboardingPrivacyNoticeViewHolderTest { @Test fun `call interactor on click`() { + every { testContext.components.analytics } returns mockk(relaxed = true) OnboardingPrivacyNoticeViewHolder(binding.root, interactor) binding.readButton.performClick() diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingToolbarPositionPickerViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingToolbarPositionPickerViewHolderTest.kt index 3dab6ddcf..faa25c52a 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingToolbarPositionPickerViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingToolbarPositionPickerViewHolderTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.LayoutInflater import io.mockk.every +import io.mockk.mockk import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -26,9 +27,10 @@ class OnboardingToolbarPositionPickerViewHolderTest { @Before fun setup() { - val components = testContext.components binding = OnboardingToolbarPositionPickerBinding.inflate(LayoutInflater.from(testContext)) - settings = components.settings + settings = mockk(relaxed = true) + every { testContext.components.settings } returns settings + every { testContext.components.analytics } returns mockk(relaxed = true) } @Test diff --git a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolderTest.kt index 06c5b7ac0..c41d7d7f4 100644 --- a/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/sessioncontrol/viewholders/onboarding/OnboardingTrackingProtectionViewHolderTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.home.sessioncontrol.viewholders.onboarding import android.view.LayoutInflater import androidx.appcompat.view.ContextThemeWrapper +import io.mockk.every import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before @@ -13,7 +14,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.databinding.OnboardingTrackingProtectionBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class OnboardingTrackingProtectionViewHolderTest { @@ -28,6 +31,7 @@ class OnboardingTrackingProtectionViewHolderTest { @Test fun `sets description text`() { + every { testContext.components.settings } returns Settings(testContext) OnboardingTrackingProtectionViewHolder(binding.root) val string = testContext.getString(R.string.onboarding_tracking_protection_description_3) diff --git a/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt index 3c90dd872..5bf2a0bcd 100644 --- a/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/topsites/TopSiteItemViewHolderTest.kt @@ -5,8 +5,10 @@ package org.mozilla.fenix.home.topsites import android.view.LayoutInflater +import io.mockk.every import io.mockk.mockk import io.mockk.verify +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.feature.top.sites.TopSite import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertNotNull @@ -15,6 +17,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.TopSiteItemBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.home.sessioncontrol.TopSiteInteractor @@ -35,6 +38,7 @@ class TopSiteItemViewHolderTest { fun setup() { binding = TopSiteItemBinding.inflate(LayoutInflater.from(testContext)) interactor = mockk(relaxed = true) + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) } @Test @@ -47,6 +51,7 @@ class TopSiteItemViewHolderTest { @Test fun `calls interactor on long click`() { + every { testContext.components.analytics } returns mockk(relaxed = true) TopSiteItemViewHolder(binding.root, interactor).bind(pocket) binding.topSiteItem.performLongClick() diff --git a/app/src/test/java/org/mozilla/fenix/library/historymetadata/view/HistoryMetadataGroupItemViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/library/historymetadata/view/HistoryMetadataGroupItemViewHolderTest.kt index c3d708a18..de0458f09 100644 --- a/app/src/test/java/org/mozilla/fenix/library/historymetadata/view/HistoryMetadataGroupItemViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/historymetadata/view/HistoryMetadataGroupItemViewHolderTest.kt @@ -5,7 +5,9 @@ package org.mozilla.fenix.library.historymetadata.view import android.view.LayoutInflater import androidx.navigation.Navigation +import io.mockk.every import io.mockk.mockk +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.concept.storage.HistoryMetadataKey import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals @@ -13,6 +15,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.HistoryMetadataGroupListItemBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.library.history.History import org.mozilla.fenix.library.historymetadata.interactor.HistoryMetadataGroupInteractor @@ -44,6 +47,7 @@ class HistoryMetadataGroupItemViewHolderTest { @Test fun `GIVEN a history metadata item on bind THEN set the title and url text`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) HistoryMetadataGroupItemViewHolder(binding.root, interactor, selectionHolder).bind(item) assertEquals(item.title, binding.historyLayout.titleView.text) diff --git a/app/src/test/java/org/mozilla/fenix/perf/PerformanceInflaterTest.kt b/app/src/test/java/org/mozilla/fenix/perf/PerformanceInflaterTest.kt index 4c65e0c7d..caf5ada7f 100644 --- a/app/src/test/java/org/mozilla/fenix/perf/PerformanceInflaterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/perf/PerformanceInflaterTest.kt @@ -9,6 +9,8 @@ import android.util.AttributeSet import android.view.LayoutInflater import android.view.View import android.widget.FrameLayout +import io.mockk.every +import io.mockk.mockk import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals @@ -16,6 +18,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import java.io.File @@ -34,6 +37,7 @@ class PerformanceInflaterTest { fun setup() { InflationCounter.inflationCount.set(0) + every { testContext.components.core.engine.profiler } returns mockk(relaxed = true) perfInflater = MockInflater(LayoutInflater.from(testContext), testContext) } diff --git a/app/src/test/java/org/mozilla/fenix/search/toolbar/ToolbarViewTest.kt b/app/src/test/java/org/mozilla/fenix/search/toolbar/ToolbarViewTest.kt index 03fa66a9c..48c1eacdd 100644 --- a/app/src/test/java/org/mozilla/fenix/search/toolbar/ToolbarViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/toolbar/ToolbarViewTest.kt @@ -28,6 +28,7 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.search.SearchEngineSource import org.mozilla.fenix.search.SearchFragmentState +import org.mozilla.fenix.utils.Settings @RunWith(FenixRobolectricTestRunner::class) class ToolbarViewTest { @@ -154,6 +155,7 @@ class ToolbarViewTest { private fun buildToolbarView(isPrivate: Boolean) = ToolbarView( context, + Settings(context), interactor, historyStorage = null, isPrivate = isPrivate, diff --git a/app/src/test/java/org/mozilla/fenix/session/PrivateNotificationServiceTest.kt b/app/src/test/java/org/mozilla/fenix/session/PrivateNotificationServiceTest.kt index 38fbfa4a8..050b58ae5 100644 --- a/app/src/test/java/org/mozilla/fenix/session/PrivateNotificationServiceTest.kt +++ b/app/src/test/java/org/mozilla/fenix/session/PrivateNotificationServiceTest.kt @@ -13,6 +13,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.privatemode.notification.AbstractPrivateNotificationService.Companion.ACTION_ERASE +import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.After @@ -44,8 +45,10 @@ class PrivateNotificationServiceTest { @Before fun setup() { - store = testContext.components.core.store + store = mockk() every { store.dispatch(any()) } returns mockk() + every { testContext.components.core.store } returns store + every { testContext.components.useCases.tabsUseCases } returns TabsUseCases(store) controller = Robolectric.buildService( PrivateNotificationService::class.java, diff --git a/app/src/test/java/org/mozilla/fenix/settings/SettingsFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/settings/SettingsFragmentTest.kt index 340147f5c..58be1e8d6 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/SettingsFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/SettingsFragmentTest.kt @@ -10,6 +10,7 @@ import io.mockk.every import io.mockk.mockk import io.mockk.mockkObject import kotlinx.coroutines.test.TestCoroutineDispatcher +import mozilla.components.concept.fetch.Client import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.After @@ -41,9 +42,14 @@ class SettingsFragmentTest { @Before fun setup() { // Mock client for fetching account avatar - val client = testContext.components.core.client + val client = mockk() every { client.fetch(any()) } throws IOException("test") + every { testContext.components.core.client } returns client + every { testContext.components.settings } returns mockk(relaxed = true) + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.backgroundServices } returns mockk(relaxed = true) + mockkObject(Config) every { Config.channel } returns ReleaseChannel.Nightly } diff --git a/app/src/test/java/org/mozilla/fenix/settings/TrackingProtectionFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/settings/TrackingProtectionFragmentTest.kt index 2de69a96d..f4674c12d 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/TrackingProtectionFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/TrackingProtectionFragmentTest.kt @@ -5,10 +5,13 @@ package org.mozilla.fenix.settings import androidx.fragment.app.FragmentActivity +import io.mockk.every +import io.mockk.mockk import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.utils.Settings import org.robolectric.Robolectric @@ -18,9 +21,11 @@ class TrackingProtectionFragmentTest { @Test fun `UI component should match settings defaults`() { + val settings = Settings(testContext) + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.settings } returns settings val settingsFragment = TrackingProtectionFragment() val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().get() - val settings = Settings(testContext) activity.supportFragmentManager.beginTransaction() .add(settingsFragment, "settingsFragment") diff --git a/app/src/test/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragmentTest.kt index 92ac2a478..429fd0f82 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/creditcards/CreditCardsSettingFragmentTest.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.settings.creditcards import androidx.fragment.app.FragmentActivity import androidx.navigation.NavController import androidx.preference.Preference +import io.mockk.every import io.mockk.mockk import io.mockk.verify import kotlinx.coroutines.test.TestCoroutineDispatcher @@ -19,6 +20,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.getPreferenceKey import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.robolectric.Robolectric @@ -32,6 +34,8 @@ class CreditCardsSettingFragmentTest { @Before fun setUp() { + every { testContext.components.settings } returns mockk(relaxed = true) + creditCardsSettingFragment = CreditCardsSettingFragment() val activity = Robolectric.buildActivity(FragmentActivity::class.java).create().get() diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt index d5ac6ab9d..e62415363 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListControllerTest.kt @@ -7,13 +7,13 @@ package org.mozilla.fenix.settings.logins import androidx.navigation.NavController import io.mockk.mockk import io.mockk.verifyAll +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController -import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.logins.controller.LoginsListController @@ -24,7 +24,7 @@ import org.mozilla.fenix.utils.Settings class LoginsListControllerTest { private val store: LoginsFragmentStore = mockk(relaxed = true) private val settings: Settings = mockk(relaxed = true) - private val publicSuffixList = testContext.components.publicSuffixList + private val publicSuffixList = PublicSuffixList(testContext) private val sortingStrategy: SortingStrategy = SortingStrategy.Alphabetically(publicSuffixList) private val navController: NavController = mockk(relaxed = true) private val browserNavigator: (String, Boolean, BrowserDirection) -> Unit = mockk(relaxed = true) diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListViewHolderTest.kt index 4df29d093..37660c3da 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/LoginsListViewHolderTest.kt @@ -5,14 +5,17 @@ package org.mozilla.fenix.settings.logins import android.view.LayoutInflater +import io.mockk.every import io.mockk.mockk import io.mockk.verify +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.databinding.LoginsItemBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.settings.logins.interactor.SavedLoginsInteractor import org.mozilla.fenix.settings.logins.view.LoginsListViewHolder @@ -35,6 +38,7 @@ class LoginsListViewHolderTest { fun setup() { binding = LoginsItemBinding.inflate(LayoutInflater.from(testContext)) interactor = mockk(relaxed = true) + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) } @Test diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt index 9322bdbdb..a44ae335a 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsInteractorTest.kt @@ -4,8 +4,10 @@ package org.mozilla.fenix.settings.logins +import io.mockk.every import io.mockk.mockk import io.mockk.verifyAll +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Before import org.junit.Test @@ -40,6 +42,7 @@ class SavedLoginsInteractorTest { @Test fun `GIVEN a change in sorting strategy, WHEN the interactor is called for it, THEN it should just delegate the controller`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val sortingStrategy = SortingStrategy.Alphabetically(testContext.components.publicSuffixList) interactor.onSortingStrategyChanged(sortingStrategy) diff --git a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsSortingStrategyMenuTest.kt b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsSortingStrategyMenuTest.kt index 5b80ec884..3bf89f533 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsSortingStrategyMenuTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/logins/SavedLoginsSortingStrategyMenuTest.kt @@ -12,6 +12,7 @@ import io.mockk.just import io.mockk.mockk import io.mockk.verify import mozilla.components.concept.menu.candidate.HighPriorityHighlightEffect +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals @@ -68,13 +69,15 @@ class SavedLoginsSortingStrategyMenuTest { @Test fun `candidates call interactor on click`() { + val publicSuffixList = PublicSuffixList(testContext) + every { testContext.components.publicSuffixList } returns publicSuffixList val (name, lastUsed) = menu.menuItems(Item.AlphabeticallySort) every { interactor.onSortingStrategyChanged(any()) } just Runs name.onClick() verify { interactor.onSortingStrategyChanged( - SortingStrategy.Alphabetically(context.components.publicSuffixList) + SortingStrategy.Alphabetically(publicSuffixList) ) } diff --git a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt index 02d25af51..3762c061c 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/quicksettings/DefaultQuickSettingsControllerTest.kt @@ -122,6 +122,7 @@ class DefaultQuickSettingsControllerTest { @Test fun `handlePermissionsShown should delegate to an injected parameter`() { + every { testContext.components.core.engine } returns mockk(relaxed = true) var displayPermissionsInvoked = false createController( displayPermissions = { @@ -172,6 +173,7 @@ class DefaultQuickSettingsControllerTest { @Test fun `handlePermissionToggled blocked by user should navigate to site permission manager`() { + every { testContext.components.core.engine } returns mockk(relaxed = true) val websitePermission = mockk() val invalidSitePermissionsController = DefaultQuickSettingsController( context = context, @@ -265,6 +267,7 @@ class DefaultQuickSettingsControllerTest { @Test fun `handleAndroidPermissionRequest should request from the injected callback`() { + every { testContext.components.core.engine } returns mockk(relaxed = true) val testPermissions = arrayOf("TestPermission") var requestRuntimePermissionsInvoked = false diff --git a/app/src/test/java/org/mozilla/fenix/settings/search/SearchEngineFragmentTest.kt b/app/src/test/java/org/mozilla/fenix/settings/search/SearchEngineFragmentTest.kt index 5710d2fab..c69f4b9fb 100644 --- a/app/src/test/java/org/mozilla/fenix/settings/search/SearchEngineFragmentTest.kt +++ b/app/src/test/java/org/mozilla/fenix/settings/search/SearchEngineFragmentTest.kt @@ -18,8 +18,9 @@ import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R -import org.mozilla.fenix.ext.settings +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.utils.Settings import org.mozilla.gecko.search.SearchWidgetProvider @RunWith(FenixRobolectricTestRunner::class) @@ -27,12 +28,16 @@ class SearchEngineFragmentTest { @Test fun `GIVEN pref_key_show_voice_search setting WHEN it is modified THEN the value is persisted and widgets updated`() { try { - mockkObject(SearchWidgetProvider.Companion) - + val settings = mockk(relaxed = true) + every { settings.preferences } + every { testContext.components.settings } returns settings val preferences: SharedPreferences = mockk() val preferencesEditor: SharedPreferences.Editor = mockk(relaxed = true) - every { testContext.settings().preferences } returns preferences + every { settings.preferences } returns preferences every { preferences.edit() } returns preferencesEditor + + mockkObject(SearchWidgetProvider.Companion) + val fragment = spyk(SearchEngineFragment()) { every { context } returns testContext every { isAdded } returns true diff --git a/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsAdapterTest.kt index 0a245e14c..0b5ea9cbb 100644 --- a/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsAdapterTest.kt @@ -12,11 +12,13 @@ import mozilla.components.browser.storage.sync.Tab import mozilla.components.browser.storage.sync.TabEntry import mozilla.components.concept.sync.DeviceType import mozilla.components.feature.syncedtabs.view.SyncedTabsView +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -103,6 +105,7 @@ class SyncedTabsAdapterTest { @Test fun `adapter can create and bind viewholders for SyncedDeviceTabs`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val parent = FrameLayout(testContext) adapter.updateData(listOf(oneTabDevice)) diff --git a/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsViewHolderTest.kt index 1a16de615..540ed1b5e 100644 --- a/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/sync/SyncedTabsViewHolderTest.kt @@ -17,6 +17,7 @@ import mozilla.components.browser.storage.sync.TabEntry import mozilla.components.concept.sync.Device import mozilla.components.concept.sync.DeviceType import mozilla.components.feature.syncedtabs.view.SyncedTabsView +import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before @@ -25,6 +26,7 @@ import org.junit.runner.RunWith import org.mozilla.fenix.R import org.mozilla.fenix.databinding.SyncTabsListItemBinding import org.mozilla.fenix.databinding.ViewSyncedTabsGroupBinding +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -80,6 +82,7 @@ class SyncedTabsViewHolderTest { @Test fun `TabViewHolder binds active tab`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) tabViewHolder.bind(SyncedTabsAdapter.AdapterItem.Tab(tab), mockk()) assertEquals("Firefox", syncTabsListItemBinding.syncedTabItemTitle.text) @@ -88,6 +91,7 @@ class SyncedTabsViewHolderTest { @Test fun `TabViewHolder calls interactor on click`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val interactor = mockk(relaxed = true) tabViewHolder.bind(SyncedTabsAdapter.AdapterItem.Tab(tab), interactor) diff --git a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt index 867c68830..fabdaabee 100644 --- a/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabhistory/TabHistoryAdapterTest.kt @@ -8,9 +8,12 @@ import android.content.Context import android.widget.FrameLayout import androidx.appcompat.view.ContextThemeWrapper import io.mockk.MockKAnnotations -import io.mockk.impl.annotations.MockK -import io.mockk.spyk +import io.mockk.every import io.mockk.verify +import io.mockk.spyk +import io.mockk.mockk +import io.mockk.impl.annotations.MockK +import mozilla.components.browser.icons.BrowserIcons import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue @@ -18,6 +21,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner @RunWith(FenixRobolectricTestRunner::class) @@ -52,6 +56,7 @@ class TabHistoryAdapterTest { @Test fun `creates and binds view holder`() { + every { testContext.components.core.icons } returns BrowserIcons(testContext, mockk(relaxed = true)) adapter.submitList(listOf(selectedItem, unselectedItem)) val holder = spyk(adapter.createViewHolder(parent, 0)) diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt index b8b9b493c..d92af4bad 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTabViewHolderTest.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.tabstray.browser import android.view.LayoutInflater import android.view.View +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.components.browser.state.state.TabSessionState @@ -21,6 +22,8 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.tabstray.TabsTrayStore import mozilla.components.browser.state.state.createTab +import mozilla.components.lib.publicsuffixlist.PublicSuffixList +import org.mozilla.fenix.ext.components @RunWith(FenixRobolectricTestRunner::class) class AbstractBrowserTabViewHolderTest { @@ -30,6 +33,7 @@ class AbstractBrowserTabViewHolderTest { @Test fun `WHEN itemView is clicked THEN interactor invokes open`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val view = LayoutInflater.from(testContext).inflate(R.layout.tab_tray_item, null) val holder = TestTabTrayViewHolder( view, @@ -50,6 +54,7 @@ class AbstractBrowserTabViewHolderTest { @Test fun `WHEN itemView is clicked with a selection holder THEN the select holder is invoked`() { + every { testContext.components.publicSuffixList } returns PublicSuffixList(testContext) val view = LayoutInflater.from(testContext).inflate(R.layout.tab_tray_item, null) val selectionHolder = TestSelectionHolder(emptySet()) val holder = TestTabTrayViewHolder( diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTrayListTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTrayListTest.kt index e9d826799..ab443dc01 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTrayListTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/AbstractBrowserTrayListTest.kt @@ -4,11 +4,14 @@ package org.mozilla.fenix.tabstray.browser +import io.mockk.every import io.mockk.mockk import io.mockk.verify +import mozilla.components.browser.state.store.BrowserStore import mozilla.components.support.test.robolectric.testContext import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.tabstray.TabsTrayStore @@ -17,6 +20,7 @@ class AbstractBrowserTrayListTest { @Test fun `WHEN recyclerview detaches from window THEN notify adapter`() { + every { testContext.components.core.store } returns BrowserStore() val trayList = PrivateBrowserTrayList(testContext) val adapter = mockk(relaxed = true) diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/BrowserTabsAdapterTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/BrowserTabsAdapterTest.kt index d9dffc863..30d554794 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/browser/BrowserTabsAdapterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/BrowserTabsAdapterTest.kt @@ -20,6 +20,8 @@ import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.selection.SelectionHolder import org.mozilla.fenix.tabstray.TabsTrayStore import mozilla.components.browser.state.state.createTab +import mozilla.components.browser.state.store.BrowserStore +import org.mozilla.fenix.ext.components @RunWith(FenixRobolectricTestRunner::class) class BrowserTabsAdapterTest { @@ -30,6 +32,7 @@ class BrowserTabsAdapterTest { @Test fun `WHEN bind with payloads is called THEN update the holder`() { + every { testContext.components.core.thumbnailStorage } returns mockk() val adapter = BrowserTabsAdapter(context, interactor, store, "Test") val holder = mockk(relaxed = true) @@ -51,6 +54,10 @@ class BrowserTabsAdapterTest { @Test fun `WHEN the selection holder is set THEN update the selected tab`() { + every { testContext.components.core.thumbnailStorage } returns mockk() + every { testContext.components.core.store } returns BrowserStore() + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.settings } returns mockk(relaxed = true) val adapter = BrowserTabsAdapter(context, interactor, store, "Test") val binding = TabTrayItemBinding.inflate(LayoutInflater.from(testContext)) val holder = spyk( diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolderTest.kt index 0a1beb09e..6999291c5 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/browser/InactiveTabViewHolderTest.kt @@ -5,12 +5,15 @@ package org.mozilla.fenix.tabstray.browser import android.view.LayoutInflater +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.components.AppStore +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.tabstray.TabsTrayInteractor import org.mozilla.fenix.tabstray.browser.InactiveTabViewHolder.HeaderHolder @@ -19,6 +22,7 @@ import org.mozilla.fenix.tabstray.browser.InactiveTabViewHolder.HeaderHolder class InactiveTabViewHolderTest { @Test fun `HeaderHolder - WHEN clicked THEN notify the interactor`() { + every { testContext.components.appStore } returns AppStore() val view = LayoutInflater.from(testContext).inflate(HeaderHolder.LAYOUT_ID, null) val interactor: InactiveTabsInteractor = mockk(relaxed = true) val tabsTrayInteractor: TabsTrayInteractor = mockk(relaxed = true) diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/viewholders/AbstractBrowserPageViewHolderTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/viewholders/AbstractBrowserPageViewHolderTest.kt index c56a80449..0410d7d0f 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/viewholders/AbstractBrowserPageViewHolderTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/viewholders/AbstractBrowserPageViewHolderTest.kt @@ -8,6 +8,7 @@ import android.view.LayoutInflater import android.view.View.GONE import android.view.View.VISIBLE import android.widget.TextView +import io.mockk.every import io.mockk.mockk import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore @@ -16,6 +17,7 @@ import org.junit.Assert.assertTrue import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.tabstray.TabsTrayInteractor import org.mozilla.fenix.tabstray.TabsTrayStore @@ -29,6 +31,10 @@ class AbstractBrowserPageViewHolderTest { val browserStore = BrowserStore() val interactor = mockk(relaxed = true) val browserTrayInteractor = mockk(relaxed = true) + init { + every { testContext.components.core.thumbnailStorage } returns mockk() + every { testContext.components.settings } returns mockk(relaxed = true) + } val adapter = BrowserTabsAdapter(testContext, browserTrayInteractor, tabsTrayStore, "Test") @Test diff --git a/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt b/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt index 89d53d716..3d7e28624 100644 --- a/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/trackingprotection/TrackingProtectionPanelViewTest.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.trackingprotection import android.view.ViewGroup import android.widget.FrameLayout import androidx.core.view.isVisible +import io.mockk.every import io.mockk.mockk import io.mockk.verify import mozilla.components.support.test.robolectric.testContext @@ -17,6 +18,7 @@ import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.R +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.CROSS_SITE_TRACKING_COOKIES import org.mozilla.fenix.trackingprotection.TrackingProtectionCategory.SOCIAL_MEDIA_TRACKERS @@ -99,6 +101,7 @@ class TrackingProtectionPanelViewTest { @Test fun testSocialMediaTrackerClick() { + every { testContext.components.analytics } returns mockk(relaxed = true) view.binding.socialMediaTrackers.performClick() verify { interactor.openDetails(SOCIAL_MEDIA_TRACKERS, categoryBlocked = true) } @@ -108,6 +111,7 @@ class TrackingProtectionPanelViewTest { @Test fun testCrossSiteTrackerClick() { + every { testContext.components.analytics } returns mockk(relaxed = true) view.binding.crossSiteTracking.performClick() verify { interactor.openDetails(CROSS_SITE_TRACKING_COOKIES, categoryBlocked = true) } diff --git a/app/src/test/java/org/mozilla/fenix/whatsnew/WhatsNewTest.kt b/app/src/test/java/org/mozilla/fenix/whatsnew/WhatsNewTest.kt index dc16c7a34..df7c0b3d3 100644 --- a/app/src/test/java/org/mozilla/fenix/whatsnew/WhatsNewTest.kt +++ b/app/src/test/java/org/mozilla/fenix/whatsnew/WhatsNewTest.kt @@ -5,13 +5,16 @@ package org.mozilla.fenix.whatsnew * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ import androidx.preference.PreferenceManager +import io.mockk.every import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mozilla.fenix.ext.clearAndCommit +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager @RunWith(FenixRobolectricTestRunner::class) class WhatsNewTest { @@ -27,6 +30,7 @@ class WhatsNewTest { @Test fun `should highlight after fresh install`() { + every { testContext.components.strictMode } returns TestStrictModeManager() assertEquals(true, WhatsNew.shouldHighlightWhatsNew(testContext)) } @@ -80,6 +84,7 @@ class WhatsNewTest { @Test fun `should not highlight after user viewed what's new`() { + every { testContext.components.strictMode } returns TestStrictModeManager() assertEquals(true, WhatsNew.shouldHighlightWhatsNew(testContext)) WhatsNew.userViewedWhatsNew(testContext) diff --git a/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt b/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt index 667ea82dd..cb8fd76f1 100644 --- a/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt +++ b/app/src/test/java/org/mozilla/fenix/widget/VoiceSearchActivityTest.kt @@ -15,6 +15,9 @@ import android.speech.RecognizerIntent.EXTRA_RESULTS import android.speech.RecognizerIntent.LANGUAGE_MODEL_FREE_FORM import androidx.appcompat.app.AppCompatActivity.RESULT_OK import androidx.test.core.app.ApplicationProvider +import io.mockk.every +import io.mockk.mockk +import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -25,7 +28,9 @@ import org.junit.runner.RunWith import org.mozilla.fenix.FenixApplication import org.mozilla.fenix.HomeActivity.Companion.OPEN_TO_BROWSER_AND_LOAD import org.mozilla.fenix.IntentReceiverActivity +import org.mozilla.fenix.ext.components import org.mozilla.fenix.helpers.FenixRobolectricTestRunner +import org.mozilla.fenix.helpers.perf.TestStrictModeManager import org.mozilla.fenix.widget.VoiceSearchActivity.Companion.PREVIOUS_INTENT import org.mozilla.fenix.widget.VoiceSearchActivity.Companion.SPEECH_PROCESSING import org.mozilla.fenix.widget.VoiceSearchActivity.Companion.SPEECH_REQUEST_CODE @@ -64,6 +69,8 @@ class VoiceSearchActivityTest { @Test fun `process intent with speech processing set to true`() { + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.strictMode } returns TestStrictModeManager() allowVoiceIntentToResolveActivity() controller.create() @@ -135,6 +142,8 @@ class VoiceSearchActivityTest { @Test fun `handle speech result`() { + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.strictMode } returns TestStrictModeManager() allowVoiceIntentToResolveActivity() controller.create() @@ -160,6 +169,8 @@ class VoiceSearchActivityTest { @Test fun `handle invalid result code`() { + every { testContext.components.analytics } returns mockk(relaxed = true) + every { testContext.components.strictMode } returns TestStrictModeManager() allowVoiceIntentToResolveActivity() controller.create() diff --git a/build.gradle b/build.gradle index 6c5178971..4906425ba 100644 --- a/build.gradle +++ b/build.gradle @@ -67,7 +67,6 @@ buildscript { classpath Deps.tools_kotlingradle classpath Deps.tools_benchmarkgradle classpath Deps.androidx_safeargs - classpath Deps.allopen classpath Deps.osslicenses_plugin classpath "org.mozilla.components:tooling-glean-gradle:${Versions.mozilla_android_components}" diff --git a/buildSrc/src/main/java/Dependencies.kt b/buildSrc/src/main/java/Dependencies.kt index 692495664..811d51d03 100644 --- a/buildSrc/src/main/java/Dependencies.kt +++ b/buildSrc/src/main/java/Dependencies.kt @@ -72,7 +72,6 @@ object Deps { const val kotlin_coroutines_test = "org.jetbrains.kotlinx:kotlinx-coroutines-test:${Versions.coroutines}" const val kotlin_coroutines_android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.coroutines}" - const val allopen = "org.jetbrains.kotlin:kotlin-allopen:${Versions.kotlin}" const val osslicenses_plugin = "com.google.android.gms:oss-licenses-plugin:${Versions.osslicenses_plugin}" const val mozilla_compose_awesomebar = "org.mozilla.components:compose-awesomebar:${Versions.mozilla_android_components}"