tor-browser

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

test_window_handles.py (6696B)


      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 import os
      6 import sys
      7 from urllib.parse import quote
      8 
      9 from marionette_driver import errors
     10 from marionette_harness import MarionetteTestCase, WindowManagerMixin
     11 
     12 # add this directory to the path
     13 sys.path.append(os.path.dirname(__file__))
     14 
     15 from chrome_handler_mixin import ChromeHandlerMixin
     16 
     17 
     18 def inline(doc):
     19    return "data:text/html;charset=utf-8,{}".format(quote(doc))
     20 
     21 
     22 class TestWindowHandles(ChromeHandlerMixin, WindowManagerMixin, MarionetteTestCase):
     23    def setUp(self):
     24        super(TestWindowHandles, self).setUp()
     25 
     26        self.chrome_dialog = self.chrome_base_url + "test.xhtml"
     27 
     28    def tearDown(self):
     29        self.close_all_windows()
     30        self.close_all_tabs()
     31 
     32        super(TestWindowHandles, self).tearDown()
     33 
     34    def assert_window_handles(self):
     35        try:
     36            self.assertIsInstance(self.marionette.current_window_handle, str)
     37        except errors.NoSuchWindowException:
     38            pass
     39 
     40        for handle in self.marionette.window_handles:
     41            self.assertIsInstance(handle, str)
     42 
     43    def test_window_handles_after_opening_new_tab(self):
     44        new_tab = self.open_tab()
     45        self.assert_window_handles()
     46        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
     47        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     48 
     49        self.marionette.switch_to_window(new_tab)
     50        self.assert_window_handles()
     51        self.assertEqual(self.marionette.current_window_handle, new_tab)
     52 
     53        self.marionette.switch_to_window(self.start_tab)
     54        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     55 
     56        self.marionette.switch_to_window(new_tab)
     57        self.marionette.close()
     58        self.assert_window_handles()
     59        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
     60 
     61        self.marionette.switch_to_window(self.start_tab)
     62        self.assert_window_handles()
     63        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     64 
     65    def test_window_handles_after_opening_new_browser_window(self):
     66        new_tab = self.open_window()
     67        self.assert_window_handles()
     68        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
     69        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     70 
     71        self.marionette.switch_to_window(new_tab)
     72        self.assert_window_handles()
     73        self.assertEqual(self.marionette.current_window_handle, new_tab)
     74 
     75        # Close the opened window and carry on in our original tab.
     76        self.marionette.close()
     77        self.assert_window_handles()
     78        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
     79 
     80        self.marionette.switch_to_window(self.start_tab)
     81        self.assert_window_handles()
     82        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     83 
     84    def test_window_handles_after_opening_new_non_browser_window(self):
     85        new_window = self.open_chrome_window(self.chrome_dialog)
     86        self.assert_window_handles()
     87        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
     88        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
     89        self.assertNotIn(new_window, self.marionette.window_handles)
     90 
     91        self.marionette.switch_to_window(new_window)
     92        self.assert_window_handles()
     93 
     94        # Check that the opened window is not accessible via window handles
     95        with self.assertRaises(errors.NoSuchWindowException):
     96            self.marionette.current_window_handle
     97        with self.assertRaises(errors.NoSuchWindowException):
     98            self.marionette.close()
     99 
    100        # Close the opened window and carry on in our original tab.
    101        self.marionette.close_chrome_window()
    102        self.assert_window_handles()
    103        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    104 
    105        self.marionette.switch_to_window(self.start_tab)
    106        self.assert_window_handles()
    107        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    108 
    109    def test_window_handles_after_session_created(self):
    110        new_window = self.open_chrome_window(self.chrome_dialog)
    111        self.assert_window_handles()
    112        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    113        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    114        self.assertNotIn(new_window, self.marionette.window_handles)
    115 
    116        window_handles = self.marionette.window_handles
    117 
    118        self.marionette.delete_session()
    119        self.marionette.start_session()
    120 
    121        self.assert_window_handles()
    122 
    123        # For a new session the window handles will have a new uuid as value
    124        self.assertEqual(len(window_handles), len(self.marionette.window_handles))
    125        for item in self.marionette.window_handles:
    126            self.assertNotIn(item, window_handles)
    127 
    128    def test_window_handles_include_unloaded_tabs(self):
    129        new_tab = self.open_tab()
    130        self.assert_window_handles()
    131        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    132        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    133 
    134        self.marionette.switch_to_window(new_tab)
    135        self.assert_window_handles()
    136        self.assertEqual(self.marionette.current_window_handle, new_tab)
    137 
    138        # The restart will cause the background tab to stay unloaded
    139        self.marionette.restart(in_app=True)
    140 
    141        self.assert_window_handles()
    142        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    143 
    144    def test_window_handles_after_closing_original_tab(self):
    145        new_tab = self.open_tab()
    146        self.assert_window_handles()
    147        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1)
    148        self.assertEqual(self.marionette.current_window_handle, self.start_tab)
    149        self.assertIn(new_tab, self.marionette.window_handles)
    150 
    151        self.marionette.close()
    152        self.assert_window_handles()
    153        self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs))
    154        self.assertNotIn(self.start_tab, self.marionette.window_handles)
    155 
    156        self.marionette.switch_to_window(new_tab)
    157        self.assert_window_handles()
    158        self.assertEqual(self.marionette.current_window_handle, new_tab)
    159 
    160    def test_window_handles_after_closing_last_tab(self):
    161        self.close_all_tabs()
    162        self.assertEqual(self.marionette.close(), [])