|
|
|
/* 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
|
|
|
|
|
|
|
|
import mozilla.components.feature.sitepermissions.SitePermissionsRules
|
|
|
|
import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ALLOWED
|
|
|
|
import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ASK_TO_ALLOW
|
|
|
|
import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.BLOCKED
|
|
|
|
import mozilla.components.feature.sitepermissions.SitePermissionsRules.AutoplayAction
|
|
|
|
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.helpers.FenixRobolectricTestRunner
|
|
|
|
import org.mozilla.fenix.settings.PhoneFeature
|
|
|
|
import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType
|
|
|
|
|
|
|
|
@RunWith(FenixRobolectricTestRunner::class)
|
|
|
|
class SettingsTest {
|
|
|
|
|
|
|
|
lateinit var settings: Settings
|
|
|
|
|
|
|
|
private val defaultPermissions = SitePermissionsRules(
|
|
|
|
camera = ASK_TO_ALLOW,
|
|
|
|
location = ASK_TO_ALLOW,
|
|
|
|
microphone = ASK_TO_ALLOW,
|
|
|
|
notification = ASK_TO_ALLOW,
|
|
|
|
autoplayAudible = AutoplayAction.BLOCKED,
|
|
|
|
autoplayInaudible = AutoplayAction.BLOCKED
|
|
|
|
)
|
|
|
|
|
|
|
|
@Before
|
|
|
|
fun setUp() {
|
|
|
|
settings = Settings(testContext)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun launchLinksInPrivateTab() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.openLinksInAPrivateTab)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.openLinksInAPrivateTab = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.openLinksInAPrivateTab)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun clearDataOnQuit() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldDeleteBrowsingDataOnQuit)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldDeleteBrowsingDataOnQuit = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldDeleteBrowsingDataOnQuit)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldDeleteBrowsingDataOnQuit = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldDeleteBrowsingDataOnQuit)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun clearAnyDataOnQuit() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldDeleteAnyDataOnQuit())
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.TABS, true)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldDeleteAnyDataOnQuit())
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.PERMISSIONS, true)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldDeleteAnyDataOnQuit())
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.TABS, false)
|
|
|
|
settings.setDeleteDataOnQuit(DeleteBrowsingDataOnQuitType.PERMISSIONS, false)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldDeleteAnyDataOnQuit())
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun defaultSearchEngineName() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals("", settings.defaultSearchEngineName)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.defaultSearchEngineName = "Mozilla"
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals("Mozilla", settings.defaultSearchEngineName)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun isRemoteDebuggingEnabled() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.isRemoteDebuggingEnabled)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun isTelemetryEnabled() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.isTelemetryEnabled)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun showLoginsDialogWarningSync() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(0, settings.loginsSecureWarningSyncCount.value)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.incrementShowLoginsSecureWarningSyncCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(1, settings.loginsSecureWarningSyncCount.value)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowLoginsDialogWarningSync() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowSecurityPinWarningSync)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.incrementShowLoginsSecureWarningSyncCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowSecurityPinWarningSync)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun showLoginsDialogWarning() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(0, settings.loginsSecureWarningCount.value)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.incrementShowLoginsSecureWarningCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(1, settings.loginsSecureWarningCount.value)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowLoginsDialogWarning() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowSecurityPinWarning)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.incrementShowLoginsSecureWarningCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowSecurityPinWarning)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseLightTheme() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseLightTheme)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldUseLightTheme = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldUseLightTheme)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldManuallyCloseTabs() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.manuallyCloseTabs)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.manuallyCloseTabs = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseLightTheme)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getTabTimeout() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.manuallyCloseTabs)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.manuallyCloseTabs = false
|
|
|
|
settings.closeTabsAfterOneDay = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(settings.getTabTimeout(), Settings.ONE_DAY_MS)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.closeTabsAfterOneDay = false
|
|
|
|
settings.closeTabsAfterOneWeek = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(settings.getTabTimeout(), Settings.ONE_WEEK_MS)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.closeTabsAfterOneWeek = false
|
|
|
|
settings.closeTabsAfterOneMonth = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(settings.getTabTimeout(), Settings.ONE_MONTH_MS)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseAutoSize() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldUseAutoSize)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldUseAutoSize = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseAutoSize)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldAutofill() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldAutofillLogins)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldAutofillLogins = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldAutofillLogins)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun fontSizeFactor() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(1f, settings.fontSizeFactor)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.fontSizeFactor = 2f
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(2f, settings.fontSizeFactor)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowClipboardSuggestion() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowClipboardSuggestions)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowSearchShortcuts() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowSearchShortcuts)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowHistorySuggestions() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowHistorySuggestions)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowBookmarkSuggestions() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowBookmarkSuggestions)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseDarkTheme() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseDarkTheme)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldFollowDeviceTheme() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldFollowDeviceTheme)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldFollowDeviceTheme = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldFollowDeviceTheme)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseTrackingProtection() {
|
|
|
|
// When
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldUseTrackingProtection)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.shouldUseTrackingProtection = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseTrackingProtection)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldShowCollectionsPlaceholderOnHome() {
|
|
|
|
// When
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.showCollectionsPlaceholderOnHome)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.showCollectionsPlaceholderOnHome = false
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.showCollectionsPlaceholderOnHome)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldSetOpenInAppOpened() {
|
|
|
|
// When
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.openInAppOpened)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.openInAppOpened = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.openInAppOpened)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldSetInstallPwaOpened() {
|
|
|
|
// When
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.installPwaOpened)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.installPwaOpened = true
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.installPwaOpened)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseTrackingProtectionStrict() {
|
|
|
|
// When
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.useStrictTrackingProtection)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun shouldUseAutoBatteryTheme() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldUseAutoBatteryTheme)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun showSearchSuggestions() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowSearchSuggestions)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun showPwaFragment() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowPwaOnboarding)
|
|
|
|
|
|
|
|
// When visited once
|
|
|
|
settings.incrementVisitedInstallableCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowPwaOnboarding)
|
|
|
|
|
|
|
|
// When visited twice
|
|
|
|
settings.incrementVisitedInstallableCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertFalse(settings.shouldShowPwaOnboarding)
|
|
|
|
|
|
|
|
// When visited thrice
|
|
|
|
settings.incrementVisitedInstallableCount()
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertTrue(settings.shouldShowPwaOnboarding)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun sitePermissionsPhoneFeatureCameraAction() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
ASK_TO_ALLOW,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA)
|
|
|
|
)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(BLOCKED, settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA))
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun sitePermissionsPhoneFeatureMicrophoneAction() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
ASK_TO_ALLOW,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.MICROPHONE)
|
|
|
|
)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.MICROPHONE, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
BLOCKED,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.MICROPHONE)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun sitePermissionsPhoneFeatureNotificationAction() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
ASK_TO_ALLOW,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.NOTIFICATION)
|
|
|
|
)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.NOTIFICATION, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
BLOCKED,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.NOTIFICATION)
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun sitePermissionsPhoneFeatureLocation() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
ASK_TO_ALLOW,
|
|
|
|
settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION)
|
|
|
|
)
|
|
|
|
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(BLOCKED, settings.getSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION))
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_default() {
|
|
|
|
// When just created
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions,
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_camera() {
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(camera = BLOCKED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_notification() {
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.NOTIFICATION, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(notification = BLOCKED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_location() {
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(location = BLOCKED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_microphone() {
|
|
|
|
// When
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.MICROPHONE, BLOCKED)
|
|
|
|
|
|
|
|
// Then
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(microphone = BLOCKED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_autoplayAudible() {
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_AUDIBLE, ALLOWED)
|
|
|
|
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(autoplayAudible = ALLOWED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
@Test
|
|
|
|
fun getSitePermissionsCustomSettingsRules_autoplayInaudible() {
|
|
|
|
settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.AUTOPLAY_INAUDIBLE, ALLOWED)
|
|
|
|
|
|
|
|
assertEquals(
|
|
|
|
defaultPermissions.copy(autoplayInaudible = ALLOWED),
|
|
|
|
settings.getSitePermissionsCustomSettingsRules()
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|