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")