diff options
Diffstat (limited to 'testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py')
-rw-r--r-- | testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py b/testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py new file mode 100644 index 000000000..38c678556 --- /dev/null +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_quit_restart.py @@ -0,0 +1,173 @@ +# 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/. + +from marionette_driver.errors import MarionetteException + +from marionette_harness import MarionetteTestCase + + +class TestQuitRestart(MarionetteTestCase): + + def setUp(self): + MarionetteTestCase.setUp(self) + + self.pid = self.marionette.process_id + self.session_id = self.marionette.session_id + + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + self.marionette.set_pref("browser.startup.page", 3) + + def tearDown(self): + # Ensure to restart a session if none exist for clean-up + if not self.marionette.session: + self.marionette.start_session() + + self.marionette.clear_pref("browser.startup.page") + + MarionetteTestCase.tearDown(self) + + def test_force_restart(self): + self.marionette.restart() + self.assertEqual(self.marionette.session_id, self.session_id) + + # A forced restart will cause a new process id + self.assertNotEqual(self.marionette.process_id, self.pid) + + # If a preference value is not forced, a restart will cause a reset + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_force_quit(self): + self.marionette.quit() + + self.assertEqual(self.marionette.session, None) + with self.assertRaisesRegexp(MarionetteException, "Please start a session"): + self.marionette.get_url() + + self.marionette.start_session() + self.assertNotEqual(self.marionette.session_id, self.session_id) + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_in_app_clean_restart(self): + with self.assertRaises(ValueError): + self.marionette.restart(in_app=True, clean=True) + + def test_in_app_restart(self): + self.marionette.restart(in_app=True) + self.assertEqual(self.marionette.session_id, self.session_id) + + # An in-app restart will keep the same process id only on Linux + if self.marionette.session_capabilities['platformName'] == 'linux': + self.assertEqual(self.marionette.process_id, self.pid) + else: + self.assertNotEqual(self.marionette.process_id, self.pid) + + # If a preference value is not forced, a restart will cause a reset + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_in_app_restart_with_callback(self): + self.marionette.restart(in_app=True, + callback=lambda: self.shutdown(restart=True)) + + self.assertEqual(self.marionette.session_id, self.session_id) + + # An in-app restart will keep the same process id only on Linux + if self.marionette.session_capabilities['platformName'] == 'linux': + self.assertEqual(self.marionette.process_id, self.pid) + else: + self.assertNotEqual(self.marionette.process_id, self.pid) + + # If a preference value is not forced, a restart will cause a reset + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_in_app_quit(self): + self.marionette.quit(in_app=True) + + self.assertEqual(self.marionette.session, None) + with self.assertRaisesRegexp(MarionetteException, "Please start a session"): + self.marionette.get_url() + + self.marionette.start_session() + self.assertNotEqual(self.marionette.session_id, self.session_id) + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_in_app_quit_with_callback(self): + self.marionette.quit(in_app=True, callback=self.shutdown) + self.assertEqual(self.marionette.session, None) + with self.assertRaisesRegexp(MarionetteException, "Please start a session"): + self.marionette.get_url() + + self.marionette.start_session() + self.assertNotEqual(self.marionette.session_id, self.session_id) + self.assertNotEqual(self.marionette.get_pref("browser.startup.page"), 3) + + def test_reset_context_after_quit_by_set_context(self): + # Check that we are in content context which is used by default in Marionette + self.assertNotIn('chrome://', self.marionette.get_url(), + "Context doesn't default to content") + + self.marionette.set_context('chrome') + self.marionette.quit(in_app=True) + self.assertEqual(self.marionette.session, None) + self.marionette.start_session() + self.assertNotIn('chrome://', self.marionette.get_url(), + "Not in content context after quit with using_context") + + def test_reset_context_after_quit_by_using_context(self): + # Check that we are in content context which is used by default in Marionette + self.assertNotIn('chrome://', self.marionette.get_url(), + "Context doesn't default to content") + + with self.marionette.using_context('chrome'): + self.marionette.quit(in_app=True) + self.assertEqual(self.marionette.session, None) + self.marionette.start_session() + self.assertNotIn('chrome://', self.marionette.get_url(), + "Not in content context after quit with using_context") + + def test_keep_context_after_restart_by_set_context(self): + # Check that we are in content context which is used by default in Marionette + self.assertNotIn('chrome://', self.marionette.get_url(), + "Context doesn't default to content") + + # restart while we are in chrome context + self.marionette.set_context('chrome') + self.marionette.restart(in_app=True) + + # An in-app restart will keep the same process id only on Linux + if self.marionette.session_capabilities['platformName'] == 'linux': + self.assertEqual(self.marionette.process_id, self.pid) + else: + self.assertNotEqual(self.marionette.process_id, self.pid) + + self.assertIn('chrome://', self.marionette.get_url(), + "Not in chrome context after a restart with set_context") + + def test_keep_context_after_restart_by_using_context(self): + # Check that we are in content context which is used by default in Marionette + self.assertNotIn('chrome://', self.marionette.get_url(), + "Context doesn't default to content") + + # restart while we are in chrome context + with self.marionette.using_context('chrome'): + self.marionette.restart(in_app=True) + + # An in-app restart will keep the same process id only on Linux + if self.marionette.session_capabilities['platformName'] == 'linux': + self.assertEqual(self.marionette.process_id, self.pid) + else: + self.assertNotEqual(self.marionette.process_id, self.pid) + + self.assertIn('chrome://', self.marionette.get_url(), + "Not in chrome context after a restart with using_context") + + def shutdown(self, restart=False): + self.marionette.set_context("chrome") + self.marionette.execute_script(""" + Components.utils.import("resource://gre/modules/Services.jsm"); + let flags = Ci.nsIAppStartup.eAttemptQuit + if(arguments[0]) { + flags |= Ci.nsIAppStartup.eRestart; + } + Services.startup.quit(flags); + """, script_args=[restart]) |