test_window_close.py (4747B)
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.by import By 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 TestCloseWindow(ChromeHandlerMixin, WindowManagerMixin, MarionetteTestCase): 23 def tearDown(self): 24 self.close_all_windows() 25 self.close_all_tabs() 26 27 super(TestCloseWindow, self).tearDown() 28 29 def test_close_chrome_window_for_browser_window(self): 30 with self.marionette.using_context("chrome"): 31 new_window = self.open_window() 32 self.marionette.switch_to_window(new_window) 33 34 self.assertIn(new_window, self.marionette.chrome_window_handles) 35 chrome_window_handles = self.marionette.close_chrome_window() 36 self.assertNotIn(new_window, chrome_window_handles) 37 self.assertListEqual(self.start_windows, chrome_window_handles) 38 self.assertNotIn(new_window, self.marionette.window_handles) 39 40 def test_close_chrome_window_for_non_browser_window(self): 41 new_window = self.open_chrome_window(self.chrome_base_url + "test.xhtml") 42 self.marionette.switch_to_window(new_window) 43 44 self.assertIn(new_window, self.marionette.chrome_window_handles) 45 self.assertNotIn(new_window, self.marionette.window_handles) 46 chrome_window_handles = self.marionette.close_chrome_window() 47 self.assertNotIn(new_window, chrome_window_handles) 48 self.assertListEqual(self.start_windows, chrome_window_handles) 49 self.assertNotIn(new_window, self.marionette.window_handles) 50 51 def test_close_chrome_window_for_last_open_window(self): 52 self.close_all_windows() 53 54 self.assertListEqual([], self.marionette.close_chrome_window()) 55 self.assertListEqual([self.start_tab], self.marionette.window_handles) 56 self.assertListEqual([self.start_window], self.marionette.chrome_window_handles) 57 self.assertIsNotNone(self.marionette.session) 58 59 def test_close_window_for_browser_tab(self): 60 new_tab = self.open_tab() 61 self.marionette.switch_to_window(new_tab) 62 63 window_handles = self.marionette.close() 64 self.assertNotIn(new_tab, window_handles) 65 self.assertListEqual(self.start_tabs, window_handles) 66 67 def test_close_window_for_browser_window_with_single_tab(self): 68 new_tab = self.open_window() 69 self.marionette.switch_to_window(new_tab) 70 71 self.assertEqual(len(self.marionette.window_handles), len(self.start_tabs) + 1) 72 window_handles = self.marionette.close() 73 self.assertNotIn(new_tab, window_handles) 74 self.assertListEqual(self.start_tabs, window_handles) 75 self.assertListEqual(self.start_windows, self.marionette.chrome_window_handles) 76 77 def test_close_window_for_last_open_tab(self): 78 self.close_all_tabs() 79 80 self.assertListEqual([], self.marionette.close()) 81 self.assertListEqual([self.start_tab], self.marionette.window_handles) 82 self.assertListEqual([self.start_window], self.marionette.chrome_window_handles) 83 self.assertIsNotNone(self.marionette.session) 84 85 def test_close_browserless_tab(self): 86 self.close_all_tabs() 87 88 test_page = self.marionette.absolute_url("windowHandles.html") 89 new_tab = self.open_tab() 90 self.marionette.switch_to_window(new_tab) 91 self.marionette.navigate(test_page) 92 self.marionette.switch_to_window(self.start_tab) 93 94 with self.marionette.using_context("chrome"): 95 self.marionette.execute_async_script( 96 """ 97 const { BrowserWindowTracker } = ChromeUtils.importESModule( 98 "resource:///modules/BrowserWindowTracker.sys.mjs" 99 ); 100 101 let win = BrowserWindowTracker.getTopWindow(); 102 win.addEventListener("TabBrowserDiscarded", ev => { 103 arguments[0](true); 104 }, { once: true}); 105 win.gBrowser.discardBrowser(win.gBrowser.tabs[1]); 106 """ 107 ) 108 109 window_handles = self.marionette.window_handles 110 window_handles.remove(self.start_tab) 111 self.assertEqual(1, len(window_handles)) 112 self.marionette.switch_to_window(window_handles[0], focus=False) 113 self.marionette.close() 114 self.assertListEqual([self.start_tab], self.marionette.window_handles)