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 5from marionette_driver.errors import JavascriptException 6 7from marionette_harness import MarionetteTestCase 8 9 10class TestPreferences(MarionetteTestCase): 11 prefs = { 12 "bool": "marionette.test.bool", 13 "int": "marionette.test.int", 14 "string": "marionette.test.string", 15 } 16 17 def tearDown(self): 18 for pref in self.prefs.values(): 19 self.marionette.clear_pref(pref) 20 21 super(TestPreferences, self).tearDown() 22 23 def test_clear_pref(self): 24 self.assertIsNone(self.marionette.get_pref(self.prefs["bool"])) 25 26 self.marionette.set_pref(self.prefs["bool"], True) 27 self.assertTrue(self.marionette.get_pref(self.prefs["bool"])) 28 29 self.marionette.clear_pref(self.prefs["bool"]) 30 self.assertIsNone(self.marionette.get_pref(self.prefs["bool"])) 31 32 def test_get_and_set_pref(self): 33 # By default none of the preferences are set 34 self.assertIsNone(self.marionette.get_pref(self.prefs["bool"])) 35 self.assertIsNone(self.marionette.get_pref(self.prefs["int"])) 36 self.assertIsNone(self.marionette.get_pref(self.prefs["string"])) 37 38 # Test boolean values 39 self.marionette.set_pref(self.prefs["bool"], True) 40 value = self.marionette.get_pref(self.prefs["bool"]) 41 self.assertTrue(value) 42 self.assertEqual(type(value), bool) 43 44 # Test int values 45 self.marionette.set_pref(self.prefs["int"], 42) 46 value = self.marionette.get_pref(self.prefs["int"]) 47 self.assertEqual(value, 42) 48 self.assertEqual(type(value), int) 49 50 # Test string values 51 self.marionette.set_pref(self.prefs["string"], "abc") 52 value = self.marionette.get_pref(self.prefs["string"]) 53 self.assertEqual(value, "abc") 54 self.assertTrue(isinstance(value, basestring)) 55 56 # Test reset value 57 self.marionette.set_pref(self.prefs["string"], None) 58 self.assertIsNone(self.marionette.get_pref(self.prefs["string"])) 59 60 def test_get_set_pref_default_branch(self): 61 pref_default = "marionette.test.pref_default1" 62 self.assertIsNone(self.marionette.get_pref(self.prefs["string"])) 63 64 self.marionette.set_pref(pref_default, "default_value", default_branch=True) 65 self.assertEqual(self.marionette.get_pref(pref_default), "default_value") 66 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 67 "default_value") 68 69 self.marionette.set_pref(pref_default, "user_value") 70 self.assertEqual(self.marionette.get_pref(pref_default), "user_value") 71 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 72 "default_value") 73 74 self.marionette.clear_pref(pref_default) 75 self.assertEqual(self.marionette.get_pref(pref_default), "default_value") 76 77 def test_get_pref_value_type(self): 78 # Without a given value type the properties URL will be returned only 79 pref_complex = "browser.menu.showCharacterEncoding" 80 properties_file = "chrome://browser/locale/browser.properties" 81 self.assertEqual(self.marionette.get_pref(pref_complex, default_branch=True), 82 properties_file) 83 84 # Otherwise the property named like the pref will be translated 85 value = self.marionette.get_pref(pref_complex, default_branch=True, 86 value_type="nsIPrefLocalizedString") 87 self.assertNotEqual(value, properties_file) 88 89 def test_set_prefs(self): 90 # By default none of the preferences are set 91 self.assertIsNone(self.marionette.get_pref(self.prefs["bool"])) 92 self.assertIsNone(self.marionette.get_pref(self.prefs["int"])) 93 self.assertIsNone(self.marionette.get_pref(self.prefs["string"])) 94 95 # Set a value on the default branch first 96 pref_default = "marionette.test.pref_default2" 97 self.assertIsNone(self.marionette.get_pref(pref_default)) 98 self.marionette.set_prefs({pref_default: "default_value"}, default_branch=True) 99 100 # Set user values 101 prefs = {self.prefs["bool"]: True, self.prefs["int"]: 42, 102 self.prefs["string"]: "abc", pref_default: "user_value"} 103 self.marionette.set_prefs(prefs) 104 105 self.assertTrue(self.marionette.get_pref(self.prefs["bool"])) 106 self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42) 107 self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc") 108 self.assertEqual(self.marionette.get_pref(pref_default), "user_value") 109 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 110 "default_value") 111 112 def test_using_prefs(self): 113 # Test that multiple preferences can be set with "using_prefs", and that 114 # they are set correctly and unset correctly after leaving the context 115 # manager. 116 pref_not_existent = "marionette.test.not_existent1" 117 pref_default = "marionette.test.pref_default3" 118 119 self.marionette.set_prefs({self.prefs["string"]: "abc", 120 self.prefs["int"]: 42, 121 self.prefs["bool"]: False, 122 }) 123 self.assertFalse(self.marionette.get_pref(self.prefs["bool"])) 124 self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42) 125 self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc") 126 self.assertIsNone(self.marionette.get_pref(pref_not_existent)) 127 128 with self.marionette.using_prefs({self.prefs["bool"]: True, 129 self.prefs["int"]: 24, 130 self.prefs["string"]: "def", 131 pref_not_existent: "existent"}): 132 133 self.assertTrue(self.marionette.get_pref(self.prefs["bool"]), True) 134 self.assertEquals(self.marionette.get_pref(self.prefs["int"]), 24) 135 self.assertEquals(self.marionette.get_pref(self.prefs["string"]), "def") 136 self.assertEquals(self.marionette.get_pref(pref_not_existent), "existent") 137 138 self.assertFalse(self.marionette.get_pref(self.prefs["bool"])) 139 self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42) 140 self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc") 141 self.assertIsNone(self.marionette.get_pref(pref_not_existent)) 142 143 # Using context with default branch 144 self.marionette.set_pref(pref_default, "default_value", default_branch=True) 145 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 146 "default_value") 147 148 with self.marionette.using_prefs({pref_default: "new_value"}, default_branch=True): 149 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 150 "new_value") 151 152 self.assertEqual(self.marionette.get_pref(pref_default, default_branch=True), 153 "default_value") 154 155 def test_using_prefs_exception(self): 156 # Test that throwing an exception inside the context manager doesn"t 157 # prevent the preferences from being restored at context manager exit. 158 self.marionette.set_pref(self.prefs["string"], "abc") 159 160 try: 161 with self.marionette.using_prefs({self.prefs["string"]: "def"}): 162 self.assertEquals(self.marionette.get_pref(self.prefs["string"]), "def") 163 self.marionette.execute_script("return foo.bar.baz;") 164 except JavascriptException: 165 pass 166 167 self.assertEquals(self.marionette.get_pref(self.prefs["string"]), "abc") 168