/* 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 androidx.test.ext.junit.runners.AndroidJUnit4 import kotlinx.coroutines.ObsoleteCoroutinesApi import mozilla.components.feature.sitepermissions.SitePermissionsRules import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.ASK_TO_ALLOW import mozilla.components.feature.sitepermissions.SitePermissionsRules.Action.BLOCKED 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.TestApplication import org.mozilla.fenix.ext.clearAndCommit import org.mozilla.fenix.ext.settings import org.mozilla.fenix.settings.deletebrowsingdata.DeleteBrowsingDataOnQuitType import org.mozilla.fenix.settings.PhoneFeature import org.robolectric.annotation.Config @ObsoleteCoroutinesApi @RunWith(AndroidJUnit4::class) @Config(application = TestApplication::class) class SettingsTest { lateinit var settings: Settings @Before fun setUp() { settings = testContext.settings().apply(Settings::clear) } @Test fun usePrivateMode() { // When just created // Then assertFalse(settings.usePrivateMode) // When settings.usePrivateMode = true // Then assertTrue(settings.usePrivateMode) // When settings.usePrivateMode = false // Then assertFalse(settings.usePrivateMode) } @Test fun alwaysOpenInPrivateMode() { // When just created // Then assertFalse(settings.alwaysOpenInPrivateMode) // When settings.alwaysOpenInPrivateMode = true // Then assertTrue(settings.alwaysOpenInPrivateMode) // When settings.alwaysOpenInPrivateMode = false // Then assertFalse(settings.usePrivateMode) } @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 isCrashReportingEnabled_enabledInBuild() { // When clearExistingInstance() val settings = testContext.settings(true) .apply(Settings::clear) // Then assertTrue(settings.isCrashReportingEnabled) } @Test fun isCrashReportingEnabled_disabledInBuild() { // When clearExistingInstance() val settings = testContext.settings(false) .apply(Settings::clear) // Then assertFalse(settings.isCrashReportingEnabled) } @Test fun isRemoteDebuggingEnabled() { // When just created // Then assertFalse(settings.isRemoteDebuggingEnabled) } @Test fun isTelemetryEnabled() { // When just created // Then assertTrue(settings.isTelemetryEnabled) } @Test fun autoBounceQuickActionSheetCount() { // When just created // Then assertEquals(0, settings.autoBounceQuickActionSheetCount) // When settings.incrementAutomaticBounceQuickActionSheetCount() settings.incrementAutomaticBounceQuickActionSheetCount() // Then assertEquals(2, settings.autoBounceQuickActionSheetCount) } @Test fun shouldAutoBounceQuickActionSheet() { // When just created // Then assertTrue(settings.shouldAutoBounceQuickActionSheet) // When settings.incrementAutomaticBounceQuickActionSheetCount() // Then assertTrue(settings.shouldAutoBounceQuickActionSheet) // When settings.incrementAutomaticBounceQuickActionSheetCount() // Then assertFalse(settings.shouldAutoBounceQuickActionSheet) } @Test fun shouldUseLightTheme() { // When just created // Then assertFalse(settings.shouldUseLightTheme) // When settings.shouldUseLightTheme = true // Then assertTrue(settings.shouldUseLightTheme) } @Test fun shouldUseAutoSize() { // When just created // Then assertTrue(settings.shouldUseAutoSize) // When settings.shouldUseAutoSize = false // Then assertFalse(settings.shouldUseAutoSize) } @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 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 shouldUseTrackingProtectionStrict() { // When // Then assertTrue(settings.useStrictTrackingProtection) } @Test fun shouldUseAutoBatteryTheme() { // When just created // Then assertFalse(settings.shouldUseAutoBatteryTheme) } @Test fun showSearchSuggestions() { // When just created // Then assertTrue(settings.shouldShowSearchSuggestions) } @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( allAskToAllow(), settings.getSitePermissionsCustomSettingsRules() ) } @Test fun getSitePermissionsCustomSettingsRules_camera() { // When settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.CAMERA, BLOCKED) // Then assertEquals( allAskToAllow().copy(camera = BLOCKED), settings.getSitePermissionsCustomSettingsRules() ) } @Test fun getSitePermissionsCustomSettingsRules_notification() { // When settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.NOTIFICATION, BLOCKED) // Then assertEquals( allAskToAllow().copy(notification = BLOCKED), settings.getSitePermissionsCustomSettingsRules() ) } @Test fun getSitePermissionsCustomSettingsRules_location() { // When settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.LOCATION, BLOCKED) // Then assertEquals( allAskToAllow().copy(location = BLOCKED), settings.getSitePermissionsCustomSettingsRules() ) } @Test fun getSitePermissionsCustomSettingsRules_microphone() { // When settings.setSitePermissionsPhoneFeatureAction(PhoneFeature.MICROPHONE, BLOCKED) // Then assertEquals( allAskToAllow().copy(microphone = BLOCKED), settings.getSitePermissionsCustomSettingsRules() ) } } private fun clearExistingInstance() { Settings.instance = null } private fun Settings.clear() { preferences.clearAndCommit() } private fun allAskToAllow() = SitePermissionsRules( camera = ASK_TO_ALLOW, location = ASK_TO_ALLOW, microphone = ASK_TO_ALLOW, notification = ASK_TO_ALLOW )