Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

# 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/.
import six
from marionette_driver import geckoinstance
from marionette_driver.errors import JavascriptException
from marionette_harness import (
MarionetteTestCase,
run_if_manage_instance,
)
class TestPreferences(MarionetteTestCase):
prefs = {
"bool": "marionette.test.bool",
"int": "marionette.test.int",
"string": "marionette.test.string",
}
def tearDown(self):
for pref in self.prefs.values():
self.marionette.clear_pref(pref)
super(TestPreferences, self).tearDown()
def test_gecko_instance_preferences(self):
required_prefs = geckoinstance.GeckoInstance.required_prefs
for key, value in six.iteritems(required_prefs):
self.assertEqual(
self.marionette.get_pref(key),
value,
"Preference {} hasn't been set to {}".format(key, repr(value)),
)
def test_desktop_instance_preferences(self):
required_prefs = geckoinstance.DesktopInstance.desktop_prefs
for key, value in six.iteritems(required_prefs):
self.assertEqual(
self.marionette.get_pref(key),
value,
"Preference {} hasn't been set to {}".format(key, value),
)
def test_clear_pref(self):
self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
self.marionette.set_pref(self.prefs["bool"], True)
self.assertTrue(self.marionette.get_pref(self.prefs["bool"]))
self.marionette.clear_pref(self.prefs["bool"])
self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
def test_get_and_set_pref(self):
# By default none of the preferences are set
self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
self.assertIsNone(self.marionette.get_pref(self.prefs["int"]))
self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
# Test boolean values
self.marionette.set_pref(self.prefs["bool"], True)
value = self.marionette.get_pref(self.prefs["bool"])
self.assertTrue(value)
self.assertEqual(type(value), bool)
# Test int values
self.marionette.set_pref(self.prefs["int"], 42)
value = self.marionette.get_pref(self.prefs["int"])
self.assertEqual(value, 42)
self.assertEqual(type(value), int)
# Test string values
self.marionette.set_pref(self.prefs["string"], "abc")
value = self.marionette.get_pref(self.prefs["string"])
self.assertEqual(value, "abc")
self.assertTrue(isinstance(value, six.string_types))
# Test reset value
self.marionette.set_pref(self.prefs["string"], None)
self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
def test_get_set_pref_default_branch(self):
pref_default = "marionette.test.pref_default1"
self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
self.marionette.set_pref(pref_default, "default_value", default_branch=True)
self.assertEqual(self.marionette.get_pref(pref_default), "default_value")
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "default_value"
)
self.marionette.set_pref(pref_default, "user_value")
self.assertEqual(self.marionette.get_pref(pref_default), "user_value")
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "default_value"
)
self.marionette.clear_pref(pref_default)
self.assertEqual(self.marionette.get_pref(pref_default), "default_value")
def test_get_pref_value_type(self):
# Without a given value type the properties URL will be returned only
pref_complex = "browser.menu.showCharacterEncoding"
self.assertEqual(
self.marionette.get_pref(pref_complex, default_branch=True), properties_file
)
# Otherwise the property named like the pref will be translated
value = self.marionette.get_pref(
pref_complex, default_branch=True, value_type="nsIPrefLocalizedString"
)
self.assertNotEqual(value, properties_file)
def test_set_prefs(self):
# By default none of the preferences are set
self.assertIsNone(self.marionette.get_pref(self.prefs["bool"]))
self.assertIsNone(self.marionette.get_pref(self.prefs["int"]))
self.assertIsNone(self.marionette.get_pref(self.prefs["string"]))
# Set a value on the default branch first
pref_default = "marionette.test.pref_default2"
self.assertIsNone(self.marionette.get_pref(pref_default))
self.marionette.set_prefs({pref_default: "default_value"}, default_branch=True)
# Set user values
prefs = {
self.prefs["bool"]: True,
self.prefs["int"]: 42,
self.prefs["string"]: "abc",
pref_default: "user_value",
}
self.marionette.set_prefs(prefs)
self.assertTrue(self.marionette.get_pref(self.prefs["bool"]))
self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
self.assertEqual(self.marionette.get_pref(pref_default), "user_value")
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "default_value"
)
def test_using_prefs(self):
# Test that multiple preferences can be set with "using_prefs", and that
# they are set correctly and unset correctly after leaving the context
# manager.
pref_not_existent = "marionette.test.not_existent1"
pref_default = "marionette.test.pref_default3"
self.marionette.set_prefs(
{
self.prefs["string"]: "abc",
self.prefs["int"]: 42,
self.prefs["bool"]: False,
}
)
self.assertFalse(self.marionette.get_pref(self.prefs["bool"]))
self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
self.assertIsNone(self.marionette.get_pref(pref_not_existent))
with self.marionette.using_prefs(
{
self.prefs["bool"]: True,
self.prefs["int"]: 24,
self.prefs["string"]: "def",
pref_not_existent: "existent",
}
):
self.assertTrue(self.marionette.get_pref(self.prefs["bool"]), True)
self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 24)
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "def")
self.assertEqual(self.marionette.get_pref(pref_not_existent), "existent")
self.assertFalse(self.marionette.get_pref(self.prefs["bool"]))
self.assertEqual(self.marionette.get_pref(self.prefs["int"]), 42)
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")
self.assertIsNone(self.marionette.get_pref(pref_not_existent))
# Using context with default branch
self.marionette.set_pref(pref_default, "default_value", default_branch=True)
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "default_value"
)
with self.marionette.using_prefs(
{pref_default: "new_value"}, default_branch=True
):
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "new_value"
)
self.assertEqual(
self.marionette.get_pref(pref_default, default_branch=True), "default_value"
)
def test_using_prefs_exception(self):
# Test that throwing an exception inside the context manager doesn"t
# prevent the preferences from being restored at context manager exit.
self.marionette.set_pref(self.prefs["string"], "abc")
try:
with self.marionette.using_prefs({self.prefs["string"]: "def"}):
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "def")
self.marionette.execute_script("return foo.bar.baz;")
except JavascriptException:
pass
self.assertEqual(self.marionette.get_pref(self.prefs["string"]), "abc")