tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_prefs.py (9142B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 from marionette_driver import geckoinstance
      6 from marionette_driver.errors import JavascriptException
      7 
      8 from marionette_harness import (
      9    MarionetteTestCase,
     10 )
     11 
     12 
     13 class TestPreferences(MarionetteTestCase):
     14    prefs = {
     15        "bool": "marionette.test.bool",
     16        "int": "marionette.test.int",
     17        "string": "marionette.test.string",
     18    }
     19 
     20    def tearDown(self):
     21        for pref in self.prefs.values():
     22            self.marionette.clear_pref(pref)
     23 
     24        super(TestPreferences, self).tearDown()
     25 
     26    def test_gecko_instance_preferences(self):
     27        required_prefs = geckoinstance.GeckoInstance.required_prefs
     28 
     29        for key, value in required_prefs.items():
     30            self.assertEqual(
     31                self.marionette.get_pref(key),
     32                value,
     33                "Preference {} hasn't been set to {}".format(key, repr(value)),
     34            )
     35 
     36    def test_desktop_instance_preferences(self):
     37        required_prefs = geckoinstance.DesktopInstance.desktop_prefs
     38 
     39        for key, value in required_prefs.items():
     40            self.assertEqual(
     41                self.marionette.get_pref(key),
     42                value,
     43                "Preference {} hasn't been set to {}".format(key, value),
     44            )
     45 
     46    def test_clear_pref(self):
     47        self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
     48 
     49        self.marionette.set_pref(self.prefs["bool"], True)
     50        self.assertTrue(self.marionette.get_pref(self.prefs["bool"]))
     51 
     52        self.marionette.clear_pref(self.prefs["bool"])
     53        self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
     54 
     55    def test_get_and_set_pref(self):
     56        # By default none of the preferences are set
     57        self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
     58        self.assertIsNone(self.marionette.get_pref(self.prefs["int"]))
     59        self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
     60 
     61        # Test boolean values
     62        self.marionette.set_pref(self.prefs["bool"], True)
     63        value = self.marionette.get_pref(self.prefs["bool"])
     64        self.assertTrue(value)
     65        self.assertEqual(type(value), bool)
     66 
     67        # Test int values
     68        self.marionette.set_pref(self.prefs["int"], 42)
     69        value = self.marionette.get_pref(self.prefs["int"])
     70        self.assertEqual(value, 42)
     71        self.assertEqual(type(value), int)
     72 
     73        # Test string values
     74        self.marionette.set_pref(self.prefs["string"], "abc")
     75        value = self.marionette.get_pref(self.prefs["string"])
     76        self.assertEqual(value, "abc")
     77        self.assertTrue(isinstance(value, str))
     78 
     79        # Test reset value
     80        self.marionette.set_pref(self.prefs["string"], None)
     81        self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
     82 
     83    def test_get_set_pref_default_branch(self):
     84        pref_default = "marionette.test.pref_default1"
     85        self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
     86 
     87        self.marionette.set_pref(pref_default, "default_value", default_branch=True)
     88        self.assertEqual(self.marionette.get_pref(pref_default), "default_value")
     89        self.assertEqual(
     90            self.marionette.get_pref(pref_default, default_branch=True), "default_value"
     91        )
     92 
     93        self.marionette.set_pref(pref_default, "user_value")
     94        self.assertEqual(self.marionette.get_pref(pref_default), "user_value")
     95        self.assertEqual(
     96            self.marionette.get_pref(pref_default, default_branch=True), "default_value"
     97        )
     98 
     99        self.marionette.clear_pref(pref_default)
    100        self.assertEqual(self.marionette.get_pref(pref_default), "default_value")
    101 
    102    def test_get_pref_value_type(self):
    103        pref_complex = "marionette.test.complex"
    104 
    105        # Set a nsIFile complex preference pointing to a temporary folder.
    106        with self.marionette.using_context(self.marionette.CONTEXT_CHROME):
    107            expected_path = self.marionette.execute_script(
    108                """
    109                let pref = arguments[0];
    110                let tempDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
    111                Services.prefs.setComplexValue(pref, Ci.nsIFile, tempDir);
    112                return tempDir.path;
    113                """,
    114                script_args=(pref_complex,),
    115            )
    116 
    117        # Read the complex preference without a value_type,
    118        # the path as a string should be returned.
    119        self.assertEqual(
    120            self.marionette.get_pref(pref_complex, default_branch=False), expected_path
    121        )
    122 
    123        # Otherwise the property named like the pref will be translated
    124        value = self.marionette.get_pref(
    125            pref_complex, default_branch=False, value_type="nsIFile"
    126        )
    127        self.assertNotEqual(value, expected_path)
    128 
    129    def test_set_prefs(self):
    130        # By default none of the preferences are set
    131        self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
    132        self.assertIsNone(self.marionette.get_pref(self.prefs["int"]))
    133        self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
    134 
    135        # Set a value on the default branch first
    136        pref_default = "marionette.test.pref_default2"
    137        self.assertIsNone(self.marionette.get_pref(pref_default))
    138        self.marionette.set_prefs({pref_default: "default_value"}, default_branch=True)
    139 
    140        # Set user values
    141        prefs = {
    142            self.prefs["bool"]: True,
    143            self.prefs["int"]: 42,
    144            self.prefs["string"]: "abc",
    145            pref_default: "user_value",
    146        }
    147        self.marionette.set_prefs(prefs)
    148 
    149        self.assertTrue(self.marionette.get_pref(self.prefs["bool"]))
    150        self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
    151        self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
    152        self.assertEqual(self.marionette.get_pref(pref_default), "user_value")
    153        self.assertEqual(
    154            self.marionette.get_pref(pref_default, default_branch=True), "default_value"
    155        )
    156 
    157    def test_using_prefs(self):
    158        # Test that multiple preferences can be set with "using_prefs", and that
    159        # they are set correctly and unset correctly after leaving the context
    160        # manager.
    161        pref_not_existent = "marionette.test.not_existent1"
    162        pref_default = "marionette.test.pref_default3"
    163 
    164        self.marionette.set_prefs(
    165            {
    166                self.prefs["string"]: "abc",
    167                self.prefs["int"]: 42,
    168                self.prefs["bool"]: False,
    169            }
    170        )
    171        self.assertFalse(self.marionette.get_pref(self.prefs["bool"]))
    172        self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
    173        self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
    174        self.assertIsNone(self.marionette.get_pref(pref_not_existent))
    175 
    176        with self.marionette.using_prefs(
    177            {
    178                self.prefs["bool"]: True,
    179                self.prefs["int"]: 24,
    180                self.prefs["string"]: "def",
    181                pref_not_existent: "existent",
    182            }
    183        ):
    184            self.assertTrue(self.marionette.get_pref(self.prefs["bool"]), True)
    185            self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 24)
    186            self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "def")
    187            self.assertEqual(self.marionette.get_pref(pref_not_existent), "existent")
    188 
    189        self.assertFalse(self.marionette.get_pref(self.prefs["bool"]))
    190        self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
    191        self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
    192        self.assertIsNone(self.marionette.get_pref(pref_not_existent))
    193 
    194        # Using context with default branch
    195        self.marionette.set_pref(pref_default, "default_value", default_branch=True)
    196        self.assertEqual(
    197            self.marionette.get_pref(pref_default, default_branch=True), "default_value"
    198        )
    199 
    200        with self.marionette.using_prefs(
    201            {pref_default: "new_value"}, default_branch=True
    202        ):
    203            self.assertEqual(
    204                self.marionette.get_pref(pref_default, default_branch=True), "new_value"
    205            )
    206 
    207        self.assertEqual(
    208            self.marionette.get_pref(pref_default, default_branch=True), "default_value"
    209        )
    210 
    211    def test_using_prefs_exception(self):
    212        # Test that throwing an exception inside the context manager doesn"t
    213        # prevent the preferences from being restored at context manager exit.
    214        self.marionette.set_pref(self.prefs["string"], "abc")
    215 
    216        try:
    217            with self.marionette.using_prefs({self.prefs["string"]: "def"}):
    218                self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "def")
    219                self.marionette.execute_script("return foo.bar.baz;")
    220        except JavascriptException:
    221            pass
    222 
    223        self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")